internal void OnRoomUserQuit(int roomid, ulong guid, Msg_RL_UserQuit originalMsg) { UserInfo user = LobbyServer.Instance.UserProcessScheduler.GetUserInfo(guid); if (user != null) { RoomInfo room = user.Room; if (null != room) { if (room.RoomId == roomid) { room.DelUsers(guid); user.ResetRoomInfo(); user.CurrentRoomID = 0; user.CurrentState = UserState.Room == user.CurrentState ? UserState.Online : user.CurrentState; } } else { user.CurrentRoomID = 0; user.CurrentState = UserState.Room == user.CurrentState ? UserState.Online : user.CurrentState; } LobbyServer.Instance.ForwardToWorld(user.UserSvrName, originalMsg); LogSys.Log(LOG_TYPE.INFO, "RoomServer User Quit Guid {0} State {1}", guid, user.CurrentState); } }
internal void OnChangeSceneResult(ulong userGuid, int roomID, int targetRoomID, int result, int hp, int mp) { UserInfo user = LobbyServer.Instance.UserProcessScheduler.GetUserInfo(userGuid); if (user == null) { return; } if ((int)SceneOperationResultEnum.Success == result) { RoomInfo room = m_LobbyInfo.GetRoomByID(roomID); RoomInfo targetRoom = m_LobbyInfo.GetRoomByID(targetRoomID); if (null != room && null != targetRoom) { int fromSceneId = room.SceneType; int targetSceneId = targetRoom.SceneType; float enterX = 50, enterY = 50; /* * int transportId = TransportConfigProvider.GenTransportId(fromSceneId, targetSceneId); * TransportConfig cfg = TransportConfigProvider.Instance.GetTransportConfig(transportId); * if (null != cfg) { * enterX = cfg.m_EnterX; * enterY = cfg.m_EnterY; * } */ room.DelUsers(userGuid); if (room.RoomServerName == targetRoom.RoomServerName) { targetRoom.AddUsers(user.CampId, userGuid); user.CurrentState = UserState.Room; Msg_BL_UserChangeScene msg = new Msg_BL_UserChangeScene(); msg.Guid = userGuid; msg.SceneId = targetRoom.SceneType; LobbyServer.Instance.UserChannel.Send(user.UserSvrName, msg); } else { user.CurrentState = UserState.Online; RequestEnterSceneRoom(user, targetRoomID, hp, mp, enterX, enterY); } LogSys.Log(LOG_TYPE.INFO, "User change field success ! , guid:{0} room:{1} target room:{2} result:{3}", userGuid, roomID, targetRoomID, (SceneOperationResultEnum)result); } else { LobbyServer.Instance.HighlightPrompt(user, 42);//进入游戏失败,请稍后重试 } } else { LogSys.Log(LOG_TYPE.INFO, "User change field failed ! guid:{0} room:{1} target room:{2} result:{3}", userGuid, roomID, targetRoomID, (SceneOperationResultEnum)result); LobbyServer.Instance.HighlightPrompt(user, 42);//进入游戏失败,请稍后重试 } }
//=================================================================== //以下为与RoomServer之间的消息通信 //响应RoomServer发来的房间创建反馈消息 internal void OnEnterSceneResult(ulong userGuid, int roomID, int result) { UserInfo user = LobbyServer.Instance.UserProcessScheduler.GetUserInfo(userGuid); if (user == null) { return; } if ((int)SceneOperationResultEnum.Success == result) { user.CurrentState = UserState.Room; user.CurrentRoomID = roomID; RoomInfo room = m_LobbyInfo.GetRoomByID(roomID); if (null != room) { RoomServerInfo svrInfo; if (m_LobbyInfo.RoomServerInfos.TryGetValue(room.RoomServerName, out svrInfo)) { if (null != svrInfo) { NodeMessage enterSceneResultMsg = new NodeMessage(LobbyMessageDefine.EnterSceneResult, user.Guid); GameFrameworkMessage.EnterSceneResult protoData = new GameFrameworkMessage.EnterSceneResult(); protoData.server_ip = svrInfo.ServerIp; protoData.server_port = svrInfo.ServerPort; protoData.key = user.Key; protoData.camp_id = user.CampId; protoData.scene_type = room.SceneType; protoData.result = (int)GeneralOperationResult.LC_Succeed; protoData.prime = Helper.Random.Next(2, 21); enterSceneResultMsg.m_ProtoData = protoData; LobbyServer.Instance.TransmitToWorld(user, enterSceneResultMsg); LogSys.Log(LOG_TYPE.INFO, "user enter field success! guid {0} room {1} result {2}", userGuid, roomID, (SceneOperationResultEnum)result); } else { LobbyServer.Instance.HighlightPrompt(user, 42);//进入游戏失败,请稍后重试 } } else { LobbyServer.Instance.HighlightPrompt(user, 42);//进入游戏失败,请稍后重试 } } else { LobbyServer.Instance.HighlightPrompt(user, 42);//进入游戏失败,请稍后重试 } } else { RoomInfo curRoom = user.Room; if (null != curRoom) { curRoom.DelUsers(userGuid); } user.CurrentState = UserState.Online; LogSys.Log(LOG_TYPE.INFO, "user enter field failed! guid {0} room {1} result {2}", userGuid, roomID, (SceneOperationResultEnum)result); LobbyServer.Instance.HighlightPrompt(user, 42);//进入游戏失败,请稍后重试 } }