//-------------------------------------------------------------------------------------------------------------------------- //供外部通过DispatchAction调用的方法,会在不同线程执行,需要保证多线程安全。 //-------------------------------------------------------------------------------------------------------------------------- internal void RequestEnterScene(Msg_LB_RequestEnterScene msg) { //添加/更新玩家数据 UserInfo info = AddOrUpdateUserInfo(msg.BaseInfo, msg.User, UserInfo.c_LifeTimeWaitStartGame); //开始进野外流程 RoomProcessThread roomProcess = LobbyServer.Instance.RoomProcessThread; roomProcess.QueueAction(roomProcess.RequestEnterScene, info.Guid, msg.SceneId, msg.WantRoomId, msg.FromSceneId); }
private void HandleEnterScene(NodeMessage msg, int handle, uint seq) { GameFrameworkMessage.NodeMessageWithGuid headerMsg = msg.m_NodeHeader as GameFrameworkMessage.NodeMessageWithGuid; if (null != headerMsg) { GameFrameworkMessage.EnterScene protoMsg = msg.m_ProtoData as GameFrameworkMessage.EnterScene; if (null != protoMsg) { ulong guid = headerMsg.m_Guid; int sceneId = protoMsg.m_SceneId; int wantRoomId = protoMsg.m_RoomId; UserProcessScheduler dataProcess = UserServer.Instance.UserProcessScheduler; UserInfo user = dataProcess.GetUserInfo(guid); if (user != null) { Msg_LB_RequestEnterScene builder = new Msg_LB_RequestEnterScene(); Msg_LB_BigworldUserBaseInfo baseInfoBuilder = new Msg_LB_BigworldUserBaseInfo(); baseInfoBuilder.AccountId = user.AccountId; baseInfoBuilder.NodeName = user.NodeName; baseInfoBuilder.WorldId = UserServerConfig.WorldId; baseInfoBuilder.ClientInfo = user.ClientInfo; baseInfoBuilder.StartServerTime = UserServerConfig.StartServerTime; baseInfoBuilder.SceneId = user.SceneId; builder.BaseInfo = baseInfoBuilder; builder.User = UserThread.BuildRoomUserInfo(user, 0, 0); builder.SceneId = sceneId; builder.WantRoomId = wantRoomId; builder.FromSceneId = user.SceneId; UserServer.Instance.BigworldChannel.Send(builder); } } } }
private void HandleRequestEnterScene(Msg_LB_RequestEnterScene msg_, PBChannel channel, int src, uint session) { UserProcessScheduler dataProcess = m_UserProcessScheduler; dataProcess.DispatchAction(dataProcess.RequestEnterScene, msg_); }