Esempio n. 1
0
        //通知进入场景
        public void NotifyEnterScene(CharacterSceneInfo info, int changeType, SceneParam sp)
        {
            PlayerLog.WriteLog(888, "NotifyEnterScene characterId={0},SceneId={1},newScene={2}", info.CharacterId,
                               info.SceneInfo.SceneId, info.SceneInfo.SceneGuid);
            mLogger.Info("Enter Game {0} - NotifyEnterScene - 1 - {1}", info.CharacterId,
                         TimeManager.Timer.ElapsedMilliseconds);
            mLogger.Info("NotifyEnterScene {0}, {1}.", info.CharacterId, info.SceneInfo.Server.RemoteEndPoint);

            var content =
                new __RPC_Scene_SSEnterScene_ARG_uint64_characterId_uint64_guid_uint64_applyGuid_int32_changeType_SceneParam_sceneParam__
                    ();

            content.CharacterId = info.CharacterId;
            content.Guid        = info.SceneInfo.SceneGuid;
            content.ChangeType  = changeType;
            content.SceneParam  = sp;
            var message = new ServiceDesc();

            message.FuncId      = 3055;
            message.ServiceType = (int)ServiceType.Scene;
            message.PacketId    = mBroker.GetUniquePacketId();
            message.Data        = ProtocolExtension.Serialize(content);
            message.Type        = (int)MessageType.SS;
            message.CharacterId = info.CharacterId;


            info.SceneInfo.Server.SendMessage(message);
        }
Esempio n. 2
0
        public override CharacterInfo CreateCharacter(ulong CharacterId)
        {
            var character = new CharacterSceneInfo();

            character.CharacterId = CharacterId;
            return(character);
        }
Esempio n. 3
0
        //通知进入场景
        public void NotifyLoginEnterScene(ServerClient client,
                                          CharacterSceneInfo info,
                                          ulong sceneGuid,
                                          ServiceDesc desc)
        {
            Logger.Info("Enter Game {0} - NotifyEnterScene - 1 - {1}", info.CharacterId,
                        TimeManager.Timer.ElapsedMilliseconds);
            Logger.Info("NotifyEnterScene {0}, {1}.", info.CharacterId, info.SceneInfo.Server.RemoteEndPoint);

            var content = new __RPC_Scene_PrepareDataForEnterGame_RET_uint64__();

            content.ReturnValue = sceneGuid;

            var message = new ServiceDesc();

            message.FuncId      = 3051;
            message.ServiceType = (int)ServiceType.Login;
            message.PacketId    = desc.PacketId;
            message.Data        = ProtocolExtension.Serialize(content);
            message.Type        = desc.Type;
            message.CharacterId = desc.CharacterId;
            message.ClientId    = desc.ClientId;

            client.SendMessage(message);
        }
Esempio n. 4
0
        //查询
        public CharacterSceneInfo GetCharacter(ulong characterId)
        {
            CharacterSceneInfo characterInfo = null;

            if (mCharacterInfo.TryGetValue(characterId, out characterInfo))
            {
                return(characterInfo);
            }
            return(null);
        }
Esempio n. 5
0
 //创建
 public bool CreateCharacter(ulong characterId, out CharacterSceneInfo characterInfo)
 {
     if (mCharacterInfo.TryGetValue(characterId, out characterInfo))
     {
         return(false); //说明之前已经有这个人了,这次create是失败的
     }
     characterInfo = new CharacterSceneInfo(characterId);
     mCharacterInfo[characterId] = characterInfo;
     return(true);
 }
Esempio n. 6
0
        /// <summary>
        ///     切换到目标场景
        /// </summary>
        /// <param name="info">角色信息</param>
        /// <param name="oldScene">角色之前的场景信息</param>
        /// <param name="newScene">角色要去的新场景信息</param>
        /// <param name="callback">完成后的回调,bool类型的参数表示是否切换了机器</param>
        private void ChangeSceneOver(CharacterSceneInfo info,
                                     SceneInfo oldScene,
                                     SceneInfo newScene,
                                     Action <bool> callback)
        {
            DebugCounter[8]++;
            PlayerLog.WriteLog(888, "ChangeSceneStart characterId={0},oldScene={1},newScene={2}", info.CharacterId,
                               oldScene.SceneGuid, newScene.SceneGuid);
            //Logger.Info("Enter Game {0} - ChangeSceneOver - 1 - {1}", info.CharacterId, TimeManager.Timer.ElapsedMilliseconds);
            //Logger.Info("Enter Game {0} - ChangeSceneOver - 2 - {1}", info.CharacterId, TimeManager.Timer.ElapsedMilliseconds);
            // 如果不在同一台机器上,则通知上一台机器下线,然后通知下一台机器上线
            if (oldScene.Server != newScene.Server)
            {
                DebugCounter[10]++;
                //Logger.Info("Enter Game {0} - ChangeSceneOver - 3 - {1}", info.CharacterId, TimeManager.Timer.ElapsedMilliseconds);
                UnloadData(info.CharacterId, oldScene, serviceDesc2 =>
                {
                    DebugCounter[11]++;
                    NotifyConnect(info, serviceDesc =>
                    {
                        DebugCounter[14]++;

                        if (callback != null)
                        {
                            callback(true);
                        }
                    });
                    //Logger.Info("Enter Game {0} - ChangeSceneOver - 4 - {1}", info.CharacterId, TimeManager.Timer.ElapsedMilliseconds);
                    //ChangeTheShortCut(info, () =>
                    //{
                    //    Logger.Info("Enter Game {0} - ChangeSceneOver - 5 - {1},{2} - {3}", info.CharacterId,
                    //        oldScene.Server.RemoteEndPoint, newScene.Server.RemoteEndPoint, TimeManager.Timer.ElapsedMilliseconds);
                    //});
                });
            }
            else
            {
                Logger.Info("Enter Game {0} - ChangeSceneOver - 2 - {1}", info.CharacterId,
                            TimeManager.Timer.ElapsedMilliseconds);
                DebugCounter[12]++;

                info.SceneInfo = newScene;

                if (callback != null)
                {
                    callback(false);
                }
            }
        }
