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