성공과 실패 콜백

Strix Unity SDK의 함수는 대부분 네트워크 기반이므로 결과는 대개 바로 나오지 않습니다. 이 때문에 함수는 비동기식입니다. 결과와 오류는 리턴값으로 전달되지 않고 대신 콜백을 이용합니다.

일반적으로 콜백은 두 가지로, 하나는 성공적 완료용이고 다른 하나는 실패용입니다. 동작을 성공적으로 완료하지 못했다면 두 번째 것을 사용하면 됩니다.

예를 한 번 보겠습니다.

void JoinRoom(RoomJoinArgs args, RoomJoinEventHandler handler, FailureEventHandler failureHandler, RequestConfig config = null)

여기 세 번째 인수가 우리가 찾고 있는 실패 핸들러입니다. 이 같은 실패 콜백은 대부분 타입 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; }
}

보시다시피 속성은 sessioncause 두 가지입니다. 전자는 오류가 발생한 세션을 지칭하는 것입니다. 일반적으로 현재 방 세션이 됩니다.

후자가 여기서 제일 유용하며, 실패가 일어난 이유를 알려줍니다. 이것을 콘솔로 인쇄하면 더 많은 정보를 얻을 수 있습니다. 또는, 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
        }
    }
});