マッチングサーバー
プロトコルを考えてみたりですにゃ。
- 扱う文字コードはUTF-16にゃで。
- 親と子みたいな感じに区別
- マッチング人数 2〜32人
- チャットは無し(あるとトラブルにゃの元にゃので)
- キックもにゃし
- キーデータを送るタイプにゃのフレーム同期タイプ(2バイトを共有するにゃ)
- リレーサーバーみたいにゃ感じで、ピアピアにはしにゃい。
- 1〜3フレームぐらいにゃのレイテンシ
// Init C2S - Hello /* +0 1 */ PacketType // 0x00:"Hello" /* +1 2 */ Client Version // Client Version /* +3 64 */ ApplicationId // Application ID(UTF-16) /* +67 64 */ UserName // UserName(UTF-16) S2C - Hello Res /* +0 1 */ PacketType // 0x01:"Hello Res" /* +1 1 */ ResultCode // Result Code // RESULT_CODE_SUCCESS 成功した // RESULT_CODE_ERROR_CONNECTION_DENY 接続拒否された(失敗) // RESULT_CODE_ERROR_ILLEGAL_VERSION バージョン不一致(失敗) // RESULT_CODE_ERROR_NO_SURVICE サービスしていないアプリケーションID(失敗) // MatchMaking - Parent C2S - CreateRoom /* +0 1 */ PacketType // 0x10:"CreateRoom" /* +1 1 */ MemberMax // 最大人数(1〜32) /* +2 64 */ GameId // ゲーム固有の識別子(UTF-16) /* +66 128 */ RoomName // ルーム名(UTF-16) S2C - CreateRoom Res /* +0 1 */ PacketType // 0x11:"CreateRoom Res" /* +1 1 */ ResultCode // Result Code // RESULT_CODE_SUCCESS 成功した // RESULT_CODE_ERROR_ROOM_OVER ルーム数が一杯で失敗した // RESULT_CODE_ERROR_FAILED ルーム作成に失敗した // RESULT_CODE_ERROR_ILLEGAL_PARAM パラメータが不正 C2S - DestroyRoom /* +0 1 */ PacketType // 0x12:"DestroyRoom" S2C - DestroyRoom Res /* +0 1 */ PacketType // 0x13:"DestroyRoom Res" /* +1 1 */ ResultCode // Result Code // RESULT_CODE_SUCCESS 成功した // RESULT_CODE_ERROR_FAILED 失敗した C2S - StartGame /* +0 1 */ PacketType // 0x14:"StartGame" /* +1 64 */ StartInfo // ゲームスタート時に子に送るユーザーデータ S2C - StartGame Res /* +0 1 */ PacketType // 0x15:"StartGame Res" /* +1 1 */ ResultCode // Result Code // RESULT_CODE_SUCCESS 成功した // RESULT_CODE_ERROR_FAILED 失敗した // MatchMaking - Child C2S - ScanRoom /* +0 1 */ PacketType // 0x50:"ScanRoom" /* +1 2 */ StartIndex // 何件目から取得するか /* +3 1 */ Count // 何件取得するか(1〜8) S2C - ScanRoom Res /* +0 1 */ PacketType // 0x51:"ScanRoom Res" /* +2 1 */ ResultCode // Result Code // RESULT_CODE_SUCCESS 成功した // RESULT_CODE_ERROR_FAILED 失敗した // RESULT_CODE_ERROR_ILLEGAL_PARAM パラメータが不正 /* +2 2 */ RoomCount // 全体の件数 /* +2 2 */ StartIndex // 何件目からの結果か /* +2 1 */ Count // 検索結果の件数 // 件数分繰り返す /* +? 8 */ RoomId // ルーム情報数 - ルーム固有の識別子 /* +? 1 */ MemberCount // ルーム情報数 - 現在の人数(1〜32) /* +? 1 */ MemberMax // ルーム情報数 - 最大人数(1〜32) /* +? 64 */ GameId // ルーム情報数 - ゲーム固有の識別子 /* +? 128 */ RoomName // ルーム情報数 - ルーム名(UTF-16) C2S - EnterRoom /* +0 1 */ PacketType // 0x52:"EnterRoom" /* +1 8 */ RoomId // ルーム固有の識別子 /* +9 64 */ GameId // ゲーム固有の識別子(UTF-16) S2C - EnterRoom Res /* +0 1 */ PacketType // 0x53:"EnterRoom Res" /* +1 1 */ ResultCode // Result Code // RESULT_CODE_SUCCESS 成功した // RESULT_CODE_ERROR_NOTFOUND_ROOM 部屋が見つからなかった // RESULT_CODE_ERROR_ROOM_MEMBER_MAX 部屋の人数が最大だった // RESULT_CODE_ERROR_GAME_START 既に募集を締め切って、ゲームを開始している // RESULT_CODE_ERROR_MISSMATCH_GAMEID ゲーム固有の識別子が違う // RESULT_CODE_ERROR_FAILED 失敗した C2S - LeaveRoom /* +0 1 */ PacketType // 0x54:"LeaveRoom" S2C - LeaveRoom Res /* +0 1 */ PacketType // 0x55:"LeaveRoom Res" /* +1 1 */ ResultCode // Result Code // RESULT_CODE_SUCCESS 成功した // RESULT_CODE_ERROR_FAILED 失敗した // Running C2S - SendData - Parent only /* +0 1 */ PacketType // 0x:80"SendData" /* +1 1 */ Size // データサイズ-1(0〜255) /* +2 ? */ Data // データ S2C - RecvData - Child only /* +0 1 */ PacketType // 0x:81"SendData" /* +1 1 */ Size // データサイズ-1(0〜255) /* +2 ? */ Data // データ C2S - SendKeyData /* +0 1 */ PacketType // 0x:82"SendKeyData" /* +1 2 */ KeyData // キーデータ S2C - RecvKeyData /* +0 1 */ PacketType // 0x:83"RecvKeyData" /* +1 4 */ enable // 有効なPlayerIDのビットマップ情報 // 有効なPlayerID数分 /* +5 ? */ KeyData // キーデータ C2S - EndGame - Parent only /* +0 1 */ PacketType // 0x84:"EndGame" S2C - EndGame Res /* +0 1 */ PacketType // 0x85:"EndGame Res" /* +1 1 */ ResultCode // Result Code // RESULT_CODE_SUCCESS 成功した // RESULT_CODE_ERROR_FAILED 失敗した // Event - Parent/Child S2C - EventStartGame /* +0 1 */ PacketType // 0xA3:"EventStartGame" /* +1 1 */ MemberCount // 人数 /* +2 1 */ PlayerID // 自分に割り振られたプレイヤID(0〜31) /* +3 64 */ StartInfo // 親から送られたゲームスタート時のユーザーデータ S2C - EventServerInfo /* +0 1 */ PacketType // 0xA5:"EventServerInfo" /* +1 1 */ Category // 情報の種別 // SERVER_INFO_NORMAL 普通のメッセージ // SERVER_INFO_WARNNING 警告メッセージ // SERVER_INFO_SERVER_SHUTDOWN サーバーをダウンさせますメッセージ /* +2 2 */ TextSize // 可変 /* +4 ? */ Text // サーバーからの情報(UTF-16) S2C - EventEnter /* +0 1 */ PacketType // 0xA7:"EventEnter" /* +2 1 */ MemberCount // 現在の人数(1〜32) /* +2 1 */ PlayerID // 入室してきたPlayerID(0〜31) /* +3 64 */ UserName // 入室してきたUserName(UTF-16) S2C - EventLeave /* +0 1 */ PacketType // 0xA9:"EventLeave" /* +2 1 */ MemberCount // 現在の人数(1〜32) /* +2 1 */ PlayerID // 退室したPlayerID(0〜31) /* +3 64 */ UserName // 退室したUserName(UTF-16) S2C - EventEndGame /* +0 1 */ PacketType // 0xAB:"EventEndGame"