Diarkis C++Client Library API Document
DiarkisMatchMakerBase.h
Go to the documentation of this file.
1 // © 2019-2024 Diarkis Inc. All rights reserved.
2 
3 #pragma once
4 
5 #include <functional>
6 #include "DiarkisP2PBase.h"
7 #include "diarkis/common.h"
9 #include "diarkis/modules/room.h"
11 #include "diarkis/network/tcp.h"
12 #include "diarkis/network/udp.h"
13 #include "logging/LoggerFactory.h"
14 #include "protocol.h"
15 
16 using namespace Diarkis::Modules;
17 
25 {
26  public:
34 
41  virtual ~DiarkisMatchMakerBase();
42 
55  virtual void SetupTcpMatchMaker(const std::shared_ptr<IDiarkisTcp>& tcp, const std::shared_ptr<LoggerFactory>& loggerFactory);
56 
71  virtual void SetupUdpMatchMaker(const std::shared_ptr<IDiarkisUdp>& udp,
72  const std::shared_ptr<LoggerFactory>& loggerFactory,
73  const std::shared_ptr<DiarkisP2PBase>& p2pBase);
74 
83  void SetRoomModule(const std::shared_ptr<IDiarkisRoom>& room);
84 
117  virtual bool SendHostMatchmaking(const char* uid,
118  uint16_t maxMembers,
119  uint16_t ttl,
120  const char* profileID,
121  const char* tag,
122  const MatchMakerCondition* conditions,
123  size_t conditionsCount,
124  const uint8_t* metadata,
125  size_t metadataSize,
126  bool bReserveOnly);
127 
134  virtual bool SendHostMatchmaking(const std::string& uid,
135  uint16_t maxMembers,
136  uint16_t ttl,
137  const std::string& profileID,
138  const std::string& tag,
139  const std::vector<MatchMakerCondition>& conditions,
140  const std::vector<uint8_t>& metadata,
141  bool bReserveOnly);
142 
151  virtual void SendAbortMatchmaking(void);
152 
167  virtual void SendDisbandMatchmaking(const uint8_t* message, size_t messageSize);
168 
175  virtual void SendDisbandMatchmaking(const std::vector<uint8_t>& message);
176 
191  virtual void SendClaimReservedMatchmaking(const uint8_t* message, size_t messageSize);
192 
199  virtual void SendClaimReservedMatchmaking(const std::vector<uint8_t>& message);
200 
215  virtual void SendJoinMatchmakingFromResult(MatchMakerResultItem& result, const uint8_t* message, size_t messageSize);
216 
223  virtual void SendJoinMatchmakingFromResult(MatchMakerResultItem& result, const std::vector<uint8_t>& message);
224 
237  virtual void SendLeaveMatchmaking(const uint8_t* message, size_t messageSize);
238 
245  virtual void SendLeaveMatchmaking(const std::vector<uint8_t>& message);
246 
259  virtual void SendSync(const uint8_t* message, size_t messageSize);
260 
267  virtual void SendSync(const std::vector<uint8_t>& message);
268 
279  virtual void SendNotifyMatchmakingCompletion(void);
280 
299  virtual void SendP2PAddressSync(uint8_t linkedClients = 0);
300 
329  virtual void SendSearch(const char** profileIDs,
330  size_t profileIDsCount,
331  const char* tag,
332  const MatchMakerCondition* conditions,
333  size_t conditionsCount,
334  bool joinFlag,
335  uint16_t howmany,
336  const uint8_t* message,
337  size_t messageSize);
338 
345  virtual void SendSearch(const std::vector<std::string>& profileIDs,
346  const std::string& tag,
347  const std::vector<MatchMakerCondition>& conditions,
348  bool joinFlag,
349  uint16_t howmany,
350  const std::vector<uint8_t>& message);
351 
364  virtual bool SendStartBackfill(const char* roomID);
365 
372  virtual bool SendStartBackfill(const std::string& roomID);
373 
390  virtual bool SendKick(const char* userID);
391 
398  virtual bool SendKick(const std::string& userID);
399 
433  virtual bool SendHostTeamMatchmaking(const char* uid,
434  uint16_t maxMembers,
435  uint16_t ttl,
436  const char* profileID,
437  const char* tag,
438  const MatchMakerCondition* conditions,
439  size_t conditionsCount,
440  const uint8_t* metadata,
441  size_t metadataSize,
442  bool bReserveOnly);
443 
450  virtual bool SendHostTeamMatchmaking(const std::string& uid,
451  uint16_t maxMembers,
452  uint16_t ttl,
453  const std::string& profileID,
454  const std::string& tag,
455  const std::vector<MatchMakerCondition>& conditions,
456  const std::vector<uint8_t>& metadata,
457  bool bReserveOnly);
458 
487  virtual void SendSearchTeamMatchmaking(const char** profileIDs,
488  size_t profileIDsCount,
489  const char* tag,
490  const MatchMakerCondition* conditions,
491  size_t conditionsCount,
492  bool joinFlag,
493  uint16_t howmany,
494  const uint8_t* message,
495  size_t messageSize);
496 
503  virtual void SendSearchTeamMatchmaking(const std::vector<std::string>& profileIDs,
504  const std::string& tag,
505  const std::vector<MatchMakerCondition>& conditions,
506  bool joinFlag,
507  uint16_t howmany,
508  const std::vector<uint8_t>& message);
509 
526  virtual void SendCommit(void);
527 
540  virtual void SendIssueTicket(uint8_t ticketType);
541 
552  virtual void SendTicketCancel(uint8_t ticketType);
553 
568  virtual void SendTicketBroadcast(uint8_t ticketType, const uint8_t* message, size_t messageSize);
569 
576  virtual void SendTicketBroadcast(uint8_t ticketType, const std::vector<uint8_t>& message);
577 
588  virtual void SendTicketLeave(uint8_t ticketType);
589 
596  Diarkis::StdString GetRoomID(void);
597 
604  const Diarkis::StdString& GetOwnerUID(void);
605 
612  bool IsComplete(void);
613 
620  bool IsGotoRoom(void);
621 
628  void ResetGotoRoom(void);
629 
636  void ClearList(void);
637 
644  const Diarkis::StdString& GetTicketMessage(void);
645 
652  const Diarkis::StdString& GetTicketBroadcastMessage(void);
653 
660  bool IsTicketComplete(void);
661 
668  bool IsTicketCancel(void);
669 
676  void GetMatchingMemberList(Diarkis::StdVector<Diarkis::StdString>& memberList);
677 
684  void GetTeamMatchingMemberList(Diarkis::StdVector<Diarkis::StdString>& memberList);
685 
692  void SetOwnUID(const char* uid);
693 
700  void SetOwnUID(const std::string& uid);
701 
702  protected:
711  virtual void OnHostMatchmaking(const DiarkisMMHostEventArgs& e);
712 
721  virtual void OnAbortMatchmaking(const DiarkisMMResponseEventArgs& e);
722 
731  virtual void OnDisbandMatchmaking(const DiarkisMMSyncEventArgs& e);
732 
741  virtual void OnMemberLeave(const DiarkisMMSyncEventArgs& e);
742 
751  virtual void OnMemberJoin(const DiarkisMMSyncEventArgs& e);
752 
761  virtual void OnMemberSync(const DiarkisMMSyncEventArgs& e);
762 
771  virtual void OnJoin(const DiarkisMMJoinResponseEventArgs& e);
772 
781  virtual void OnLeave(const DiarkisMMResponseEventArgs& e);
782 
791  virtual void OnComplete(void);
792 
801  virtual void OnSearch(const DiarkisMMJoinResponseEventArgs& e);
802 
811  virtual void OnResutls(const DiarkisMMResultEventArgs& e);
812 
823  virtual void OnP2PAddress(const DiarkisP2PEventArgs& e);
824 
833  virtual void OnP2PResponse(const DiarkisMMResponseEventArgs& e);
834 
843  virtual void OnBackfillEvent(const DiarkisMMResponseEventArgs& e);
844 
853  virtual void OnKick(const DiarkisPayloadEventArgs& e);
854 
863  virtual void OnKickResponse(const DiarkisMMResponseEventArgs& e);
864 
873  virtual void OnCommit(const DiarkisMMResponseEventArgs& e);
874 
883  virtual void OnCompleteCommit(const DiarkisMMJoinResponseEventArgs& e);
884 
893  virtual void OnTeamHostMatchmaking(const DiarkisMMHostEventArgs& e);
894 
903  virtual void OnTeamSearch(const DiarkisMMJoinResponseEventArgs& e);
904 
913  virtual void OnTeamMemberJoin(const DiarkisMMSyncEventArgs& e);
914 
921  virtual void OnIssueTicketResponse(const DiarkisMMResponseEventArgs& e);
922 
931  virtual void OnTicketComplete(const DiarkisMMResponseEventArgs& e);
932 
941  virtual void OnHostChange(const DiarkisMMStringEventArgs& e);
942 
949  virtual void OnTicketCancel(const DiarkisMMTicketTypeEventArgs& e);
950 
957  virtual void OnTicketCancelResponse(const DiarkisMMResponseEventArgs& e);
958 
965  virtual void OnTicketBroadcastResponse(const DiarkisMMResponseEventArgs& e);
966 
973  virtual void OnTicketBroadcast(const DiarkisMMSyncEventArgs& e);
974 
981  virtual void OnTicketLeave(const DiarkisMMResponseEventArgs& e);
982 
989  virtual void OnResponse(const DiarkisResponseEventArgs& args, DiarkisTransportType tt);
990 
997  virtual void OnPush(const DiarkisPushEventArgs& args, DiarkisTransportType tt);
998 
1005  std::shared_ptr<IDiarkisMatchMaker> mm_;
1006 
1013  std::shared_ptr<IDiarkisTcp> tcp_;
1014 
1021  std::shared_ptr<IDiarkisUdp> udp_;
1022 
1029  std::shared_ptr<IDiarkisRoom> room_;
1030 
1037  std::shared_ptr<DiarkisP2PBase> p2pBase_;
1038 
1045  std::shared_ptr<IDiarkisLogger> logger_;
1046 
1054 
1062 
1070 
1078 
1086 
1093  std::recursive_mutex list_mutex_;
1094 
1102 
1110 
1118 
1126 
1134 
1142 
1150 
1158 
1159 };
DiarkisMatchMakerBase::bTicketComplete_
bool bTicketComplete_
Whether ticket matching has been completed.
Definition: DiarkisMatchMakerBase.h:1133
DiarkisMatchMakerBase::p2pBase_
std::shared_ptr< DiarkisP2PBase > p2pBase_
Pointer to DiarkisP2PBase class.
Definition: DiarkisMatchMakerBase.h:1037
DiarkisMatchMakerBase::logger_
std::shared_ptr< IDiarkisLogger > logger_
Pointer to IDiarkisLogger class.
Definition: DiarkisMatchMakerBase.h:1045
Diarkis::DiarkisMMTicketTypeEventArgs
Arguments of the callback event to be called when TicketCancel push is received.
Definition: eventArgs.h:1666
DiarkisMatchMakerBase::list_mutex_
std::recursive_mutex list_mutex_
list mutex
Definition: DiarkisMatchMakerBase.h:1093
DiarkisMatchMakerBase::teamMemberLists_
Diarkis::StdVector< Diarkis::StdString > teamMemberLists_
User ID list of team matched members.
Definition: DiarkisMatchMakerBase.h:1109
DiarkisMatchMakerBase::bTicketCancel_
bool bTicketCancel_
Whether matching by ticket was cancelled.
Definition: DiarkisMatchMakerBase.h:1149
Diarkis::DiarkisPayloadEventArgs
Arguments of the callback event called when a payload is sent or received.
Definition: eventArgs.h:252
matchMaker.h
DiarkisP2PBase.h
Diarkis::DiarkisMMResultEventArgs
Argument of the callback event called when MatchMaker's Search or TeamSearch is executed.
Definition: eventArgs.h:1742
DiarkisMatchMakerBase::ticketMessage_
Diarkis::StdString ticketMessage_
Message when matching by ticket is completed.
Definition: DiarkisMatchMakerBase.h:1141
Diarkis::StdString
Definition: common.h:432
Diarkis::Network::DiarkisTransportType
DiarkisTransportType
Protocol type.
Definition: transport.h:27
Diarkis::DiarkisMMResponseEventArgs
Arguments of the callback event called when MatchMaker response is received.
Definition: eventArgs.h:1598
DiarkisMatchMakerBase
Base class that wraps the IDiarkisMatchMaker class for easy use of MatchMaker functionality.
Definition: DiarkisMatchMakerBase.h:24
protocol.h
Diarkis::Modules
Definition: directMessage.h:16
Diarkis::StdVector< Diarkis::StdString >
eventArgs.h
DiarkisMatchMakerBase::eventUnsubscriptions_
Diarkis::StdVector< std::function< void()> > eventUnsubscriptions_
Lambda function control list.
Definition: DiarkisMatchMakerBase.h:1053
Diarkis::Modules::MatchMakerCondition
Search condition for matchmaking.
Definition: matchMaker.h:25
Diarkis::DiarkisMMSyncEventArgs
Arguments of the callback event called when MatchMaker push is received.
Definition: eventArgs.h:1642
Diarkis::MatchMakerResultItem
Structure to contain MatchMaker search results.
Definition: eventArgs.h:64
DiarkisMatchMakerBase::myUid_
Diarkis::StdString myUid_
My user ID.
Definition: DiarkisMatchMakerBase.h:1069
DiarkisMatchMakerBase::room_
std::shared_ptr< IDiarkisRoom > room_
Pointer to IDiarkisRoom class.
Definition: DiarkisMatchMakerBase.h:1029
DiarkisMatchMakerBase::bComplete_
bool bComplete_
Whether matching has been completed.
Definition: DiarkisMatchMakerBase.h:1117
Diarkis::DiarkisResponseEventArgs
Argument of the callback event called when a UDP or TCP Response is received.
Definition: eventArgs.h:1365
DiarkisMatchMakerBase::mm_
std::shared_ptr< IDiarkisMatchMaker > mm_
Pointer to IDiarkisMatchMaker class.
Definition: DiarkisMatchMakerBase.h:1005
Diarkis::DiarkisP2PEventArgs
Arguments of the callback event called when start P2P connection.
Definition: eventArgs.h:1817
common.h
tcp.h
DiarkisMatchMakerBase::ownerUid_
Diarkis::StdString ownerUid_
Matching owner's user ID.
Definition: DiarkisMatchMakerBase.h:1077
Diarkis::DiarkisMMJoinResponseEventArgs
Arguments of the callback event called when MatchMaker Join response is received.
Definition: eventArgs.h:1690
DiarkisMatchMakerBase::udp_
std::shared_ptr< IDiarkisUdp > udp_
Pointer to IDiarkisUdp class.
Definition: DiarkisMatchMakerBase.h:1021
udp.h
DiarkisMatchMakerBase::ticketBroadcastMessage_
Diarkis::StdString ticketBroadcastMessage_
Message received on TicketBroadcast.
Definition: DiarkisMatchMakerBase.h:1085
Diarkis::DiarkisMMStringEventArgs
Arguments of the callback event called when MatchMaker host has changed.
Definition: eventArgs.h:1794
DiarkisMatchMakerBase::Buff_
Diarkis::StdVector< uint8_t > Buff_
Buffer for transmission.
Definition: DiarkisMatchMakerBase.h:1061
room.h
Diarkis::DiarkisMMHostEventArgs
Argument of the callback event called when MatchMaker's HostMatchmaking or TeamHostMatchmaking is exe...
Definition: eventArgs.h:1546
DiarkisMatchMakerBase::bTeamMatchOwner_
bool bTeamMatchOwner_
Whether the owner who issued the TeamMatch Host or Search.
Definition: DiarkisMatchMakerBase.h:1157
DiarkisMatchMakerBase::memberLists_
Diarkis::StdVector< Diarkis::StdString > memberLists_
User ID list of matched members.
Definition: DiarkisMatchMakerBase.h:1101
DIARKIS_API
#define DIARKIS_API
Definition: common.h:47
DiarkisMatchMakerBase::tcp_
std::shared_ptr< IDiarkisTcp > tcp_
Pointer to IDiarkisTcp class.
Definition: DiarkisMatchMakerBase.h:1013
DiarkisMatchMakerBase::bGotoRoom_
bool bGotoRoom_
Whether or not a message wasent to move to the game scene.
Definition: DiarkisMatchMakerBase.h:1125
Diarkis::DiarkisPushEventArgs
Argument of the callback event called when a UDP or TCP Push is received.
Definition: eventArgs.h:1316