public void Update(AppStatus status) { this.Clients.All.Update(status); }
public static AppStatus GetCurrentAppStatus() { var appStatus = new AppStatus(); // get active stations and orders var activeStations = StationRepository.GetAllOccupiedByOrder(); var incompleteOrders = OrderRepository.GetAllIncomplete(); var activeOrderIds = activeStations.GroupBy(s => s.OrderUniqueId).Select(g => g.Key).ToList(); appStatus.ActiveOrders = activeOrderIds.Select(ao => { var o = OrderRepository.GetOneByUniqueId(ao); { var firstStation = activeStations.FirstOrDefault(s => s.OrderUniqueId == o.UniqueId); var lastStation = activeStations.LastOrDefault(s => s.OrderUniqueId == o.UniqueId); var dto = new OrderStatusDto { OrderUniqueId = o.UniqueId, BatchNumber = o.GetBatchCount(), MeterCount = o.MeterCount, ProducedMeterCount = o.ProducedMeterCount, IsCompleted = o.IsCompleted, IsActive = true }; if (firstStation != null && lastStation != null) { dto.StationRange = string.Format("{0}-{1}", firstStation.Number, lastStation.Number); } return dto; } }).ToArray(); // get incomplete orders appStatus.IncompleteOrders = incompleteOrders.Select(o => { var activeOrder = appStatus.ActiveOrders.FirstOrDefault(ao => ao.OrderUniqueId == o.UniqueId); var dto = new OrderStatusDto { OrderUniqueId = o.UniqueId, BatchNumber = o.GetBatchCount(), MeterCount = o.MeterCount, ProducedMeterCount = o.ProducedMeterCount, IsActive = activeOrderIds.Contains(o.UniqueId), IsCompleted = o.IsCompleted, StationRange = activeOrder != null ? activeOrder.StationRange : string.Empty }; return dto; }).ToArray(); // set current status appStatus.ProductionStatus = productionStatus; // update var allStations = StationRepository.GetAll(); allStations.ForEach( s => { var order = incompleteOrders.FirstOrDefault(o => o.UniqueId == s.OrderUniqueId); var dto = StationDto.Create(s, order); stationHub.Clients.All.Update(dto); }); return appStatus; }