視界内にいないPCにもメッセージを送りつけるいわゆるシャウトのようなものを実装するための数行の追加にほぼ一日がかかった。そもそものネットワークトポロジの基本的な部分が、お互いの情報を必要とするクライアント同士がローカルに寄り集まって情報交換するというP2P形式なために、ネットワークの全体に情報を行き渡らせるとなると、他とはかなり異質な動きをするパケット伝播のルールを定めなくてはならない。

シャウトしたクライアントはまずネットワークの根っこを目指すパケットを流す。途中で受け取ったクライアントは根っこに近い方へリレーをしてやってサーバーであるルートノードへとパケットを到達させる。ルートノードは今度はパケットに定められたの行き先(接続者全体か、あるマップにいる全員か、など)を確認し、直接自分に接続しているクライアントの内で該当するものへ今度は逆方向、ぶら下がっているクラスタ全体へ伝播するようにパケットを流す。

めんどくさいのは上に書いたようなパケットの流れに視点を置いてシステムをプログラムができないことで、それぞれのクライアントなりサーバーなりがある種類のパケットを受け取ったときに、それぞれがどの方向へ流すのかを定めるだけという断片的な実装を寄せ集めて全体として機能するようにしかできないこと。めんどくさいばかりかちょっと不安。見通しがよくない。なんとかしてシステム全体、ネットワーク全体を見渡せるような記述ってできないもんだろうか。

あー例えばそれぞれのノードがそれぞれの種類のパケットを受け取ったときにどう振る舞うかを定めていくのではなく、逆にパケットそのものがそれぞれの種類のノードに受け取られたときにどう振舞うのかを知っていて各ノードに到達したときにノードへ指示をする、みたいな書き方をするといいのか?