How to Write an Asynchronous, Multi User, Platform-Independent Application

我が家の家計簿は Cocoa ベースのナイスな UI つきアプリケーションで入力 して、awk で統計処理してから MONGO で可視化して、紙への出力は家電制御 向け OS で一発なんザマスのよオホホホホ。

という、ごくありがちな家庭のネットワーク環境を利用して、家族みんなでラ リーXをプレイしたくなった時にはこれを読めば完璧。

ラリーXを知らない読者へ

カエレ!

遊んでやるからやり方教えろという読者へ

これをもってゆくがよい。

そんで展開して遊ぶがよい。

ソースパクらせろという読者へ

ほらよ (なぜか ZIP 形式)。Linux の人は展開し て make すると実行形式ができます。Win の人は ./server と ./client に Visual C++ のワークスペースがあるのでそれでビルドしましょう。Mac OS-X の人は make -f Makefile.macosx しましょう。Mac 以外の人は事前に GLUT をインストールしておく必要があるます屋。

これまでのあらすじ

通信は Berkley socket で、画面描画は OpenGL (GLUT) でやってます。プラッ トフォーム依存な部分がちょっとだけあります。そういうとこは #define で 場合分けしてあります。原始的ですね。

ムカつくんだよてめへ、あらいやだ、私としたことがお下劣

Windows 上では WinSock とかいうラッパを使いましたが、いろいろ重要な機 能がサポートされていなくてムカつきました。特に、受信用のキューにデータ が来ているかどうかをブロックせずにチェックするところで苦労しました。 recv() を MSG_DONTWAIT で使おうとしたらそんなフラグはねぇよって言いや がられましたのがムカつきました。結局 ioctlsocket() ていうのを使うこと にしました。

Mac OS-X 上ではほとんどそのままでコンパイル通りました。ただし GLUT の ヘッダのありかが <GLUT/glut.h> なのと、リンカに

"-framework" "GLUT" "-framework" "OpenGL" "-framework" "Foundation"
を渡さなくてはならないのを知らなくてハマってムカつきました。それから G4 とか G5 は big endian なので送受信するデータのバイトオーダを真面目 に考えないと動かないのでムカつきました。htonl() とか ntohl() とかを使 いました。

既知のバグ:

参考文献:



How to Top
おれんち
ためしにこんなんつけてみた。どうか? プライバシー侵害? うへへへへ