{"id":23379674,"url":"https://github.com/kazenetu/cpp-pubsub-container","last_synced_at":"2025-10-04T18:50:07.100Z","repository":{"id":69921427,"uuid":"233542239","full_name":"kazenetu/cpp-pubsub-container","owner":"kazenetu","description":"C++用簡易pub/subコンテナ","archived":false,"fork":false,"pushed_at":"2020-01-29T21:08:57.000Z","size":48,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-08T06:42:07.624Z","etag":null,"topics":["cpp","pubsub-container"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kazenetu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-13T08:01:39.000Z","updated_at":"2020-02-02T14:20:05.000Z","dependencies_parsed_at":"2023-04-20T21:34:01.739Z","dependency_job_id":null,"html_url":"https://github.com/kazenetu/cpp-pubsub-container","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kazenetu/cpp-pubsub-container","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kazenetu%2Fcpp-pubsub-container","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kazenetu%2Fcpp-pubsub-container/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kazenetu%2Fcpp-pubsub-container/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kazenetu%2Fcpp-pubsub-container/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kazenetu","download_url":"https://codeload.github.com/kazenetu/cpp-pubsub-container/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kazenetu%2Fcpp-pubsub-container/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278358476,"owners_count":25973946,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","pubsub-container"],"created_at":"2024-12-21T19:19:56.999Z","updated_at":"2025-10-04T18:50:07.065Z","avatar_url":"https://github.com/kazenetu.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# C++用簡易pub/subコンテナ\n簡易的なPublish/Subscribeメッセージ機能\n\n# 主な特徴\n* ISubscribeを継承したクラスのみSubscribe(購読:受信)として登録可能。\n* Publish(出版:送信)はどの処理からでも実行可能。\n* スタティックライブラリとして実装。\n\n# 機能詳細\n|クラス・メソッド|概要|備考|\n|---------------|-----------|-----------|\n|ISubscribe|Subscribe(購読:受信)クラス継承用\u003cbr\u003eスーパークラス|・public継承\u003cbr\u003e・void ReceiveMessage(std::string message)の実装が必要|\n|PubSubContainer::Add(ISubscribe* instance)|Subscribe(購読:受信)インスタンス追加|追加したインスタンスに対してpublishしたメッセージが送信される|\n|PubSubContainer::Publish(std::string message)|追加したSubscribeインスタンスに対してメッセージを一斉送信する|SubscribeインスタンスのReceiveMessageメソッドが呼び出される|\n|PubSubContainer::Remove(ISubscribe* instance)|追加済みSubscribeインスタンスを送信対象から除外する|第一パラメータに除外対象のSubscribeインスタンスを指定する|\n|PubSubContainer::RemoveAll()|追加済みSubscribeインスタンス全てを送信対象から除外する||\n\n\n# 実装例\n## Subscribe(購読:受信)用クラス:**example/class/TestClass.h**\n```cpp\n#pragma once\n\n#ifndef TESTCLASS_H\n#define TESTCLASS_H\n\n#include \"ISubscribe.h\"\n\nclass TestClass :public ISubscribe\n{\npublic:\n\tTestClass(std::string name)\n\t\t: instanceName(name) {\n\t}\n\n\t/*\n\t  メッセージ受信\n\t*/\n\tvoid ReceiveMessage(std::string message) {\n\t\t// メッセージを表示\n\t\tstd::cout \u003c\u003c \"name:\" \u003c\u003c instanceName \u003c\u003c \" message:\" \u003c\u003c message \u003c\u003c \"\\n\";\n\t}\n\nprivate:\n\tstd::string instanceName;\n\n};\n#endif //TESTCLASS_H\n```\n\n\n## 利用例:**example/main.cpp**\n```cpp\n#include \"class/TestClass.h\"\n#include \"PubSubContainer.h\"\n\nint main() {\n\t// TestClassインスタンスを生成\n\tauto test1 = std::make_unique\u003cTestClass\u003e(\"TEST1\");\n\tauto test2 = std::make_unique\u003cTestClass\u003e(\"TEST2\");\n\n\t// 購読登録\n\tPubSubContainer::Add(test1.get());\n\tPubSubContainer::Add(test2.get());\n\n\n\t// 発行\n\tPubSubContainer::Publish(\"Publish\");\n\n}\n```\n```sh\n# 実行結果\nname:TEST2 message:Publish\nname:TEST1 message:Publish\n```\n\n# ビルド(コンパイル)方法\n* Visual Studioでのビルド方法  \n  **本ライブラリを使用するプロジェクトは下記を設定する。**  \n  ※詳細は[example](example/)を参照\n   * 対象ソリューションにpubsub-container」プロジェクトを追加。 (同時にライブラリのビルドを行う場合)\n\n   * 「プロジェクトの依存関係」で「pubsub-container」プロジェクトにチェック。 (同時にライブラリのビルドを行う場合)\n\n   * 「C/C++」の「追加のインクルードディレクトリ」に  \n     「pubsub-container/include」ディレクトリを追加。\n\n   * 「リンカー」－「入力」の「追加の依存ファイル」に  \n     「$(SolutionDir)$(Platform)\\$(Configuration)\\pubsub-container.lib」を追加。\n\n   **実行方法**  \n  1. Visual Studioでexample.slnを開く。\n  1. デバッグ実行を実施する。\n\n* makeでのコンパイル・リンク方法  \n  [example/make.sh](example/make.sh)でも下記のスタティックライブラリの作成とコンパイル・リンクが行える。\n 1. 事前手順：簡易pub/subコンテナのコンパイル\n    * pubsub-containerをスタティックライブラリとしてコンパイルする。  \n\t  ※```./lib/libpubsub.a```が作成される  \n\t  ```sh\n\t  cd pubsub-container\n\t  make clean\n      make\n\t  ```\n 1. ライブラリ使用側のコンパイル・リンク  \n  **本ライブラリを使用する場合は下記を設定する。**  \n  [example/makefile](example/makefile)を参照  \n    ```makefile\n\t#!/bin/make\n\n\t# build directory\n\tSRCPATH := ./src\n\n\tBUILDPATH := ./build\n\tBINPATH := ./bin\n\tBINNAME := example.out\n\n\tCXX := g++\n\tINCLUDE := -I /usr/local/include -I /usr/include -I./include -I../pubsub-container/include #追加1\n\tCXXFLAGS := -Wall -O2 \n\tLDFLAGS := -L /usr/lib -L /usr/local/lib -L ../pubsub-container/lib #追加2\n\tLIBS := -lpubsub #追加3\n\tSRCS := $(shell find $(SRCPATH) -name '*.cpp')\n\tOBJS :=  $(patsubst $(SRCPATH)/%,$(BUILDPATH)/%,$(SRCS:.cpp=.o))\n\n\t$(BINPATH)/$(BINNAME):$(OBJS)\n\t\tmkdir -p $(BINPATH)\n\t\t$(CXX) -o $@ $^ $(LDFLAGS) $(LIBS)\n\n\t$(BUILDPATH)/%.o : $(SRCPATH)/%.cpp\n\t\tmkdir -p  $(BUILDPATH)\n\t\t$(CXX) $(CXXFLAGS) $(INCLUDE) $(LDFLAGS) -o $@ -c $^\n\n\t.PHONY: clean\n\t\n\tclean:\n\t\trm -rf $(BUILDPATH)\n\t\trm -rf $(BINPATH)  \n    ```  \n   **追加内容**  \n   1. cppファイルコンパイル時のincludeディレクトリに```pubsub-container/include```を追加。\n\n   1. cppファイルコンパイル時とリンク時のライブラリディレクトリに```pubsub-container/lib```を追加。\n   \n   1. リンク時のスタティックライブラリに```libpubsub.a```を追加。  \n   ※```-lpubsub```と省略  \n\n   **実行方法**  \n   ```bin/example.out```を実行する。\n   ```sh\n   ./bin/example.out\n   ```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkazenetu%2Fcpp-pubsub-container","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkazenetu%2Fcpp-pubsub-container","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkazenetu%2Fcpp-pubsub-container/lists"}