예제 #1
0
 public static void OnTcpTransportDetached(Session session)
 {
     Log.Info("TCP transport detached: session_id={0}", session.Id);
     // TCP 연결이 닫혔으나 세션은 유효합니다. 이 세션이 매칭 요청을 했다면
     // 매칭을 취소합니다. 클라이언트는 TCP 연결이 끊어졌을 때 매칭을 다시 시도하게
     // 해야 합니다.
     Event.EventFunction event_fn = new Event.EventFunction(() => {
         MatchmakingHelper.CancelMatchmaking(session);
     });
     Event.Invoke(event_fn, session.Id);
 }
예제 #2
0
        public static void OnCancelMatchRequest(Session session, JObject message)
        {
            Guid    session_id      = session.Id;
            JObject session_context = session.Context;

            Log.Info("OnCancelMatchRequest: session={0}, context={1}, message={2}",
                     session_id, session_context.ToString(), message.ToString());

            SessionResponse.SessionResponseHandler response_handler =
                new SessionResponse.SessionResponseHandler(
                    (SessionResponse.ResponseResult error, SessionResponse response) => {
                SendMyMessage(response.session, kCancelMatchMessage,
                              response.error_code, response.error_message, response.data);
            });

            // 이후 과정은 matchmaking_helper.cs 를 참고하세요.
            MatchmakingHelper.CancelMatchmaking(session, message, response_handler);
        }
예제 #3
0
        public static void OnLogout(
            SessionResponse.ResponseResult error, SessionResponse response, bool caused_by_session_close)
        {
            // 로그아웃 이후 처리를 담당합니다.
            Log.Info("OnLogout: session={0}, result={1}, caused_by={2},, data={3}",
                     response.session.Id, (error == SessionResponse.ResponseResult.OK ? "ok" : "failed"),
                     (caused_by_session_close ? "session close" : "action"),
                     response.data.ToString());

            Event.EventFunction event_fn = new Event.EventFunction(() => {
                MatchmakingHelper.CancelMatchmaking(response.session);

                // 세션 닫힘 이벤트가 아니라면 로그아웃 요청으로 이 콜백을 호출한 경우므로
                // 메시지를 보냅니다.
                if (!caused_by_session_close)
                {
                    SendMyMessage(response.session, kLogoutMessage, response.error_code,
                                  response.error_message, response.data);
                }
            });
            Event.Invoke(event_fn, response.session.Id);
        }