public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;

            int count = player.BattleGroundManager.MechCount + player.MyEnemyPlayer.BattleGroundManager.MechCount;

            player.Damage(count * M_SideEffectParam.GetParam_ConstInt("Damage"));

            List <int> killMechIds = new List <int>();

            foreach (ModuleMech mech in player.BattleGroundManager.Mechs)
            {
                killMechIds.Add(mech.M_MechID);
            }

            foreach (ModuleMech mech in player.MyEnemyPlayer.BattleGroundManager.Mechs)
            {
                killMechIds.Add(mech.M_MechID);
            }

            player.GameManager.KillMechs(killMechIds);
            return(true);
        }
예제 #2
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player      = (BattlePlayer)Player;
            int          healPercent = M_SideEffectParam.GetParam_MultipliedInt("Percent");

            if (TargetRange == TargetRange.Self) // 对自身
            {
                ModuleMech mech      = player.BattleGroundManager.GetMech(executorInfo.MechId);
                int        healValue = (int)Math.Ceiling((float)healPercent * mech.M_MechTotalLife / 100);
                player.BattleGroundManager.GetMech(executorInfo.MechId).Heal(healValue);
            }
            else
            {
                player.GameManager.SideEffect_ILifeAction(
                    delegate(ILife life)
                {
                    int healValue = (int)Math.Ceiling((float)healPercent * life.GetTotalLife() / 100);
                    life.Heal(healValue);
                },
                    player,
                    ChoiceCount,
                    TargetRange,
                    TargetSelect,
                    executorInfo.TargetClientIds,
                    executorInfo.TargetMechIds
                    );
            }
            return(true);
        }
예제 #3
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;
            int          value  = M_SideEffectParam.GetParam_MultipliedInt("Damage");
            int          times  = M_SideEffectParam.GetParam_ConstInt("DamageTimes");

            player.GameManager.SideEffect_ILifeAction(
                delegate(ILife life)
            {
                for (int i = 0; i < times; i++)
                {
                    life.Damage(value);
                }
            },
                player,
                ChoiceCount,
                TargetRange,
                TargetSelect,
                executorInfo.TargetClientIds,
                executorInfo.TargetMechIds
                );
            return(true);
        }
예제 #4
0
파일: Heal.cs 프로젝트: tuita520/Mech-Storm
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;
            int          value  = M_SideEffectParam.GetParam_MultipliedInt("HealValue");

            if (TargetRange == TargetRange.Self) // 对自身
            {
                player.BattleGroundManager.GetMech(executorInfo.MechId).Heal(value);
            }
            else
            {
                player.GameManager.SideEffect_ILifeAction(
                    delegate(ILife life) { life.Heal(value); },
                    player,
                    ChoiceCount,
                    TargetRange,
                    TargetSelect,
                    executorInfo.TargetClientIds,
                    executorInfo.TargetMechIds
                    );
            }
            return(true);
        }
예제 #5
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;

            player.GameManager.SideEffect_ShipAction(
                delegate(BattlePlayer sp)
            {
                int cardCount = M_SideEffectParam.GetParam_ConstInt("CardCount");
                int copyCount = M_SideEffectParam.GetParam_MultipliedInt("CopyCount");

                if (executorInfo.CardInstanceId != ExecutorInfo.EXECUTE_INFO_NONE)
                {
                    List <int> cardIds = player.HandManager.GetRandomHandCardIds(cardCount, new HashSet <int> {
                        executorInfo.CardInstanceId
                    });

                    foreach (int cardId in cardIds)
                    {
                        player.HandManager.GetTempCardsByID(cardId, copyCount);
                    }
                }
            },
                player,
                ChoiceCount,
                TargetRange,
                TargetSelect,
                executorInfo.TargetClientIds);
            return(true);
        }
예제 #6
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;
            int          value  = M_SideEffectParam.GetParam_MultipliedInt("Energy");
            int          times  = M_SideEffectParam.GetParam_ConstInt("Times");

            player.GameManager.SideEffect_ShipAction(
                delegate(BattlePlayer sp)
            {
                for (int i = 0; i < times; i++)
                {
                    sp.AddEnergy(value);
                }
            },
                player,
                ChoiceCount,
                TargetRange,
                TargetSelect,
                executorInfo.TargetClientIds);
            return(true);
        }
예제 #7
0
 public ExecutorSummary(ExecutorInfo executor_info, string component_id, string host, int port, int uptime_secs) : this() {
   this.Executor_info = executor_info;
   this.Component_id = component_id;
   this.Host = host;
   this.Port = port;
   this.Uptime_secs = uptime_secs;
 }
