node内部状態を表示できるようにしてテストに臨む。接続失敗のときに原因をエラー番号ではなくメッセージで表示するようにしておいたので、一人refuseしまくっていた人はSoftEtherが原因だったことがわかるが、もう一人timedoutしている人については結局原因はつかめず。なんかテストに参加してくれる数少ない人たちがそろいもそろって不良な接続受け入れ環境にあるのは笑えるが、実はほとんどの人がこんな具合なんだったらどうしようかと不安にもなる。

HPバーがのびのびしてしまうバグはもちろんグチャグチャなデータが送られてきているからに違いなかったのだが、プログラムのバイナリがおかしくなっててだとか、通信時にノイズが、とかありえないことが原因なのではないかと疑心暗鬼に陥りながら、テストにきてくれる人が飽きないように気を配りながら、結局転送処理が問題だったことを突き止める。一度evalされてスクランブルが解けているデータを送ってしまうので、こちらで再度スクランブル解除処理を行ってグチャグチャのデータを作っていた。evalする前にリレーのバッファへ送ってしまうことで解決。

Packetクラスに依存しない、単に生データをやり取りするコネクションクラスを作ってその上に今までのものを置くような設計にしようかと考えたけど、別に今すぐ機能が増えるわけでも無いからやめた。

そういえば他人と接続しているときにキーコンフィグをやろうとしてループ全体をとめてしまうのはまずいかもしれない。もしかするとそれが、ゲーム中にはキーコンフィグできない原因かも。