/*!
  \page network_module_page マルチプレイ用の通信モジュール

  複数のプレイヤーが参加できるためのネットワークモジュールについて定義し、実装します。

  \section network_abst_section 必要な機能の確認

  サーバ側がゲームの情報を管理するモデルを考えます。

  \dot
  digraph server_client_model {
    graph [rankdir = LR, fontname = default, fontsize = 10];

    subgraph cluster0 {
      label = "クライアント"
      Client [label = "ゲーム情報(コピー)", fontname = default, fontsize = 10];
    }

    subgraph cluster1 {
      label = "サーバ"
      Server [label = "ゲーム情報(マスター)", fontname = default, fontsize = 10];
    }

    Client -> Server [label = "操作イベント", fontname = default, fontsize = 8];
    Server -> Client [label = "ゲーム情報、個別応答", fontname = default, fontsize = 8];
  }
  \enddot

  このモデルでは、クライアントはゲームに対する操作情報をサーバに送り、サーバは更新されたゲーム情報を全てのクライアントに送信して同期しています。ゲーム情報が小規模であれば、全てのクライアントの情報を１つに同期する実装で問題ないでしょう。\n

  このモデルで実装したチャットサンプルを以下に示します。\n
  チャットなので、サーバは各クライアントからのメッセージを、全てのクライアントに送っています。

  chat_server.cpp, chat_client.cpp, <a href="http://svn.sourceforge.jp/view/trunk/libs/network/samples/chat_client.lua?view=co&root=qrobosdk">chat_client.lua</a>

  \image html chat_sample_image.png クライアント画面の動作例

  \n
  \section network_module_packet_section パケット形式の定義

  パケット形式を定義します。\n
  TCP/IP での送受信を想定しており、パケット全体のチェックサム等は省略しています。

  \dot
  digraph packekt_define {
    node1 [shape = record, label = "Length\n(3 byte)|Type\n(2 byte)|Data\n(some byte)|End\n(1 byte)"];
  }
  \enddot

  - パケット形式
    - パケット長 (Length) ... バイナリ 3 byte の表現で、ヘッダからフッタまでのパケット長を示す
    - パケットの種類 (Type) ... ASCII 2 byte の表現で、パケットの種類を定義する
    - データ (Data) ... パケットの種類毎に、任意
    - 終端文字 (End) ... '\\0' を格納する

  \n
  \section network_module_others_section 各種パケットの定義

  - \subpage network_chat_page
  - \subpage network_clients_page
  - タイムスタンプの同期
  - GUI 画面の同期

  \n
  \section network_comment_section コメントページ

  - http://sourceforge.jp/forum/forum.php?forum_id=18515

  \n
*/
