/// <summary>
        /// 接收来自指令中心的指令
        /// </summary>
        /// <param name="beatMessage"></param>
        /// <returns></returns>
        public static BeatResult HeartBeat(BeatMessage beatMessage)
        {
            BeatResult result = new BeatResult()
            {
                Result = Model.BeatResultEnum.Failed
            };
            InstructionServiceClient client = null;

            try
            {
                if (beatMessage != null)
                {
                    client = new InstructionServiceClient();
                    result = client.HeartBeat(beatMessage);
                    if (result != null && result.Result == Model.BeatResultEnum.Success)
                    {
                        ExecInstruction(result.TaskList.Where(t => t.TaskExecutor.Equals(beatMessage.HostIP) && t.Status == Model.TaskMessageStatusEnum.None));
                    }
                }
            }
            finally
            {
                if (client != null)
                {
                    client.Close();
                }
            }
            return(result);
        }
Пример #2
0
    public override void OnBeatSuccess(BasePlanet planet, BeatResult result)
    {
        if (planet != this)
        {
            return;
        }
        int resultBonus = result == BeatResult.Awesome ? 2 : 1;

        if (planetState == PlanetState.Colonized)
        {
            List <BasePlanet> destroyed = manager.GetDestroyedPlanets(teamID);
            if (destroyed.Count > 0 && manager.GetResourceType(repairCost.type) >= repairCost.amount)
            {
                int idx = UnityEngine.Random.Range(0, destroyed.Count - 1);
                destroyed[idx].Repair();
                manager.SpendResource(repairCost.type, repairCost.amount);
            }
            else
            {
                int units = baseBeatRate * resultBonus;
                Debug.LogFormat("Adding {0} units of {1}", units, PlanetUtils.GetResourceName(resourceType));
                manager.AddResource(resourceType, units);
            }
        }
        BlinkColour();
        CheckColonize(planet);
    }
Пример #3
0
    public override void OnBeatSuccess(BasePlanet planet, BeatResult result)
    {
        if (planet != this)
        {
            return;
        }

        int resultBonus =
            result == BeatResult.Awesome ? 3 : result == BeatResult.Good ? 2 : 1;

        if (planetState == PlanetState.Colonized && CanSpawnShip())
        {
            int units = defaultSpawnCount * resultBonus;
            Debug.LogFormat("Spawning {0} {1} units", units, shipPrefab.shipName);
            for (int i = 0; i < units; ++i)
            {
                BaseShip s = Instantiate <BaseShip>(shipPrefab);
                s.name = string.Format("{0}#{1}", s.shipName, counter++);
                s.SetHQ(hq);
                manager.SpendResourceList(shipSpawnRequirements);
                manager.RegisterShip(s);
            }
        }
        base.OnBeatSuccess(planet, result);
    }
Пример #4
0
    void AddPlayerPoints(BeatResult result)
    {
        Beat beat = m_playList[m_songIndex].beats[m_beatIndex];

        m_camera.ShakeCamera(beat.shakeDuration, beat.shakeAmplitude, beat.shakeRate);

        float points = (int)result;

        m_player.AddPoints(points);
        m_beatIndex++;
        m_screenFlare.gameObject.SetActive(true);
        StartCoroutine(FadeFlare());
    }
Пример #5
0
    public override void OnBeatSuccess(BasePlanet planet, BeatResult result)
    {
        if (planet != this)
        {
            return;
        }

        float resultBonus = result == BeatResult.Awesome ? damageBonus : 1.0f;

        if (CanAttackPlanet())
        {
            manager.LaunchAttack(this, resultBonus);
        }
        base.OnBeatSuccess(planet, result);
    }
Пример #6
0
    public override void OnBeatSuccess(BasePlanet planet, BeatResult result)
    {
        if (planet != this)
        {
            return;
        }
        int resultBonus = result == BeatResult.Awesome ? 2 : 1;

        if (planetState == PlanetState.Colonized)
        {
            int units = baseBeatRate * resultBonus;
            Debug.LogFormat("Adding {0} units of {1}", units, PlanetUtils.GetResourceName(resourceType));
            manager.AddResource(resourceType, units);
        }

        base.OnBeatSuccess(planet, result);
    }
Пример #7
0
 private static void Heat(object dataBuffer)
 {
     try
     {
         BeatMessage beatMessage = new BeatMessage();
         beatMessage.HostIP = ServerProfile.ServerIP;
         BeatResult result = InstructionServiceBusiness.HeartBeat(beatMessage);
         Process.Debug(ikey, "发送心跳到指令中心", "Heat", "", "发送心跳到指令中心,返回消息:" + JsonConvert.SerializeObject(result), "");
     }
     catch (Exception ex)
     {
         Process.Error(ikey, "发送心跳到指令中心", "Heat", "", "发送心跳到指令中心,发生异常:" + ex.GetString(), "");
     }
     finally
     {
         SystemHeatService.AddDataToBuffer();
     }
 }
Пример #8
0
 /// <summary>
 /// 请求并接收指令中心的数据
 /// </summary>
 /// <param name="beatMessage"></param>
 /// <returns></returns>
 public BeatResult HeartBeat(BeatMessage beatMessage)
 {
     lock (_lockObj)
     {
         BeatResult beatResult = new BeatResult();
         beatResult.TaskList = new List <TaskMessage>();
         var tempList = _taskList.Where(t => t.TaskExecutor.Equals(beatMessage.HostIP) && t.Status == TaskMessageStatusEnum.None);
         foreach (var item in tempList)
         {
             var msg = MappingHelper.From <TaskMessage, TaskMessage>(item);
             beatResult.TaskList.Add(msg);
         }
         beatResult.Result = BeatResultEnum.Success;
         _taskList.Where(t => t.TaskExecutor.Equals(beatMessage.HostIP)).ToList()
         .ForEach(t => t.Status = TaskMessageStatusEnum.Executed);
         DistributedCache.Add(CacheKeys.InstuctionTaskListCacheKey, _taskList, DateTime.Now.AddYears(1));
         return(beatResult);
     }
 }
Пример #9
0
        public async Task <long> SendBeat(BeatInfo beatInfo)
        {
            try
            {
                _logger.Debug($"[BEAT] {_namespace} sending beat to server: {beatInfo}");

                Dictionary <string, string> paramValue = new Dictionary <string, string>();
                paramValue.Add(BEAT_KEY, beatInfo.ToString());
                paramValue.Add(NAMESPACE_ID_KEY, _namespace);
                paramValue.Add(SERVICE_NAME_KEY, beatInfo.ServiceName);
                // 根据Open API确少 groupName参数
                string result = await ReqApi(UtilAndComs.NACOS_URL_BASE + "/instance/beat", paramValue, HttpMethod.Put);

                BeatResult beatResult = JsonConvert.DeserializeObject <BeatResult>(result);
                return(beatResult.ClientBeatInterval);
            }
            catch (Exception ex)
            {
                _logger.Error(ex, $"[CLIENT-BEAT] failed to send beat: {beatInfo}");
            }
            return(0L);
        }
Пример #10
0
 public virtual void OnBeatSuccess(BasePlanet planet, BeatResult result)
 {
     BlinkColour();
     CheckColonize(planet);
 }