接続イベント

接続メソッドのコールバック

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シングルトンのmasterSessionroomSessionのプロパティに関して使うことになるでしょう。

これらのイベントの詳細についてはセッションイベントを参照してください。

接続イベントの使用例を次に示します。

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

エラーコード

ConnectFailedErrorThrownのイベントハンドラーは引数でcauseプロパティを受け取ります。これはException型として宣言されていますが、しばしばそれをErrorCodeExceptionにダウンキャストしてエラーコードを取得することができます。エラーコードの取得方法とコードの意味については、エラー処理を参照してください。