ZerOx4Cの日記だったもの

インポートだけしました

シリアル化ってステキ

今コンピュータ室の貸し出し管理プログラムを凄く頑張ってるんですけど、一応仕様としては、

  • サーバー機とクライアント機で最低2台のマシンをLANで接続して使う
  • サーバー機は係りの人がモニタするものとして、ログをひたすら表示する
  • クライアント機はコンピュータ室の入り口にでも置いといて、窓口として動く
  • クライアント機はサーバー機に要求コマンドを送って、サーバー機がそれに応答する
  • サーバー機がログを管理するので、複数のクライアント機があってもデータの整合性は保たれる

とまぁ、こんな感じで。
この「要求コマンド」をさっきまで、

public class CommandMessage {
    // 送信元
    public IPEndPoint SourceEndPoint{ get; private set; }

    // コマンド文字列
    public string Command{ get; private set; }

    // パラメータ
    public string[] Parameters{ get; private set; }
}

(ネットワークプログラミングなんて初めてだよ!多分将来見たら布団に顔を埋めて足をバタバタしたくなると思うよ!)
こんな感じに書いていたんですけど、
「CommandMessageクラスを文字列に変換して送信」→「受信して文字列をCommandMessageクラスに変換」
ってのが凄く面倒なんですよね。(書いてしまえば勝ちだけど、なんかエレガントじゃない。


というわけで、色々と考えを巡らせていたんですけど、BinaryFormatterがすごく使えそうです。
文字列変換して送信する時点で拡張のし易さがエクストリーム失われていたので、バイナリでしかもクラスの状態で送信することが出来るのはすごい利点です。
しかも、送信はともかく受信に関しては、ちょっと面倒なコードだったんですけど、BinaryFormatterは逆シリアル化関数に直接ストリームを指定できるので、バッファがどうのこうのする必要が無くなります。これもすごい利点です。
もうBinaryFormatterと人生を共にしようと思います。本当にありがとうございました


今日は脳が神がかってるようです。この調子で完成したらゲーム作れるのにね。


追記:
実装してみたら20行あったコードが6行になってワロタwwww