さて、Raspberry Piを使うとなるとやはり開発言語はPythonでしょう。
IP Messengerのプロトコルについてはこの辺りを参考にさせていただきます。 http://ipmsg.org/protocol.txt
http://libipmsg.sourceforge.jp/specification.html
今回はメッセージの送信は重要視しておらず、IP Messengerのユーザリストにリストアップされて、送られてくるメッセージを受け取ることができればOKです。 ざっくりまとめると、
- ネットワーク上のIP MessengerサービスにエントリするためのメッセージをUDP 2425でブロードキャスト。
- その後2425をリッスン。
- メッセージが来たら受け取ったよメッセージを返す。エントリメッセージの場合はエントリ受け付けたよメッセージを返す。
これだけです。 プロトコルフォーマットは
<バージョン>:<パケット番号>:<ユーザ名>:<ホスト名>:<コマンド番号>:<オプション部>
です。
バージョンは1固定でOKっぽいです。
パケット番号は乱数で。
ユーザ名とホスト名は適当に文字列を。
コマンド番号はIP Messengerのソースコードをダウンロードしてipmsg.hをみると早いです。エントリ時に送信するメッセージはこんな感じで定義されていました。
#define IPMSG_BR_ENTRY 0x00000001UL
とりあえずユーザリストにリストアップしてもらうところまでをさらっと。
import socket import random s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) s.bind(('0.0.0.0', 2425)) pnum = random.randrange(1, 100000) msg = "%s:%s:%s:%s:%s:%s" % (1, pnum, 'ipmsg_light', 'raspberrypi', 1, '') s.sendto(msg, ('255.255.255.255', 2425)) s.close()