MatchMaker Ticket を使ったマッチメイキング

MatchMaker Ticket は、サーバーがマッチメイキングのロジックを管理します。クライアントはチケットを発行し、サーバーがマッチメイキングを完了するのを待つだけになります。

MatchMaker が発行するチケットを使えば、クライアントはサーバがマッチメイキングを行い、マッチしたクライアントに通知対するを待つだけになります。

チケットによって行われるマッチメイキングの制御は、サーバーが行います。

サーバでのチケットの制御方法はこちらを参照ください。

マッチメイキングのロジックをサーバーが完全にコントロールすることで、マッチメイキングの仕様やロジックが変わっても、クライアントのコードは一切変更する必要がありません。

MatchMaker クラスの初期化とログのセットアップ

#define REG_EVENT(__EVENT__, __LAMBDA__) this->eventUnsubscriptions.push_back(__EVENT__->Register(__LAMBDA__))

void DiarkisMatchMakerBase::SetupUdpMatchMaker(std::shared_ptr<IDiarkisUdp> udp_, std::shared_ptr<LoggerFactory> loggerFactory)
{
mm = shared_ptr<IDiarkisMatchMaker>(DiarkisCreateMatchMaker());
mm->SetupAsUdp(udp_));

   // Setup the logger
mm->SetLoggerFactory(loggerFactory, "-UDP");


// Setup the event listeners for tickets
   REG_EVENT(mm->GetTicketCompleteEvent(), [this](void*, const DiarkisMMHostEventArgs& e) { OnTicketComplete(e); });  
   REG_EVENT(mm->GetTicketCancelEvent(), [this](void*, const DiarkisMMHostEventArgs& e) { OnTicketCancel(e); }
}

チケットを発行する

サーバーは、マッチメイキングチケットがマッチを見つけ終えたとき、またはマッチを見つけられなかったときに通知を送信します。マッチングしたリモートクライアントも、マッチングチケットを発行したクライアントとマッチングしたときに通知を受け取ります。

サーバからの完了通知は "mm->GetTicketCompleteEvent" を使って処理をします。

mm->IssueTicket();

発行されたチケットをキャンセルする

発行したマッチメイキングのチケットをキャンセルする方法をご紹介します。
注意: チケットのキャンセルは、自分が発行したチケットに限られます。

mm.CancelTicket();