private static void RefreshSerials(Dictionary <string, Credentials> credentials) { Dictionary <string, List <SerialInfo> > serials = new Dictionary <string, List <SerialInfo> >(); Dictionary <string, List <SerialInfo> > newSerials = new Dictionary <string, List <SerialInfo> >(); IOTService service = GetOTService(); foreach (var c in credentials) { serials.Add(c.Key, new List <SerialInfo>()); var serialsResponse = service.GetSerials(new GetSerialsRequest { Equipment = c.Value.Equipment, User = c.Value.UserName, Password = c.Value.Password }); if (serialsResponse.Succeeded) { foreach (var o in serialsResponse.Orders) { serials[c.Key].AddRange(o.Serials.Select(s => new SerialInfo { Operation = o.Operation, Order = o.Order, ProductCode = o.ProductCode, Status = s.Status, SerialNumber = s.SerialNumber, OperationId = o.OperationId }).ToList()); } } if (!serials[c.Key].Any()) { serials.Remove(c.Key); } } lock (_clientMessagesLock) { foreach (var equipClient in serials) { List <SerialInfo> clientSerials = new List <SerialInfo>(); foreach (var s in equipClient.Value) { if (!clients[equipClient.Key].Messages.Select(m => m.Value as MessageInfo <SerialInfo>).Any(m => m != null && m.Data.SerialNumber == s.SerialNumber && m.Data.Operation == s.Operation && m.Data.Order == s.Order && m.Data.ProductCode == s.ProductCode)) { clientSerials.Add(new SerialInfo { Operation = s.Operation, Order = s.Order, ProductCode = s.ProductCode, SerialNumber = s.SerialNumber, Status = s.Status, OperationId = s.OperationId }); } } if (clientSerials.Any()) { newSerials.Add(equipClient.Key, clientSerials); } } } foreach (var clientId in newSerials) { foreach (var serialInfo in clientId.Value) { SendMessage(clientId.Key, OTMessageType.Serial, serialInfo.SerialNumber, string.Empty, serialInfo); } } }