public PlcZone(Id64 zone) { Message = new MessageCyclic(); MessageErrors = new MessageErrors(); id = zone; _locker = new object(); _answersQueue = new BlockingCollection <Request>(new ConcurrentQueue <Request>()); Task.Run(Executor); }
public void Update(MessageCyclic message) { lock (_locker) { switch (message.Type) { case Messages.CURRENT_DATA: { if (Message.Progress != message.Progress) { Task.Run(() => { Core.Notify($"{{\"id\":\"devices\",\"update\":[\"{id}\",\"progress\"]}}"); }); } if (Message.Mode != message.Mode) { Task.Run(() => { Core.Notify($"{{\"id\":\"devices\",\"update\":[\"{id}\",\"mode\"]}}"); }); } if (Message.Status != message.Status || Message.Id != message.Id || Message.RequestType != message.RequestType) { if (Message.RequestType != message.RequestType) { switch (message.RequestType) { case RequestTypes.WRITING_WEIGHT_TO_DB: _answersQueue.Add(new RequestWeight(message.Status, message.Id, message.RequestType, message.Weight)); break; case RequestTypes.WRITING_TO_DB_OPERATION: _answersQueue.Add(new RequestOperation(message.Status, message.Id, message.RequestType, message.OperationId)); break; case RequestTypes.READY_ACCEPT_OPERATION: _answersQueue.Add(new RequestStatus(message.Status, message.Id, message.RequestType)); break; case RequestTypes.BLOCK_ADDRESS: _answersQueue.Add(new RequestLock(message.Status, message.Id, message.RequestType, message.OperationId, message.Address)); break; case RequestTypes.UNBLOCK_ADDRESS: _answersQueue.Add(new RequestUnlock(message.Status, message.Id, message.RequestType, message.OperationId, message.Address)); break; default: _answersQueue.Add(new RequestStatus(message.Status, message.Id, message.RequestType)); break; } } else { _answersQueue.Add(new RequestStatus(message.Status, message.Id, message.RequestType)); } } Message = message; } break; default: break; } } }