private void SendReconnect() { CBReconnectRequest msg = new CBReconnectRequest(); msg.SessionID = "";//TODO:LAST SESSION ID msg.Token = serverInfo.Token; SendMessage <CBReconnectRequest, CBReconnectReply>(msg, (rep) => { if (rep.RoomState == (int)RoomData.State.Dismiss) { room.SetState(0, rep.RoomState, 0); MessageBox.Show("房间已解散", "点击确认,退出房间!", MessageBoxStyle.OK, (res) => { GF.GetProxy <HallProxy>().CancelReconnect(1, 1); GF.ChangeState <HallState>(); }); return; } Reset(); isLogin = true; room.SetData(rep.RoomInfo); room.SetCards(rep.Cards); room.SetPlayers(rep.PlayerInfos); room.SetState(rep.WhoseTurn, rep.RoomState, rep.LeftCardCount); SendEvent(EventDef.SOS.Reconnected); }); }
void OnReconnect(string sessionID, CBReconnectRequest msg) { Logger.Log($"{sessionID} Reconnect with token: {msg.Token} "); UserData user = null; if (!m_users.TryGetValue(msg.Token, out user)) { Logger.LogError($"RECONNECT => {sessionID}'s token {msg.Token} is wrong, refuse reconnect."); return; } if (GetProxy <RoomProxy>().GetRoom(user.roomID) == null) { Logger.LogError($"RECONNECT => {sessionID}'s token {msg.Token} is wrong, refuse reconnect."); CBReconnectReply rep = new CBReconnectReply(); rep.RoomState = (int)SOS.SOS_Logic.State.Dismiss; SendMessage(sessionID, rep); return; } SOS.SOS_Logic sosLogic = GetProxy <BattleServerProxy>().GetSosLogic(user.roomID); user.SetSessionID(sessionID); if (sosLogic.state == SOS.SOS_Logic.State.Started) { user.SetState(UserState.Battle); } else { user.SetState(UserState.Login); } CBReconnectReply reply = sosLogic.GetReconnectData(user.uid); SendMessage(sessionID, reply); }