2018年5月7日月曜日

ST17のネットワークのデータフォーマット

 ST17のネットワークモードのデータフォーマットを調べてみた。
 バージョン1.0.8.7のソフトウェアによる。
 ST32は別のプロトコルかも。バージョン変わるとフォーマットも変わるかも

 通信プロトコル(TCP, UDP等)とポートの確認にはWiresharkを使った(久しぶりに使ったけど、日本語化されてて便利)。

 通信はポート62739番のTCPで行われていて、このポートでTCPサーバーを立てればST17をクライアントとして接続できる。
 基本的にプリフィックス"@"で始まり\r\nで終わる文字列が与えられる。
 適切にACKを返さないと、クライアントがメモリリークしてしぬ。ACKは固定パターンで良いっぽい。詳しくはWiresharkで参照のこと。

 .Netの特性なのか、ネットワークドライバの特性なのか、Wiresharkの特性なのか、同じIPアドレス間ではWiresharkでキャプチャできない。PCを2台用意して、1台でST17をサーバーとして動かし、もう1台でクライアントとして動かし、PC間の通信をWiresharkでフィルタリングするとやりやすい。
 サーバー側を自分で作るなら、データを受信したら固定パターンのACKを返すだけでとりあえず動作するので、あとは得られた文字列をデバッグダンプしておけば、データを人力デコードできる。


 ポーリングデータのフォーマットは以下の通り。

 とりあえず大体のデータは得られるが、移動する的の場合、的の位置といった情報は得られない。固定的でも、的の大きさと言った情報は得られないはず。

 他に、"@D"で始まる弾着データが送られてくる。これには何発目か、スコアはどれくらいか、時間はいつか、エネルギーや弾速はどれくらいだったか、座標はどこか、といったデータが含まれる。位置情報は液晶のピクセル位置で得られる。

 ST17のネットワークモードはよくわからない。ソフトウェアを片方サーバー、片方クライアントにして接続してみても、何ができるかよくわからない。

***

 以前、ST17の的を自分で作ろうと思った時は、hWind総当たりでST17のターゲット画面をキャプチャして、それを画像解析して弾着位置を調べよう、と思ったことがある。
 確かノートPCで15fpsくらいしか処理できなかった気がする。冷却ファンの音も凄まじかった。

 TCPで情報が得られるのがわかったので、画像処理より格段に簡単な方法で情報を得ることができる。

 エアガンショップのレンジにST17が置いてあるくらいなら、ブルズアイターゲットとかタクティカルターゲットでも良いのだけど、頻繁にST17を使える環境にいると、ST17の的は致命的なまでにバリエーションが少ない(遊び方の問題かも。精密射撃しかしないなら足りるだろうし)。
 
 ということで、気が向いたらST17のサーバーを作って、自由に的を表示できるソフトを作りたいな、と思っている次第。
 いつになるやら。冬のインドアシューティングがメインになる時期までにはどうにかしたい。

0 件のコメント:

コメントを投稿