Exemplo n.º 1
0
        protected async override void Run(Session session, C2S_UserLogin message, Action <S2C_UserLogin> reply)
        {
            S2C_UserLogin response = new S2C_UserLogin();
            //从local获取一个map地址
            var ret = await Game.Scene.GetComponent <LocationProxyComponent>().GetMapAddress(1);

            if (ret.Tag != 0)
            {
                response.Tag = ret.Tag;
                reply(response);
            }
            Session        mapSession = Game.Scene.GetComponent <NetInnerComponent>().Get(NetworkHelper.ToIPEndPoint(ret.Address));
            M2G_CreateUnit createUnit = (M2G_CreateUnit)await mapSession.Call(new G2M_CreateUnit()
            {
                AccountId = message.AccountId, GateSessionId = session.InstanceId
            });

            Player player = ComponentFactory.Create <Player, int>(message.AccountId);

            player.UnitId = createUnit.UnitId;
            Log.Debug("数据库结束:" + createUnit);
            Game.Scene.GetComponent <PlayerManagerComponent>().Add(player);
            session.AddComponent <SessionPlayerComponent>().Player = player;
            session.AddComponent <MailBoxComponent, string>(ActorType.GateSession);
            response.Tag    = 0;
            response.UnitId = createUnit.UnitId;
            reply(response);

            Log.Debug("数据库结束");
            count++;
        }
