private Task <HttpResponseMessage>[] SendStateChangedEvent(AppInfoEx appInfo)
        {
            var tasks     = new List <Task <HttpResponseMessage> >();
            var appsState = new Contracts.AppStateInfo()
            {
                Hash = appInfo.Hash, Time = appInfo.Time
            };
            var stateEvent = new Contracts.StateChangedEvent();

            stateEvent.ServiceName = _serviceConfig.GetServiceName();
            stateEvent.AppState    = appsState;
            var services = _servicesCollector.GetServices();

            for (var i = 0; i < services.Count; ++i)
            {
                if ((services[i].Name.IndexOf(_serviceConfig.GetServiceName()) == -1) && services[i].Active)
                {
                    string      jsonString = JsonConvert.SerializeObject(stateEvent);
                    HttpContent content    = new StringContent(jsonString);
                    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                    try
                    {
                        tasks.Add(_httpClient.PostAsync(services[i].Url, content));
                    }
                    catch (Exception)
                    {
                        services[i].Active = false;
                    }
                }
            }
            return(tasks.ToArray());
        }
        public void Post(Contracts.StateChangedEvent stateEvent)
        {
            Console.WriteLine("Receive info app from " + stateEvent.ServiceName);
            ResetService(stateEvent.ServiceName);
            var serviceName = _serviceConfig.GetServiceAddress();

            if (AppInfoStorageController.NeedUpdate(stateEvent.AppState.Hash, stateEvent.AppState.Time, serviceName, stateEvent.ServiceName))
            {
                SendGetAppInfoRequest(stateEvent);
            }
        }
        private async void SendGetAppInfoRequest(Contracts.StateChangedEvent stateEvent)
        {
            var serviceUrl = _servicesCollector.GetServiceUrl(stateEvent.ServiceName);

            if (serviceUrl != null)
            {
                var query = HttpUtility.ParseQueryString(string.Empty);
                query["serviceName"] = _serviceConfig.GetServiceName();
                query["hash"]        = Uri.EscapeDataString(stateEvent.AppState.Hash);

                var response = await _httpClient.GetAsync(serviceUrl + "?" + query.ToString());

                var formattedResponse = await response.Content.ReadAsStringAsync();

                var serviceName = _serviceConfig.GetServiceAddress();
                var appInfo     = JsonConvert.DeserializeObject <AppInfoEx>(formattedResponse);
                appInfo.Weight = _servicesCollector.GetServiceWeight(appInfo.ServiceName);

                AppInfoStorageController.CheckAndSetAppInfo(appInfo, serviceName, stateEvent.ServiceName);
            }
        }