예제 #8
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;
            int          value  = M_SideEffectParam.GetParam_MultipliedInt("AttackValue");

            if (value < 0)
            {
                return(true);
            }
            if (TargetRange == TargetRange.Self) // 对自身
            {
                player.GameManager.GetMech(executorInfo.MechId).M_MechAttack += value;
            }
            else
            {
                player.GameManager.SideEffect_MechAction(
                    delegate(ModuleMech mech) { mech.M_MechAttack += value; },
                    player,
                    0,
                    executorInfo.TargetMechIds,
                    TargetRange,
                    TargetSelect,
                    -1
                    );
            }
            return(true);
        }
예제 #9
0
 public override void Deserialize(DataStream reader)
 {
     base.Deserialize(reader);
     ExecutorInfo = ExecutorInfo.Deserialize(reader);
     TriggerTime  = (SideEffectExecute.TriggerTime)reader.ReadSInt32();
     TriggerRange = (SideEffectExecute.TriggerRange)reader.ReadSInt32();
 }
예제 #10
0
        public override bool IsTrigger(ExecutorInfo ei)
        {
            BattlePlayer player = (BattlePlayer)Player;

            if (ei.CardInstanceId != ExecutorInfo.EXECUTE_INFO_NONE)
            {
                CardBase card = player.HandManager.GetCardByCardInstanceId(ei.CardInstanceId);
                if (card != null)
                {
                    if (card.CardInfo.BaseInfo.CardType != CardTypes.Spell && card.CardInfo.BaseInfo.CardType != CardTypes.Energy)
                    {
                        return(false);
                    }
                }
            }

            foreach (SideEffectBase se in PeekSEE.SideEffectBases)
            {
                if (se is IDamage)
                {
                    if (se.M_SideEffectParam.HasParamCanBeMultiplied())
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
예제 #11
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;

            player.GameManager.SideEffect_ShipAction(
                delegate(BattlePlayer sp)
            {
                CardInfo_Base ci = sp.CardDeckManager.CardDeck.GetFirstCardInfo();
                if (ci != null)
                {
                    sp.HandManager.DrawCards(1);
                    for (int i = 0; i < M_SideEffectParam.GetParam_MultipliedInt("CardCount"); i++)
                    {
                        sp.HandManager.GetACardByID(ci.CardID);
                    }
                }
            },
                player,
                ChoiceCount,
                TargetRange,
                TargetSelect,
                executorInfo.TargetClientIds);
            return(true);
        }
예제 #12
0
    public void AddMech(CardInfo_Mech mechCardInfo, int mechPlaceIndex, List <int> targetMechIds, int clientMechTempId, int handCardInstanceId)
    {
        if (BattleGroundIsFull)
        {
            return;
        }
        int mechId = BattlePlayer.GameManager.GenerateNewMechId();
        BattleGroundAddMechRequest request = new BattleGroundAddMechRequest(BattlePlayer.ClientId, mechCardInfo, mechPlaceIndex, mechId, clientMechTempId);

        BattlePlayer.MyClientProxy.BattleGameManager.Broadcast_AddRequestToOperationResponse(request);

        ModuleMech mech = new ModuleMech();

        mech.M_MechID             = mechId;
        mech.M_ClientTempMechID   = clientMechTempId;
        mech.OriginCardInstanceId = handCardInstanceId;
        mech.Initiate(mechCardInfo, BattlePlayer);

        BattlePlayer.CardDeckManager.CardDeck.AddCardInstanceId(mechCardInfo.CardID, handCardInstanceId);

        BattleGroundAddMech(mechPlaceIndex, mech);

        ExecutorInfo info = new ExecutorInfo(clientId: BattlePlayer.ClientId, mechId: mechId, targetMechIds: targetMechIds);

        if (mechCardInfo.MechInfo.IsSoldier)
        {
            BattlePlayer.GameManager.EventManager.Invoke(SideEffectExecute.TriggerTime.OnSoldierSummon, info);
        }
        else
        {
            BattlePlayer.GameManager.EventManager.Invoke(SideEffectExecute.TriggerTime.OnHeroSummon, info);
        }
    }
예제 #13
0
 public ExecutorSummary(ExecutorInfo executor_info, string component_id, string host, int port, int uptime_secs) : this()
 {
     this.Executor_info = executor_info;
     this.Component_id  = component_id;
     this.Host          = host;
     this.Port          = port;
     this.Uptime_secs   = uptime_secs;
 }
예제 #14
0
    public virtual bool Execute(ExecutorInfo eventTriggerInfo)
    {
        int    chance = M_SideEffectParam.GetParam_ConstInt("Chance");
        Random r      = new Random();
        int    next   = r.Next(0, 100);

        return(next < chance);
    }
예제 #15
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;

            player.ExtraRounds++;
            return(true);
        }
예제 #16
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;

            player.GameManager.KillMechs(ChoiceCount, executorInfo.TargetMechIds, player, TargetRange, TargetSelect, -1);
            return(true);
        }