Esempio n. 7
0
        private void NotifyConnect(CharacterSceneInfo info, Action <ServiceDesc> callback)
        {
            ConnectLostLogger.Info("client {0} - {1} SceneBroker NotifyConnect 1", info.ClientId, info.CharacterId);
            Logger.Info("NotifyConnect {0}, {1}.", info.CharacterId, info.SceneInfo.Server.RemoteEndPoint);
            var desc = new ServiceDesc();

            desc.Type        = (int)MessageType.SS;
            desc.FuncId      = 3501;
            desc.CharacterId = info.CharacterId;
            desc.ClientId    = info.ClientId;
            desc.PacketId    = GetUniquePacketId();

            var content = new __RPC_Scene_SSNotifyCharacterOnConnet_ARG_uint64_clientId_uint64_characterId__();

            content.CharacterId = info.CharacterId;
            content.ClientId    = info.ClientId;
            desc.Data           = ProtocolExtension.Serialize(content);
            var act = new Action <bool, ServiceDesc>((b, item) =>
            {
                if (b)
                {
                    if (item.Error == 0)
                    {
                        ConnectLostLogger.Info("client {0} - {1} SceneBroker NotifyConnect 3", info.ClientId,
                                               info.CharacterId);
                        Logger.Info("Scene server Connected replied {0}", info.CharacterId);

                        callback(item);
                    }
                    else
                    {
                        ConnectLostLogger.Error("client {0} - {1} SceneBroker NotifyConnect 4", info.ClientId,
                                                info.CharacterId);
                        Logger.Error("NotifyConnect failed {0}....", item.Error);
                    }
                }
                else
                {
                    ConnectLostLogger.Error("client {0} - {1} SceneBroker NotifyConnect 5", info.ClientId,
                                            info.CharacterId);
                    Logger.Error("NotifyConnect timeout....");
                }
            });

            ConnectLostLogger.Info("client {0} - {1} SceneBroker NotifyConnect 2", info.ClientId, info.CharacterId);
            RegisterCallback(desc.PacketId, act);
            info.SceneInfo.Server.SendMessage(desc);
        }
Esempio n. 8
0
        private void ChangeTheShortCut(CharacterSceneInfo info, Action callback)
        {
            // 获得GateId
            var gateId = ((info.ClientId & 0xFFFF000000000000UL) >> 48);

            Logger.Info("Enter Game {0} {1} - ChangeTheShortCut - 1 - {2}", info.CharacterId, gateId,
                        TimeManager.Timer.ElapsedMilliseconds);

            GateProxy gate;

            if (mGates.TryGetValue((int)gateId, out gate))
            {
                Logger.Info("Enter Game {0} - ChangeTheShortCut - 2  - {1}", info.CharacterId,
                            TimeManager.Timer.ElapsedMilliseconds);

                var gateDesc = new ServiceDesc();
                gateDesc.Type        = 20;
                gateDesc.CharacterId = info.CharacterId;
                gateDesc.ServiceType = (int)ServiceType.Scene;
                gateDesc.ClientId    = info.ClientId;
                gateDesc.Routing.Add(gateId);
                gateDesc.PacketId = GetUniquePacketId();

                Action <bool, ServiceDesc> act = (b, desc) =>
                {
                    if (b)
                    {
                        Logger.Info("Enter Game {0} - ChangeTheShortCut - 3 - {1}", info.CharacterId,
                                    TimeManager.Timer.ElapsedMilliseconds);
                        callback();
                    }
                    else
                    {
                        Logger.Error("ChangeTheShortCut {0} error.", info.CharacterId);
                    }
                };

                RegisterCallback(gateDesc.PacketId, act);

                info.SceneInfo.Server.SendMessage(gateDesc);
            }
            else
            {
                Logger.Error("Can not find gate {0}.", gateId);
            }
        }
Esempio n. 9
0
 //判断 【场景】 【玩家】 是否一个机器
 private bool CheckSameMachine(SceneInfo sceneInfo1, CharacterSceneInfo info)
 {
     return(sceneInfo1.Server == info.SceneInfo.Server);
 }
Esempio n. 10
0
 //把玩家装进scene
 private void PutCharacterIntoScene(SceneInfo sceneInfo, CharacterSceneInfo characterInfo)
 {
     characterInfo.SceneInfo = sceneInfo;
 }