マッチング処理をカスタマイズする場合は、Room, RoomModule を継承して実装する。
両者は一体的に機能を果たすが、おおまかにいえば Room がデータで RoomModule がアルゴリズムである。
なお、MatchingModule ではなく RoomModule という名前なのは、マッチングサーバー全体と区別するためである。
class SampleRoom: public Room
{
...
};
class SampleRoomModule: public RoomModule
{
...
};
ルーム情報は Room というクラスに格納される。拡張したい場合は、Room を継承したクラスを自分で定義する。
実際のルームオブジェクトは RoomModule::createAccount() で生成する。 この実装に自分の使うルームクラスのインスタンスを生成して返せば良い。
Room* SampleRoomModule::createRoom(uint16_t id)
{
SampleRoom* p = new SampleRoom();
p->init(id);
return p;
}
createRoom の引数 id は、ルームオブジェクトのドメイン内でユニークな ID である。この情報は Room オブジェクトが知っていた方が良い。
ベースクラスの Room に init() という関数がある。これは id を受け取ってメンバ変数にセットするようになっているので、これを使えば良い。