예제 #17
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;

            player.GameManager.RemoveEquipByEquipID(executorInfo.TargetEquipIds[0]);
            return(true);
        }
예제 #18
0
 public void Read (TProtocol iprot)
 {
   bool isset_topology_id = false;
   bool isset_executors = false;
   TField field;
   iprot.ReadStructBegin();
   while (true)
   {
     field = iprot.ReadFieldBegin();
     if (field.Type == TType.Stop) { 
       break;
     }
     switch (field.ID)
     {
       case 1:
         if (field.Type == TType.String) {
           Topology_id = iprot.ReadString();
           isset_topology_id = true;
         } else { 
           TProtocolUtil.Skip(iprot, field.Type);
         }
         break;
       case 2:
         if (field.Type == TType.List) {
           {
             Executors = new List<ExecutorInfo>();
             TList _list223 = iprot.ReadListBegin();
             for( int _i224 = 0; _i224 < _list223.Count; ++_i224)
             {
               ExecutorInfo _elem225;
               _elem225 = new ExecutorInfo();
               _elem225.Read(iprot);
               Executors.Add(_elem225);
             }
             iprot.ReadListEnd();
           }
           isset_executors = true;
         } else { 
           TProtocolUtil.Skip(iprot, field.Type);
         }
         break;
       default: 
         TProtocolUtil.Skip(iprot, field.Type);
         break;
     }
     iprot.ReadFieldEnd();
   }
   iprot.ReadStructEnd();
   if (!isset_topology_id)
     throw new TProtocolException(TProtocolException.INVALID_DATA);
   if (!isset_executors)
     throw new TProtocolException(TProtocolException.INVALID_DATA);
 }
예제 #19
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;
            CardBase     card   = player.HandManager.GetCardByCardInstanceId(executorInfo.CardInstanceId);

            if (card != null)
            {
                card.CardInfo.BaseInfo.IsTemp = true;
            }
            return(true);
        }
예제 #20
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player      = (BattlePlayer)Player;
            int          energyValue = M_SideEffectParam.GetParam_MultipliedInt("Energy");
            int          finalValue  = energyValue * player.GameManager.CountMechsByTargetRange(TargetRange, player);

            finalValue = Math.Min(finalValue, player.MyEnemyPlayer.EnergyLeft);
            player.AddEnergy(finalValue);
            player.MyEnemyPlayer.UseEnergy(finalValue);
            return(true);
        }
예제 #21
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;
            int          value  = M_SideEffectParam.GetParam_MultipliedInt("Energy");

            player.GameManager.SideEffect_ForeachMech(
                delegate(int validTargetCount) { player.AddEnergy(value * validTargetCount); },
                player,
                TargetRange);
            return(true);
        }
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer sp = (BattlePlayer)Player;
            CardBase     ci = sp.HandManager.GetCardByCardInstanceId(executorInfo.CardInstanceId);

            if (ci.CardInfo.BaseInfo.Energy >= M_SideEffectParam.GetParam_MultipliedInt("DecValue"))
            {
                ci.M_Energy -= M_SideEffectParam.GetParam_MultipliedInt("DecValue");
            }
            return(true);
        }
예제 #23
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;

            player.MyEnemyPlayer.Damage(M_SideEffectParam.GetParam_MultipliedInt("Value"));
            int plus_damage = player.EnergyLeft;

            player.UseAllEnergy();
            player.MyEnemyPlayer.Damage(plus_damage * M_SideEffectParam.GetParam_MultipliedInt("ValuePlus"));
            return(true);
        }
예제 #24
0
        public override bool IsTrigger(ExecutorInfo ei)
        {
            BattlePlayer player = (BattlePlayer)Player;

            if (ei.CardInstanceId != ExecutorInfo.EXECUTE_INFO_NONE)
            {
                CardBase card = player.HandManager.GetCardByCardInstanceId(ei.CardInstanceId);
                if (card != null)
                {
                    return(card.CardInfo.BaseInfo.CardType == CardTypes.Spell || card.CardInfo.BaseInfo.CardType == CardTypes.Energy);
                }
            }

            return(false);
        }
예제 #25
0
 public override bool Execute(ExecutorInfo executorInfo)
 {
     if (!base.Execute(executorInfo))
     {
         return(false);
     }
     foreach (SideEffectBase se in PeekSEE.SideEffectBases)
     {
         if (se is IDamage)
         {
             se.M_SideEffectParam.Factor *= 2;
         }
     }
     return(true);
 }
