Diarkis P2P を使って peer-to-peer の通信を開始するためにはクライアントのアドレスを交換する必要があります。
Diarkis P2P を使って peer-to-peer の通信を開始するためにクライアントのアドレスの交換には Diarkis Room を使います。
NOTE: Diarkis P2P では UDP プロトコルのみに対応しています。
ステップ
- ルームを作成する・ルームに参加する
- Diarkis Room の BroadcastTo と MessageTo を使ってクライアントアドレスを交換する
- Diarkis P2P を使って peer-to-peer 通信を開始する
1. ルームを作成する・ルームに参加する
クライアントアドレスを交換するためにはルームを作成あるいはルームに参加する必要があります。
ルームの作成方法の詳細はルームの作り方とルームの作成レスポンスの受け取り方を参照ください。
ルームの参加方法方の詳細はルームの参加方法とルーム参加レスポンスの受け取り方、ルームに参加したプレーヤーの検知方法を参照ください。
2. クライアントアドレスの交換
この例では、Diarkis Room の BroadcastTo を使います。
以下のコードでは自分のクライアントアドレスの取得方法を示しています。
string clientAddress = diarkisUdpClient->GetAddress();
Diarkis Room の BroadcastTo を使ったメッセージの送信方法とメッセージの受信の方法はそれぞれ送信方法と受信方法を参照ください。
3. Diarkis P2P を使って Peer-to-Peer を開始する
クライアント・アドレスの交換ができたら、Diarkis P2P を使って peer-to-peer 通信を開始することができます。
以下の例では Diarkis P2P を使った peer-to-peer 通信の開始方法を説明します。
Update
Diarkis P2P が正しく機能するために Diarkis P2P の Update メソッドを別のスレッドループの中から呼び出し続ける必要があります。
NOTE: peer-to-peer 通信を開始する際にはお互いのクライアントが同時に以下の例のように接続開始を実行する必要があります。
// Set up P2P class instance with Diarkis UPD client instance
p2pClientA = shared_ptr<IDiarkisP2P>(DiarkisCreateP2P(diarkisUdpClient));
// Set up Event listeners
// This event is raised when peer-to-peer connection is successful and ready to send and receive messages
REG_EVENT(p2pClientA->GetReadyEvent(), [this](void*, const DiarkisReadyEventArgs& args) { /* do something magical here */ });
// This event is raised when peer-to-peer connection failed
REG_EVENT(p2pClientA->GetFailEvent(), [this](void*, const DiarkisFailEventArgs& args) { /* do something magical here */ });
// This event is raised when you receive a message from the peer
REG_EVENT(p2pClientA->GetMessageEvent(), [this](void*, const DiarkisMessageEventArgs& args) { /* do something magical here */ });
// This event is raised when socket related exception is caught
REG_EVENT(p2pClientA->GetExceptionEvent(), [this](void*, const DiarkisExceptionEventArgs& args) { /* do something magical here */ });
// Pass a client address
// The format of client address is 0.0.0.0:0 as a string
// where 0.0.0.0 would be the address and 0 after : is the port
// We need to separate the address from the port
p2p->Connect(address, port);