成功コールバックと失敗コールバック¶
Strix Unity SDKのほとんどの機能はネットワークを利用するため、通常、結果はすぐには利用できません。このため、関数の実行は非同期になります。結果やエラーは戻り値として返るのではなく、代わりにコールバックを利用します。
通常、2つのコールバックがあります。1つは正常に完了したとき、もう1つは失敗したときに呼び出されます。2番目のものを使用して、処理が正常に完了できなかったことを検出できます。
例を見てみましょう:
void JoinRoom(RoomJoinArgs args, RoomJoinEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)
これの3番目の引数が失敗ハンドラーです。これらの失敗コールバックの多くはFailureEventHandler
型のデリゲートです。これは次のように定義されています。
delegate void FailureEventHandler(FailureEventArgs args);
使用例は次の通りです。
StrixNetwork.instance.JoinRoom(roomJoinArgs, handler: null, failureHandler: failureArgs => {
});
コールバックに渡される引数には、次の定義があります。
public class FailureEventArgs {
public AbstractSession session { get; set; }
public Exception cause { get; set; }
}
ご覧の通り、session
とcause
という2つのプロパティがあります。1つ目は、エラーが発生したセッションへの参照です。通常は、現在のルームセッションになります。
ここでは2番目のプロパティが有用です。失敗が発生した理由を知ることができるためです。これを単にコンソールに出力すれば、詳細情報が得られます。または、これをErrorCodeException
にダウンキャストしてみることもできます。これが最も一般的な例外の型であり、この型からはエラーコードが取得できます。
ErrorCodeException
は次のように定義されています。
public class ErrorCodeException : Exception {
public int errorCode { get; set; }
public override string Message { get; }
}
エラーコードがint
のプロパティとして定義されていることがわかります。エラーコードの値については、こちらを参照してください。また、Message
プロパティを使用して、エラーの短い説明を文字列として取得することもできます。
これを処理する方法の例を次に示します。
StrixNetwork.instance.JoinRoom(roomJoinArgs, handler: null, failureHandler: failureArgs => {
var errorCodeException = failureArgs.cause as ErrorCodeException;
// 失敗の原因となった例外がErrorCodeExceptionの場合、エラーコードを分析できます
if (errorCodeException != null) {
// 特定のエラーが分かっていてそれを探している場合は、エラーコードの表を参照した上で直接比較し、専用のエラー処理ロジックを実行できます
if (errorCodeException.errorCode == SoftGear.Strix.Client.Room.Error.RoomErrorCode.RoomNotFound)
{
...
// それ以外の場合は、エラーの説明をコンソールに出力できます
} else {
Debug.Log("Room search failed. Error: " + errorCodeException.Message
}
}
});