예제 #26
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;

            ModuleMech mech = player.GameManager.GetMechOnBattleGround(M_SideEffectExecute.M_ExecutorInfo.MechId);

            if (mech?.M_Weapon != null)
            {
                int increase = Math.Min(mech.M_MechWeaponEnergyMax - mech.M_MechWeaponEnergy, M_SideEffectParam.GetParam_MultipliedInt("Energy"));
                mech.M_MechWeaponEnergy += increase;
            }
            return(true);
        }
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;

            player.PlayerBuffTrigger(M_SideEffectExecute.M_ExecutorInfo.SideEffectExecutorID, this);
            foreach (SideEffectBase se in Sub_SideEffect)
            {
                se.Player = player;
                se.M_SideEffectExecute = M_SideEffectExecute;
                se.Execute(executorInfo);
            }
            return(true);
        }
예제 #28
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;

            player.GameManager.SideEffect_ShipAction(
                delegate(BattlePlayer sp) { sp.HandManager.DrawCardsByType((CardTypes)M_SideEffectParam.GetParam_ConstInt("DrawCardType"), M_SideEffectParam.GetParam_MultipliedInt("CardCount")); },
                player,
                ChoiceCount,
                TargetRange,
                TargetSelect,
                executorInfo.TargetClientIds);
            return(true);
        }
예제 #29
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;

            player.GameManager.SideEffect_ShipAction(
                delegate(BattlePlayer sp) { sp.CardDeckManager.RandomInsertTempCard(M_SideEffectParam.GetParam_ConstInt("CardID"), M_SideEffectParam.GetParam_MultipliedInt("CardCount")); },
                player,
                ChoiceCount,
                TargetRange,
                TargetSelect,
                executorInfo.TargetClientIds);
            return(true);
        }
예제 #30
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;

            player.GameManager.SideEffect_ShipAction(
                delegate(BattlePlayer sp) { sp.AddEnergy(sp.EnergyLeft); },
                player,
                ChoiceCount,
                TargetRange,
                TargetSelect,
                executorInfo.TargetClientIds);
            return(true);
        }
예제 #31
0
        public override bool Execute(ExecutorInfo executorInfo)
        {
            if (!base.Execute(executorInfo))
            {
                return(false);
            }
            BattlePlayer player = (BattlePlayer)Player;

            CardFilterTypes dropCardType = (CardFilterTypes)M_SideEffectParam.GetParam_ConstInt("DropCardType");
            CardFilterTypes drawCardType = (CardFilterTypes)M_SideEffectParam.GetParam_ConstInt("DrawCardType");

            int dropCardCount = player.HandManager.DropCardType(dropCardType, new HashSet <int> {
                executorInfo.CardInstanceId
            });

            player.HandManager.GetTempCardByCardTypes(drawCardType, dropCardCount);
            return(true);
        }
예제 #32
0
 public override bool Execute(ExecutorInfo executorInfo)
 {
     if (!base.Execute(executorInfo))
     {
         return(false);
     }
     foreach (SideEffectBase se in PeekSEE.SideEffectBases)
     {
         try
         {
             se.Execute(executorInfo);
         }
         catch (Exception e)
         {
         }
     }
     return(true);
 }
