//--------------------------------------------------------------------------------------------------------------------------
        //供外部通过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);
        }
Exemplo n.º 2
0
        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_);
        }