Ejemplo n.º 1
0
        public override async ETTask Actor_TransferRequestHandler(Unit unit, Actor_TransferRequest request, Actor_TransferResponse response, Action reply)
        {
            long unitId = unit.Id;

            // 先在location锁住unit的地址
            await Game.Scene.GetComponent <LocationProxyComponent>().Lock(unitId, unit.InstanceId);

            // 删除unit,让其它进程发送过来的消息找不到actor,重发
            Game.EventSystem.Remove(unitId);

            long instanceId = unit.InstanceId;

            int mapIndex = request.MapIndex;

            StartConfigComponent startConfigComponent = StartConfigComponent.Instance;

            // 传送到map
            StartConfig mapConfig = startConfigComponent.Get(mapIndex);
            var         address   = mapConfig.GetComponent <InnerConfig>().Address;
            Session     session   = Game.Scene.GetComponent <NetInnerComponent>().Get(address);

            // 只删除不disponse否则M2M_TrasferUnitRequest无法序列化Unit
            Game.Scene.GetComponent <UnitComponent>().RemoveNoDispose(unitId);
            M2M_TrasferUnitResponse m2m_TrasferUnitResponse = (M2M_TrasferUnitResponse)await session.Call(new M2M_TrasferUnitRequest()
            {
                Unit = unit
            });

            unit.Dispose();

            // 解锁unit的地址,并且更新unit的instanceId
            await Game.Scene.GetComponent <LocationProxyComponent>().UnLock(unitId, instanceId, m2m_TrasferUnitResponse.InstanceId);

            reply();
        }
Ejemplo n.º 2
0
 public virtual async ETTask Actor_TransferRequestHandler(Unit unit, Actor_TransferRequest request, Actor_TransferResponse response, Action reply)
 {
 }