Diarkis C++Client Library API Document
DiarkisP2PBase.h
[詳解]
1 // © 2019-2024 Diarkis Inc. All rights reserved.
2 
3 #pragma once
4 
5 #include <functional>
6 #include "diarkis/common.h"
7 #include "diarkis/modules/p2p.h"
8 #include "logging/LoggerFactory.h"
9 #include "protocol.h"
10 
11 using namespace Diarkis::Modules;
12 
19 class Peer
20 {
21  public:
22  Peer(std::shared_ptr<IDiarkisP2P> p2p);
23  ~Peer();
24  void RegisterReadyEvent(std::function<void(void*, const DiarkisReadyEventArgs&)> lambda);
25  void RegisterFailEvent(std::function<void(void*, const DiarkisFailEventArgs&)> lambda);
26  void RegisterDisconnectEvent(std::function<void(void*, const DiarkisP2PDisconnectEventArgs&)> lambda);
27  void RegisterMessageEvent(std::function<void(void*, const DiarkisMessageEventArgs&)> lambda);
28  void RegisterExceptionEvent(std::function<void(void*, const DiarkisExceptionEventArgs&)> lambda);
29  void RegisterSchedulerAddNotifyEvent(std::function<void(void*, void*)> lambda);
30  std::shared_ptr<IDiarkisP2P> GetDiarkisP2P() const { return diarkisP2P_; }
31 
32  private:
33  std::shared_ptr<IDiarkisP2P> diarkisP2P_;
34  Diarkis::StdVector<std::function<void()>> eventUnsubscriptions_;
35  std::mutex eventMutex_;
36 };
37 
45 {
46  public:
54 
61  virtual ~DiarkisP2PBase();
62 
77  virtual void SetupP2P(const std::shared_ptr<IDiarkisUdp>& udp, const std::shared_ptr<LoggerFactory>& loggerFactory, const char* uid);
78 
99  virtual void ConnectClient(const char* uid, const char** address, size_t addressCount, size_t timeoutInMilliseconds = 5000, bool bBuffering = true);
100 
107  virtual void ConnectClient(const std::string& uid, const std::vector<std::string>& address, size_t timeoutInMilliseconds = 5000, bool bBuffering = true);
108 
129  virtual void
130  SetEncryptionKeys(bool bEncryption, const uint8_t* key, size_t keySize, const uint8_t* iv, size_t ivSize, const uint8_t* mkey, size_t mkeySize);
131 
138  virtual void SetEncryptionKeys(bool bEncryption, const std::vector<uint8_t>& key, const std::vector<uint8_t>& iv, const std::vector<uint8_t>& mkey);
139 
158  virtual uint16_t SendUnicast(const uint8_t* payload, size_t payloadSize, RudpType type, const char* uid);
159 
166  virtual uint16_t SendUnicast(const uint8_t* payload, size_t payloadSize, RudpType type, const std::string& uid);
167 
174  virtual uint16_t SendUnicast(const std::vector<uint8_t>& payload, RudpType type, const std::string& uid);
175 
196  virtual uint16_t SendMulticast(const uint8_t* payload, size_t payloadSize, RudpType type, const char** uids, size_t uidsLen);
197 
204  virtual uint16_t SendMulticast(const uint8_t* payload, size_t payloadSize, RudpType type, const std::vector<std::string>& uid);
205 
212  virtual uint16_t SendMulticast(const std::vector<uint8_t>& payload, RudpType type, const std::vector<std::string>& uid);
213 
230  virtual uint16_t SendBroadcast(const uint8_t* payload, size_t payloadSize, RudpType type);
231 
238  virtual uint16_t SendBroadcast(const std::vector<uint8_t>& payload, RudpType type);
239 
248  void Disconnect();
249 
262  bool Disconnect(const char* uid);
263 
270  void Update();
271 
278  void SetSchedulerAddNotifyEvent(std::function<void()> notifyEventFunc);
279 
286  uint16_t GetConnectedNum();
287 
294  void GetPeerUids(Diarkis::StdVector<Diarkis::StdString>& output);
295 
296 #if defined(DIARKIS_DEBUG_FEATURES)
297 
311  void SetDebugP2PFailMode(bool enable);
312 
327  void SetDebugP2PFailUIDs(const char** UIDList, size_t UIDListSize);
328 
335  void SetDebugP2PFailUIDs(const std::vector<std::string>& UIDList);
336 
345  void ClearDebugP2PFailUIDs();
346 #endif
347 
348  protected:
355  virtual void OnP2PReady(const DiarkisReadyEventArgs& args);
356 
365  virtual void OnP2PFail(const DiarkisFailEventArgs& args);
366 
373  virtual void OnP2PDisconnect(const DiarkisP2PDisconnectEventArgs& args);
374 
381  virtual void OnP2PMessage(const DiarkisMessageEventArgs& args);
382 
391  virtual void OnP2PException(const DiarkisExceptionEventArgs& args);
392 
403  void RegisterPeer(const Diarkis::StdString& uid, const std::shared_ptr<Peer>& p2p);
404 
415  uint64_t UnregisterPeer(const Diarkis::StdString& uid);
416 
424 
431  std::recursive_mutex p2pListMutex_;
432 
439  std::shared_ptr<IDiarkisUdp> udp_;
440 
447  std::shared_ptr<LoggerFactory> loggerFactory_;
448 
455  std::shared_ptr<IDiarkisLogger> logger_;
456 
463  std::function<void()> schedulerAddNotifyEventFunc_;
464 
472 
480 
481 #if defined(DIARKIS_DEBUG_FEATURES)
482 
488  std::atomic<bool> debugP2PFailMode_;
489 
496  Diarkis::StdVector<Diarkis::StdString> debugP2PFailUIDs_;
497  std::mutex debugP2PFailUIDsMutex_;
498 #endif
499 };
DiarkisP2PBase::udp_
std::shared_ptr< IDiarkisUdp > udp_
IDiarkisUdpクラスへのポインター
Definition: DiarkisP2PBase.h:439
DiarkisP2PBase::p2pList_
Diarkis::StdUnorderedMap< Diarkis::StdString, std::shared_ptr< Peer > > p2pList_
P2P接続のリスト。 キー:UID、値:IDiarkisP2Pへのポインタ
Definition: DiarkisP2PBase.h:423
DiarkisP2PBase::schedulerAddNotifyEventFunc_
std::function< void()> schedulerAddNotifyEventFunc_
P2P 関連のイベントが追加された時に呼ばれるコールバック関数
Definition: DiarkisP2PBase.h:463
DiarkisP2PBase::myUid_
Diarkis::StdString myUid_
私のユーザーID
Definition: DiarkisP2PBase.h:479
p2p.h
Diarkis::StdString
Definition: common.h:432
Diarkis::StdUnorderedMap
std::unordered_map< Key, Value, StdStringHash< Key >, std::equal_to< Key >, Diarkis::DiarkisStdAllocator< std::pair< const Key, Value > >> StdUnorderedMap
Definition: common.h:535
DiarkisP2PBase::loggerFactory_
std::shared_ptr< LoggerFactory > loggerFactory_
ロガークラスへのポインター
Definition: DiarkisP2PBase.h:447
DiarkisP2PBase
P2P 機能を簡単に使用するために IDiarkisP2P クラスをラップする基本クラス
Definition: DiarkisP2PBase.h:44
DiarkisP2PBase::p2pListMutex_
std::recursive_mutex p2pListMutex_
P2PリストMutex
Definition: DiarkisP2PBase.h:431
protocol.h
Diarkis::Modules
Definition: directMessage.h:16
Diarkis::StdVector
Definition: common.h:406
DiarkisP2PBase::ownGlobalAddress_
Diarkis::StdString ownGlobalAddress_
私のグローバルIPアドレス
Definition: DiarkisP2PBase.h:471
Diarkis::DiarkisFailEventArgs
P2P接続が失敗したときにコールバックイベントが呼び出されるときの引数
Definition: eventArgs.h:354
Peer
ピア接続状態を管理するための構造体
Definition: DiarkisP2PBase.h:19
common.h
Diarkis::DiarkisExceptionEventArgs
P2Pで送受信が失敗した際に呼び出されるコールバックイベントの引数
Definition: eventArgs.h:499
Diarkis::DiarkisReadyEventArgs
P2P接続が完了した際に呼び出されるコールバックイベントの引数
Definition: eventArgs.h:298
Diarkis::DiarkisP2PDisconnectEventArgs
P2Pが切断されたときにコールバックイベントが呼び出される際の引数
Definition: eventArgs.h:402
Peer::GetDiarkisP2P
std::shared_ptr< IDiarkisP2P > GetDiarkisP2P() const
Definition: DiarkisP2PBase.h:30
RudpType
RudpType
P2P RUDP機能のタイプ
Definition: p2p.h:21
Diarkis::DiarkisMessageEventArgs
P2Pでメッセージを受信したときに呼び出されるコールバックイベントの引数
Definition: eventArgs.h:450
DIARKIS_API
#define DIARKIS_API
Definition: common.h:47
DiarkisP2PBase::logger_
std::shared_ptr< IDiarkisLogger > logger_
ロガークラスへのポインタ
Definition: DiarkisP2PBase.h:455