예제 #33
0
 public void Read (TProtocol iprot)
 {
   bool isset_executor_info = false;
   bool isset_component_id = false;
   bool isset_host = false;
   bool isset_port = false;
   bool isset_uptime_secs = false;
   TField field;
   iprot.ReadStructBegin();
   while (true)
   {
     field = iprot.ReadFieldBegin();
     if (field.Type == TType.Stop) { 
       break;
     }
     switch (field.ID)
     {
       case 1:
         if (field.Type == TType.Struct) {
           Executor_info = new ExecutorInfo();
           Executor_info.Read(iprot);
           isset_executor_info = true;
         } else { 
           TProtocolUtil.Skip(iprot, field.Type);
         }
         break;
       case 2:
         if (field.Type == TType.String) {
           Component_id = iprot.ReadString();
           isset_component_id = true;
         } else { 
           TProtocolUtil.Skip(iprot, field.Type);
         }
         break;
       case 3:
         if (field.Type == TType.String) {
           Host = iprot.ReadString();
           isset_host = true;
         } else { 
           TProtocolUtil.Skip(iprot, field.Type);
         }
         break;
       case 4:
         if (field.Type == TType.I32) {
           Port = iprot.ReadI32();
           isset_port = true;
         } else { 
           TProtocolUtil.Skip(iprot, field.Type);
         }
         break;
       case 5:
         if (field.Type == TType.I32) {
           Uptime_secs = iprot.ReadI32();
           isset_uptime_secs = true;
         } else { 
           TProtocolUtil.Skip(iprot, field.Type);
         }
         break;
       case 7:
         if (field.Type == TType.Struct) {
           Stats = new ExecutorStats();
           Stats.Read(iprot);
         } else { 
           TProtocolUtil.Skip(iprot, field.Type);
         }
         break;
       default: 
         TProtocolUtil.Skip(iprot, field.Type);
         break;
     }
     iprot.ReadFieldEnd();
   }
   iprot.ReadStructEnd();
   if (!isset_executor_info)
     throw new TProtocolException(TProtocolException.INVALID_DATA);
   if (!isset_component_id)
     throw new TProtocolException(TProtocolException.INVALID_DATA);
   if (!isset_host)
     throw new TProtocolException(TProtocolException.INVALID_DATA);
   if (!isset_port)
     throw new TProtocolException(TProtocolException.INVALID_DATA);
   if (!isset_uptime_secs)
     throw new TProtocolException(TProtocolException.INVALID_DATA);
 }
 public void Read (TProtocol iprot)
 {
   bool isset_storm_id = false;
   bool isset_executor_stats = false;
   bool isset_time_secs = false;
   bool isset_uptime_secs = false;
   TField field;
   iprot.ReadStructBegin();
   while (true)
   {
     field = iprot.ReadFieldBegin();
     if (field.Type == TType.Stop) { 
       break;
     }
     switch (field.ID)
     {
       case 1:
         if (field.Type == TType.String) {
           Storm_id = iprot.ReadString();
           isset_storm_id = true;
         } else { 
           TProtocolUtil.Skip(iprot, field.Type);
         }
         break;
       case 2:
         if (field.Type == TType.Map) {
           {
             Executor_stats = new Dictionary<ExecutorInfo, ExecutorStats>();
             TMap _map213 = iprot.ReadMapBegin();
             for( int _i214 = 0; _i214 < _map213.Count; ++_i214)
             {
               ExecutorInfo _key215;
               ExecutorStats _val216;
               _key215 = new ExecutorInfo();
               _key215.Read(iprot);
               _val216 = new ExecutorStats();
               _val216.Read(iprot);
               Executor_stats[_key215] = _val216;
             }
             iprot.ReadMapEnd();
           }
           isset_executor_stats = true;
         } else { 
           TProtocolUtil.Skip(iprot, field.Type);
         }
         break;
       case 3:
         if (field.Type == TType.I32) {
           Time_secs = iprot.ReadI32();
           isset_time_secs = true;
         } else { 
           TProtocolUtil.Skip(iprot, field.Type);
         }
         break;
       case 4:
         if (field.Type == TType.I32) {
           Uptime_secs = iprot.ReadI32();
           isset_uptime_secs = true;
         } else { 
           TProtocolUtil.Skip(iprot, field.Type);
         }
         break;
       default: 
         TProtocolUtil.Skip(iprot, field.Type);
         break;
     }
     iprot.ReadFieldEnd();
   }
   iprot.ReadStructEnd();
   if (!isset_storm_id)
     throw new TProtocolException(TProtocolException.INVALID_DATA);
   if (!isset_executor_stats)
     throw new TProtocolException(TProtocolException.INVALID_DATA);
   if (!isset_time_secs)
     throw new TProtocolException(TProtocolException.INVALID_DATA);
   if (!isset_uptime_secs)
     throw new TProtocolException(TProtocolException.INVALID_DATA);
 }
예제 #35
0
        /// <summary>
        /// Gets a proxy to the next executor, using round-robin scheduling.
        /// </summary>
        /// <param name="executorInfo">[out] executorInfo of the next executor.</param>
        /// <returns>Next executor to use.</returns>
        /// <exception cref="NoExecutorsAvailableException"/>
        /// <exception cref="RemotingException" />
        private static IExecutor GetNextExecutor(out ExecutorInfo executorInfo)
        {
            // Get a snapshot of the current list of Executors
            var snapshot = Executors.ToArray(); // Thread-safe
            if (snapshot.Length == 0)
                    throw new NoExecutorsAvailableException();

            int order = Interlocked.Increment(ref _orderNumber);

            executorInfo = snapshot[order % snapshot.Length].Value;

            var executor = (IExecutor)Activator.GetObject(typeof(IExecutor), executorInfo.Uri);
            Debug.Assert(RemotingServices.IsTransparentProxy(executor));

            return executor;
        }