internal void HandleUserQuit(Msg_LR_UserQuit msg, PBChannel channel) { Room room = GetRoomByID(msg.RoomID); if (null != room) { User user = room.GetUserByGuid(msg.UserGuid); if (null != user) { room.DeleteUser(user); } } Msg_RL_UserQuit replyBuilder = new Msg_RL_UserQuit(); replyBuilder.UserGuid = msg.UserGuid; replyBuilder.RoomID = msg.RoomID; channel.Send(replyBuilder); }
private void HandleUserQuit(Msg_LR_UserQuit msg, PBChannel channel, int handle, uint seq) { bool isFieldThread; int ix = GetActiveRoomThreadIndex(msg.RoomID, out isFieldThread); if (ix >= 0) { if (isFieldThread) { RoomThread roomThread = field_roomthread_list_[ix]; roomThread.QueueAction(roomThread.HandleUserQuit, msg, channel); } else { RoomThread roomThread = roomthread_list_[ix]; roomThread.QueueAction(roomThread.HandleUserQuit, msg, channel); } } else { Msg_RL_UserQuit replyBuilder = new Msg_RL_UserQuit(); replyBuilder.UserGuid = msg.UserGuid; replyBuilder.RoomID = msg.RoomID; channel.Send(replyBuilder); } }
internal void QuitRoom(ulong guid, bool is_quit_room, int srcHandle) { UserInfo user = LobbyServer.Instance.UserProcessScheduler.GetUserInfo(guid); if (user != null) { if (user.CurrentState == UserState.Room) { RoomInfo room = user.Room; if (null != room) { Msg_LR_UserQuit msg = new Msg_LR_UserQuit(); msg.UserGuid = guid; msg.RoomID = room.RoomId; LobbyServer.Instance.RoomSvrChannel.Send(room.RoomServerName, msg); } } else if (null != user.Room) { user.Room.DelUsers(guid); user.ResetRoomInfo(); user.CurrentState = UserState.Online; user.LeftLife = UserInfo.c_LifeTimeWaitOffline; } LogSys.Log(LOG_TYPE.INFO, "QuitRoom Guid {0} state {1}", guid, user.CurrentState); } else { Msg_BL_QueryUserStateResult builder = new Msg_BL_QueryUserStateResult(); builder.Guid = guid; builder.State = (int)UserState.DropOrOffline; LobbyServer.Instance.UserChannel.Send(srcHandle, builder); } }
internal void UserOffline(ulong guid, int srcHandle) { UserInfo user = LobbyServer.Instance.UserProcessScheduler.GetUserInfo(guid); if (user != null) { if (null != user.Room) { Msg_LR_UserQuit msg = new Msg_LR_UserQuit(); msg.UserGuid = guid; msg.RoomID = user.Room.RoomId; LobbyServer.Instance.RoomSvrChannel.Send(user.Room.RoomServerName, msg); Msg_BL_UserOffline builder = new Msg_BL_UserOffline(); builder.Guid = guid; LobbyServer.Instance.UserChannel.Send(srcHandle, builder); LogSys.Log(LOG_TYPE.INFO, "UserOffline, guid:{0}", guid); } } }
//响应RoomServer发来的房间内玩家掉线消息 internal void OnRoomUserDrop(int roomid, ulong guid, bool isBattleEnd, Msg_RL_UserDrop originalMsg) { UserInfo user = LobbyServer.Instance.UserProcessScheduler.GetUserInfo(guid); if (user != null) { if (isBattleEnd) { user.CurrentRoomID = 0; user.CurrentState = UserState.Room == user.CurrentState ? UserState.Online : user.CurrentState; } else { user.CurrentRoomID = roomid; } RoomInfo curRoom = user.Room; RoomInfo oldRoom = m_LobbyInfo.GetRoomByID(roomid); if (null != oldRoom && oldRoom != curRoom) { Msg_LR_UserQuit msg = new Msg_LR_UserQuit(); msg.UserGuid = guid; msg.RoomID = roomid; LobbyServer.Instance.RoomSvrChannel.Send(oldRoom.RoomServerName, msg); } LobbyServer.Instance.ForwardToWorld(user.UserSvrName, originalMsg); LogSys.Log(LOG_TYPE.INFO, "RoomServer User Drop! Guid {0} State {1} IsEnd {2}", guid, user.CurrentState, isBattleEnd); } else { RoomInfo oldRoom = m_LobbyInfo.GetRoomByID(roomid); if (null != oldRoom) { Msg_LR_UserQuit msg = new Msg_LR_UserQuit(); msg.UserGuid = guid; msg.RoomID = roomid; LobbyServer.Instance.RoomSvrChannel.Send(oldRoom.RoomServerName, msg); } LogSys.Log(LOG_TYPE.INFO, "RoomServer User Drop! Guid {0} State Offline IsEnd {1}", guid, isBattleEnd); } }