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); } }