Diarkis Server Template - MatchMaker を UDP と TCP サーバから使う

Diarkis Server Template の中に実装されている MatchMaker サンプルについて説明します。

このサンプルでは UDP/RUDP と TCP サーバから使うことができる実装を紹介しています。

cmds/custom/main.go

サンプル・マッチング ID

  • RankMatch

    • rank のレンジは 5 です。
  • RateAndPlay

    • rate のレンジは 1 です。

    • play のレンジは 1 です。

MatchMaker の詳細はこちらを参照ください。

MatchMaker 「Add」のカスタム・コマンドを UDP/RUDP と TCP サーバに実装する

この MatchMaker 「Add」コマンドは新しい Diarkis Room のルームを作成して MatchMaker に登録することで検索の対象にします。

クライアントは ver:2 cmd:100 のコマンドでレスポンスを受け取りオペレーションの実行の結果を受け取ります。

コマンドの実行が成功するとクライアントでは On Room Creation のイベントが発火します。

Command Version and ID

ver: 2
cmd: 100

Payload

Endianness is Big Endian.

+--------+-----------+-----------------+--------------------+
| TTL | *Size | String List | Property Map |
+--------+-----------+-----------------+--------------------+
| 8 byte | 2 byte | *Size | variable size |
+--------+-----------+-----------------+--------------------+
| 0 7 | 8 9 | 10 10 + *size | 10 + *size + 1 ... |
+--------+-----------+-----------------+--------------------+

String List

+---------+-------------+----------+-----------+
| *size | Matching ID | **size | Unique ID |
+---------+-------------+----------+-----------+
| 4 byte | *size | 4 byte | **size |
+---------+-------------+----------+-----------+

Property Map

複数のプロパティがある場合、プロパティの名前とバリューのセットでリピートします。

+----------------+--------+---------------+
| Property Value | *size | Property Name |
+----------------+--------+---------------+
| 4 byte | 2 byte | *size |
+----------------+--------+---------------+
| 0 3 | 4 5 | 6 6 + *size |
+----------------+--------+---------------+

MatchMaker 「Search」のカスタム・コマンドを UDP/RUDP と TCP サーバに実装する

MatchMaker 「Search」は検索条件をもとに MatchMaker 「Add」のサンプル・カスタム・コマンドで作成されたルームを検索して見つかったルームに参加します。

クライアントは ver:2 cmd:102 のコマンドでレスポンスを受け取りオペレーションの実行の結果を受け取ります。

すでにマッチしてルームに参加しているクライアントはルームが満員になると ver:2 cmd:103 のサーバ通知が送られます。

同様に新しいクライアントがマッチして参加しているルームに参加すると On Member Join イベントが他のクライアントで発火します。

Command Version and ID

ver: 2
cmd: 102

Payload

+--------+-----------------+---------------+
| *size | String List | Property Map |
+--------+-----------------+---------------+
| 2 byte | *size | Variable |
+--------+-----------------+---------------+
| 0 1 | 2 2 + *size | 2 + *size ... |
+--------+-----------------+---------------+

String List

size と Matching ID は、複数の Matching ID がある場合1セットとしてリピートします。

+---------+-------------+
| *size | Matching ID |
+---------+-------------+
| 4 byte | *size |
+---------+-------------+

Property Map

複数のプロパティがある場合、プロパティの名前とバリューのセットでリピートします。

+----------------+--------+---------------+
| Property Value | *size | Property Name |
+----------------+--------+---------------+
| 4 byte | 2 byte | *size |
+----------------+--------+---------------+
| 0 3 | 4 5 | 6 6 + *size |
+----------------+--------+---------------+

P2P で使うクライアントアドレスを UDP と TCP サーバに通知をするサンプル・カスタム・コマンド

このサンプル・カスタム・コマンドは peer-to-peer で使うクライアントアドレスをサーバに通知するためのコマンドです。このコマンドを使うにはクライアントはすでに Diarkis Room のルームに参加をしていることが前提です。

Command Version and ID

ver: 2
cmd: 110

Payload

Client Address is a byte array encoded UTF8 string.

+---------------+----------------+
| Custom Header | Client Address |
+---------------+----------------+
| 5 byte | Variable |
+---------------+----------------+
| 0 4 | 5 ... |
+---------------+----------------+

P2P を開始するサンプル・カスタム・コマンドを UDP と TCP サーバで実装しています

このサンプル・カスタム・コマンドでは、ルームに参加しているメンバーのクライアント全員が peer-to-peer 通信を開始するための実装をしています。

クライアントは ver:2 cmd:111 のコマンドでレスポンスを受け取りオペレーションの実行の結果を受け取ります。

ルームに参加メンバー・クライアント全員に対して On Member Broadcast のイベントを通じて参加クライアント全員のクライアントアドレスの一覧が通知されます。

このアドレスを使って peer-to-peer 通信を開始します。クライアント・サンプルではこの辺りの実装に対応しています。

Command Version and ID

ver: 2
cmd: 111
 

Payload

Empty payload.

Payload Of On Member Broadcast

String List

size と クライアント・アドレス は、複数の クライアント・アドレス がある場合1セットとしてリピートします。

+---------+----------------+
| *size | Client Address |
+---------+----------------+
| 4 byte | *size |
+---------+----------------+