public void SendServiceState(ServiceDescriptionDto service) { try { var srv = Services.FirstOrDefault(s => s.ServiceType == service.ServiceType); if (srv != null) { if (service.IsStarted == false && _tokens.ContainsKey(srv)) { _tokens[srv].Cancel(); _tokens.Remove(srv); } else if (service.IsStarted == true) { StartNewTimer(service); } Services.ReplaceItem(oldItem: srv, newItem: service); } } catch (Exception ex) { MessageService.ShowError(ex.Message); } }
private void StopService(ServiceDescriptionDto service) { if (service != null) { try { _proxy.ProxyService.StopService(service); } catch (Exception ex) { MessageService.ShowError(ex.Message); } } }
private void StartNewTimer(ServiceDescriptionDto service) { CancellationTokenSource cancellationToken = new CancellationTokenSource(); _tokens.Add(service, cancellationToken); service.WorkingHours = DateTime.Now.Subtract(service.StartDate); Task.Factory.StartNew(() => { while (cancellationToken.Token.IsCancellationRequested == false) { service.WorkingHours += new TimeSpan(0, 0, 1); Task.Delay(1000).Wait(); } }, cancellationToken.Token); }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { ServiceDescriptionDto serviceDto = value as ServiceDescriptionDto; if (serviceDto != null) { if (serviceDto.IsStarted) { return("Время запуска"); } else { return("Время закрытия | Время работы"); } } return(null); }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { ServiceDescriptionDto service = value as ServiceDescriptionDto; if (service != null) { if (service.IsStarted) { return(String.Format("{0}", service.StartDate.ToString())); } else { return(String.Format("{0} | {1}", service.StopDate.ToString(), service.StopDate.ToLocalTime() - service.StartDate.ToLocalTime())); } } return(null); }
void ICommunicationContract.StartService(ServiceDescriptionDto service) { if (service != null) { try { ServiceHost newHost = null; ServiceDescriptionDto serviceDescription = null; ServiceDescriptionDto oldDescription = null; for (int i = 0; i < _services.Values.Count; i++) { if (_services.Values.ElementAt(i).Description.Endpoints[0].Contract.Name == service.ServiceType && _services.Values.ElementAt(i).State == CommunicationState.Closed) { newHost = new ServiceHost(_serviceImplementations[service.ServiceType]); newHost.Open(); newHost.Opened += HostStateHandler; newHost.Closed += HostStateHandler; newHost.Faulted += HostStateHandler; serviceDescription = CreateDescription(newHost); oldDescription = _services.Keys.ElementAt(i); break; } } _services.Remove(oldDescription); _services.Add(serviceDescription, newHost); Callback.SendServiceState(serviceDescription); HostStart?.Invoke(serviceDescription.ServiceType, newHost); } catch (Exception ex) { } } }
void ICommunicationContract.StopService(ServiceDescriptionDto service) { if (service != null) { try { ServiceHost closedHost = null; foreach (var host in _services.Values) { if (host.Description.Endpoints[0].Contract.Name == service.ServiceType && host.State == CommunicationState.Opened) { closedHost = host; host.Close(); service.StopDate = DateTime.Now; service.IsStarted = false; service.State = host.State.ToString(); Callback.SendServiceState(service); break; } } closedHost.Opened -= HostStateHandler; closedHost.Closed -= HostStateHandler; closedHost.Faulted -= HostStateHandler; HostStop?.Invoke(closedHost, service.StartDate); } catch (Exception ex) { } } }