Exemplo n.º 2
0
        protected async ETVoid RunAsync(Session session, C2G_EnterMap message, Action <G2C_EnterMap> reply)
        {
            G2C_EnterMap response = new G2C_EnterMap();

            try
            {
                ///20190716 加入心跳包
                Game.Scene.GetComponent <BongComponent>().AddSession(session.InstanceId);
                Console.WriteLine(" session.InstanceId/Id: " + session.InstanceId + " / " + session.Id);

                Player player = session.GetComponent <SessionPlayerComponent>().Player;

                // 在map服务器上创建战斗Unit
                M2G_CreateUnit createResponse = (M2G_CreateUnit)await SessionHelper.MapSession().Call(new G2M_CreateUnit()
                {
                    UnitType = (int)UnitType.Player, RolerId = player.Id, GateSessionId = session.InstanceId, UnitId = 0
                });

                player.UnitId = createResponse.UnitId;

                response.UnitId = player.UnitId;
                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
Exemplo n.º 3
0
        protected override async void Run(Session session, C2G_EnterMap message, Action <G2C_EnterMap> reply)
        {
            G2C_EnterMap response = new G2C_EnterMap();

            try
            {
                Player player = session.GetComponent <SessionPlayerComponent>().Player;
                // 在map服务器上创建战斗Unit
                IPEndPoint     mapAddress = StartConfigComponent.Instance.MapConfigs[0].GetComponent <InnerConfig>().IPEndPoint;
                Session        mapSession = Game.Scene.GetComponent <NetInnerComponent>().Get(mapAddress);
                M2G_CreateUnit createUnit = (M2G_CreateUnit)await mapSession.Call(new G2M_CreateUnit()
                {
                    PlayerId = player.Id, GateSessionId = session.InstanceId
                });

                player.UnitId   = createUnit.UnitId;
                response.UnitId = createUnit.UnitId;
                response.Count  = createUnit.Count;
                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
Exemplo n.º 4
0
        protected async ETVoid RunAsync(Session session, C2G_EnterMap message, Action <G2C_EnterMap> reply)
        {
            G2C_EnterMap response = new G2C_EnterMap();

            try
            {
                Player player = session.GetComponent <SessionPlayerComponent>().Player;
                // 在map服务器上创建战斗Unit
                IPEndPoint mapAddress = StartConfigComponent.Instance.MapConfigs[0].GetComponent <InnerConfig>().IPEndPoint;
                Session    mapSession = Game.Scene.GetComponent <NetInnerComponent>().Get(mapAddress);

                // 此session是gate与client通信的session,将session的instanceId给map进程,map就能将消息给指定的gate的session,并实现转发
                M2G_CreateUnit createUnit = (M2G_CreateUnit)await mapSession.Call(new G2M_CreateUnit()
                {
                    PlayerId = player.Id, GateSessionId = session.InstanceId
                });

                player.UnitId   = createUnit.UnitId;
                response.UnitId = createUnit.UnitId;
                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
        protected async ETVoid RunAsync(Session session, C2G_EnterMap message, Action <G2C_EnterMap> reply)
        {
            G2C_EnterMap response = new G2C_EnterMap();

            try
            {
                Player player = session.GetComponent <SessionPlayerComponent>().Player;
                // 在map服务器上创建战斗Unit
                IPEndPoint mapAddress = StartConfigComponent.Instance.MapConfigs[0].GetComponent <InnerConfig>().IPEndPoint;
                Session    mapSession = Game.Scene.GetComponent <NetInnerComponent>().Get(mapAddress);

                M2G_CreateUnit createUnit = (M2G_CreateUnit)await mapSession.Call(new G2M_CreateUnit()
                {
                    PlayerId   = player.Id, GateSessionId = session.InstanceId,
                    groupIndex = (int)GroupIndex.Player,
                    layerMask  = (int)UnitLayerMask.ALL,
                    unitLayer  = (int)UnitLayer.Character,
                    unitTag    = (int)UnitTag.Player
                });



                player.UnitId   = createUnit.UnitId;
                response.UnitId = createUnit.UnitId;
                response.Frame  = Game.Scene.GetComponent <UnitStateMgrComponent>().currFrame;

                reply(response);
            }
            catch (Exception e)
            {
                ReplyError(response, e, reply);
            }
        }
Exemplo n.º 6
0
        protected override async ETTask Run(Session session, C2G_EnterMap request, G2C_EnterMap response, Action reply)
        {
            Player player = session.GetComponent <SessionPlayerComponent>().Player;
            // 在map服务器上创建战斗Unit
            long           mapInstanceId = StartConfigComponent.Instance.GetByName("Map1").SceneInstanceId;
            M2G_CreateUnit createUnit    = (M2G_CreateUnit)await ActorMessageSenderComponent.Instance.Call(
                mapInstanceId, new G2M_CreateUnit()
            {
                PlayerId = player.Id, GateSessionId = session.InstanceId
            });

            player.UnitId   = createUnit.UnitId;
            response.UnitId = createUnit.UnitId;
            reply();
        }
Exemplo n.º 7
0
        protected override async ETTask Run(Session session, C2G_EnterMap request, G2C_EnterMap response, Action reply)
        {
            Player player = session.GetComponent <SessionPlayerComponent>().Player;
            // 在map服务器上创建战斗Unit
            IPEndPoint     mapAddress = StartConfigComponent.Instance.MapConfigs[0].GetComponent <InnerConfig>().IPEndPoint;
            Session        mapSession = Game.Scene.GetComponent <NetInnerComponent>().Get(mapAddress);
            M2G_CreateUnit createUnit = (M2G_CreateUnit)await mapSession.Call(new G2M_CreateUnit()
            {
                PlayerId = player.Id, GateSessionId = session.InstanceId
            });

            player.UnitId   = createUnit.UnitId;
            response.UnitId = createUnit.UnitId;
            reply();
        }
        protected override async ETTask Run(Session session, C2G_EnterMap request, G2C_EnterMap response, Action reply)
        {
            Player player = session.GetComponent <SessionPlayerComponent>().Player;
            //获取到第一个地图服务器的内网地址
            IPEndPoint mapAddress = StartConfigComponent.Instance.MapConfigs[0].GetComponent <InnerConfig>().IPEndPoint;
            //创建socket连接到地图服务器
            Session mapSession = Game.Scene.GetComponent <NetInnerComponent>().Get(mapAddress);
            //给地图服务器发送创建单位的协议
            //GateSessionId=session.InstanceId 传递会话实体的实例ID,后面可以通过这个重新找回会话实体
            M2G_CreateUnit createUnit = (M2G_CreateUnit)await mapSession.Call(new G2M_CreateUnit()
            {
                PlayerId = player.Id, GateSessionId = session.InstanceId
            });

            //将地图服务器返回的数据 单位Id赋值缓存 并且响应给客户端 单位Id缓存到Session上
            player.UnitId   = createUnit.UnitId;
            response.UnitId = createUnit.UnitId;
            //虽然响应给客户端了 但是客户端没有处理M2G_CreateUnit协议
            reply();
        }
Exemplo n.º 9
0
 public virtual async ETTask G2M_CreateUnitHandler(Scene scene, G2M_CreateUnit request, M2G_CreateUnit response, Action reply)
 {
 }
Exemplo n.º 10
0
        public override async ETTask G2M_CreateUnitHandler(Scene scene, G2M_CreateUnit request, M2G_CreateUnit response, Action reply)
        {
            var copyMap = Game.Scene.Children.Values.ToList().Find((x) =>
            {
                if (x is Scene s)
                {
                    return(s.Name == "CopyMap1");
                }
                return(false);
            });

            if (copyMap == null)
            {
                var copyMapConfig = StartConfigComponent.Instance.GetByName("CopyMap1");
                copyMap = await SceneFactory.Create(Game.Scene, copyMapConfig.GetComponent <SceneConfig>().Name, SceneType.Map);
            }

            Unit unit = null;

            if (request.UnitId != 0)
            {
                unit = await DBComponent.Instance.Query <Unit>(request.UnitId);

                unit.Domain = copyMap;
            }
            else
            {
                unit          = EntityFactory.CreateWithId <Unit>(copyMap, IdGenerater.GenerateId());
                unit.PlayerId = request.PlayerId;
                unit.Setup();
                unit.Save().Coroutine();
            }

            unit.AddComponent <MoveComponent>();
            unit.AddComponent <Body2dComponent>().CreateBody(.5f, .5f);
            unit.AddComponent <MailBoxComponent>();
            await unit.AddLocation();

            unit.AddComponent <UnitGateComponent, long>(request.GateSessionId);
            copyMap.GetComponent <UnitComponent>().Add(unit);
            response.UnitId = unit.Id;

            // 广播创建的unit
            var inViewUnitsMsg = new M2C_InViewUnits();
            var enterViewMsg   = new M2C_OnEnterView();

            Unit[] units = copyMap.GetComponent <UnitComponent>().GetAll();
            foreach (Unit u in units)
            {
                var entityInfo = new EntiyInfo();
                entityInfo.BsonBytes       = new Google.Protobuf.ByteString();
                entityInfo.BsonBytes.bytes = MongoHelper.ToBson(u);
                entityInfo.Type            = EntityDefine.GetTypeId <Unit>();
                if (u.Id == unit.Id)
                {
                    enterViewMsg.EnterEntity = entityInfo;
                    inViewUnitsMsg.SelfUnit  = entityInfo.BsonBytes;
                    continue;
                }
                inViewUnitsMsg.InViewEntitys.Add(entityInfo);
            }
            var monsters = copyMap.GetComponent <MonsterComponent>().GetAll();

            foreach (var u in monsters)
            {
                var entityInfo = new EntiyInfo();
                entityInfo.BsonBytes       = new Google.Protobuf.ByteString();
                entityInfo.BsonBytes.bytes = MongoHelper.ToBson(u);
                entityInfo.Type            = EntityDefine.GetTypeId <Monster>();
                inViewUnitsMsg.InViewEntitys.Add(entityInfo);
            }
            MessageHelper.BroadcastToOther(unit, enterViewMsg);
            MessageHelper.Send(unit, inViewUnitsMsg);
            reply();
        }