フレームワークを利用したマッチングサーバーを書くために必要なことは以下のようなものがある:
これらは sample_match_server/main.cpp に記述されている。
nine::match::MatchServer のインスタンスを得る。 ファクトリメソッドが提供されているので、これを呼び出せばいい。
MatchServer* m_pServer; m_pServer = MatchServer::CreateInstance();
サーバーの設定用には MatchServerConfig 構造体が定義されている。 このインスタンスを作ってメンバ変数をセットし、MatchServer::initialize を呼ぶ。
設定構造体は少し複雑になっている。定義を参照しながら解説していく。
まずトップレベルは MatchServerConfig である。
struct MatchServerConfig
{
struct GameUnitConfig: public ServerUnitConfig {
std::string host;
uint16_t port;
} gameserver;
struct ClientUnitConfig: public ServerUnitConfig {
std::string host;
uint16_t port;
} client;
};
ここには gameserver, client という二つのメンバがある。 それぞれの型については後で説明するとして、二つある意味を説明する。
マッチングサーバーは、ゲームクライアント接続用とゲームサーバー接続用に二つのアクセプタを持っている。一般的には、クライアント用はインターネットに開き、ゲームサーバーはイントラネットにする。
gameserver, client というメンバはそれぞれのアクセプタ用の設定になっている。
二つの構造体定義は独立しているが、現在のところ定義内容は同じである。 host, port というメンバを持ち、さらに ServerUnitConfig という構造体を継承している。
host,port にアクセプタの bind するアドレスを記述する。
struct ServerUnitConfig
{
ServerUnitConfig();
ServerUnitConfig& operator=(const ServerUnitConfig& r);
nine::MessageServerConfig mcfg;
int timeout;
};
ServerUnitConfig は内部に nine::MessageServerConfig を持ち、またメンバ変数 timeout を持つ。
サーバー用、クライアント用の二つのアクセプタは独立した MessageServer に乗っている。 それぞれのメッセージサーバーの設定を mcfg メンバ変数に指定する。 特に、最大接続数 nCommunicators を忘れずに指定すること。
フレームワークは、接続してきた communicator の setSendTimeout/setReceiveTimeout を呼びだす。 この時の引数にここで指定した timeout を用いる。
アカウントモジュールを MatchServer::setAccountModule() で指定する。
アカウントモジュールは AccountModule を継承したクラスで、フレームワーク利用者が作成する。
ルームモジュールを MatchServer::setRoomModule() で指定する。
なお、ルームモジュールのセットと同時に新しいマッチングドメインを作る。 setRoomModule の第一引数はルームドメインの名前であり、ユニークにする必要がある。
ルームモジュールは RoomModule を継承したクラスで、フレームワーク利用者が作成する。
実行には MatchServer::turn() を呼び出す。
turn は nine::MessageServer::turn() などと同様に、一回の処理のみを行う。 実際にサーバーを動作させるには繰り返して呼ぶ必要がある。