この記事は何?
自作のopenFrameworks addonの紹介と宣伝です。
https://github.com/nariakiiwatani/ofxSearchNetworkNode
なにができるの?
- 同じネットワーク内にあるホストを勝手に発見して相互にIPアドレスを教えあってくれる
- 接続や切断のイベントを通知してくれる
- ホストに名前をつけられる
- ホストにグループを設定できる(複数設定可)
- 同じグループのホストだけ発見するとか
- 特定のグループのホストだけ発見するとか
- 他のホストから発見されないようにもできる(シークレットモード)
つまり複数デバイスを連携する時に
それぞれの端末のIPアドレスを調べて設定ファイルとかコードとかに手打ちしなくてよくなる
ということ。
使い方
using namespace std;
// 最小の使い方であればこれだけでOK
ofxSearchNetworkNode search;
search.setup(8000, "my name"); // 通信(UDP)に使うポートと、他ホストに通知する自分の名前
search.request();
// あとはgetNodesでいま見えるノード(ホスト)のIPアドレスとその他情報のmapを取得したり
const map<string, ofxSearchNetworkNode::Node> &nodes = search.getNodes();
// イベントリスナを登録したりできる
ofAddListener(search.nodeFound, this, &ofApp::onFoundNode);
void ofApp::onFoundNode(const pair<string, ofxSearchNetworkNode::Node> &node) {
cout << "node found : " << node.first << "," << node.second.name << "(" << node.second.groups << ")" << endl;
}
その他の使い方はofxSearchNetworkNode.h
を読んでください。
(例)Mac1台と不特定多数のiPhoneを連携したい
グループをmyApp,mobile
に設定したiPhoneアプリを配布してMacのグループをmyApp,laptop
に設定しておくと
同じネットワークに繋がってさえいればiPhoneアプリが起動した瞬間にMacからそのデバイスを発見することができる。(Macアプリが後から立ち上がっても問題ない)
nodeFound
イベントでnode.group
をチェックして、見つかったホストがiPhoneなのかMacなのかも判断できる。
その他
- これはoF以外の環境でも相互に使えると良いと思うのだけど、そのためにはoF非依存にして
.a
なり.lib
なり.dll
なりで書き出せば良いのかな?やり方調べねばだなあ。 - 現バージョン(2017.5.9時点)ではWindowsやAndroidだと自分でブロードキャストアドレスを入力しなきゃいけなかったり、発見したホストが自分自身かどうかが判断できなかったりするんだけど誰かソケット部分書いてくれないかなあ。