Diarkis P2P を開始するためにクライアントのアドレスを交換する

Diarkis P2P を使って peer-to-peer の通信を開始するためにはクライアントのアドレスを交換する必要があります。

Diarkis P2P を使って peer-to-peer の通信を開始するためにクライアントのアドレスの交換には Diarkis Room を使います。

NOTE: Diarkis P2P では UDP プロトコルのみに対応しています。

ステップ

  1. ルームを作成する・ルームに参加する
  2. Diarkis Room の BroadcastTo と MessageTo を使ってクライアントアドレスを交換する
  3. 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 メソッドを別のスレッドループの中から呼び出し続ける必要があります。

Unity Game Engine を使って開発している場合、Unity の Update の中で呼び出してください。

NOTE: peer-to-peer 通信を開始する際にはお互いのクライアントが同時に以下の例のように接続開始を実行する必要があります。

// Pass Diarkis UDP client class instance
Diarkis.Modules.P2P p2p = new Diarkis.Modules.P2P(diarkisUdpClient);

// Set up event listener callbacks

// This event is raised when peer-to-peer connection is successful
p2p.OnReady += (string peerAddress, int peerPort, double, holePunchTimeInMilliseconds) =>
{

}

// This event is raised when peer-to-peer connection fails
p2p.OnFail += (string peerAddress, int peerPort) =>
{

}

// This event is raised when a peer sends a message
p2p.OnMessage += (string peerAddress, int peerPort, byte[] message) =>
{

}

// This event is raised when socket related excetion is caught
p2p.OnException += (int errCode, string errMessage) =>
{

}

// 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);