接続イベント¶
接続メソッドのコールバック¶
Strixは、非同期のイベントベースの方法を使用して接続を確立します。接続関数の呼び出しは要求を行った直後に戻り、Strixが成功か失敗のメッセージを非同期に待ち受けます。
接続関数(および他の多くの関数)はイベントハンドラーを受け取ります。これらのハンドラーは、接続要求の成功時または失敗時に呼び出されます。
注釈
ここでイベントという言葉を使っていますが、成功コールバックと失敗コールバックは、メソッドの引数として渡す普通のC#のデリゲートです。
サブスクライブできるイベント¶
成功コールバックと失敗コールバックの他に、Strixにはサブスクライブできるイベントがいくつかあります。
接続関係では4つのイベントがあります。
イベント |
ハンドラーの型 |
引数で得られるプロパティ |
Connected |
StrixNetworkConnectEventHandler |
session: 新しいセッション
|
ConnectFailed |
StrixNetworkConnectFailedEventHandler |
session: 再接続に失敗したセッション(該当する場合)
cause: 失敗の原因
|
Closed |
StrixNetworkCloseEventHander |
session: 閉じられたセッション
|
ErrorThrown |
StrixNetworkErrorEventHandler |
session: エラーが発生したセッション
cause: エラーの原因
|
これら4つのイベントはC#のイベントです。つまり、+=
演算子(またはadd
アクセッサー)を使ってサブスクライブし、-=
演算子(またはdelete
アクセッサー)を使ってサブスクライブを終了できます。これらは全てSoftGear.Strix.Unity.Runtime.Session.AbstractSession
抽象クラスで定義されていますが、普通はStrixNetwork
シングルトンのmasterSession
とroomSession
のプロパティに関して使うことになるでしょう。
これらのイベントの詳細についてはセッションイベントを参照してください。
例¶
接続イベントの使用例を次に示します。
public void ConnectedEventSample(string applicationId, string host, string playerName)
{
StrixNetwork.instance.roomSession.Connected += args => {
Debug.Log("Room session connection has been established with the following host: "
+ args.session.host
+ ":" + args.session.port
);
};
StrixNetwork.instance.applicationId = applicationId;
StrixNetwork.instance.ConnectMasterServer(
host: host,
connectEventHandler: _ => {
StrixNetwork.instance.JoinRandomRoom(
playerName,
handler: joinRoomResult => { },
failureHandler: joinRoomError => {
StrixNetwork.instance.CreateRoom(
new RoomProperties {
name = "New Room",
capacity = 4,
},
new RoomMemberProperties {
name = playerName
},
createRoomResult => { },
createRoomError => Debug.LogError(
"Could not join nor create a room."
+ " Reasons: " + joinRoomError.cause
+ "; " + createRoomError.cause
)
);
});
},
errorEventHandler: connectError => Debug.LogError("Connection failed. Reason: " + connectError.cause)
);
}