Exemple #1
0
 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);
 }
Exemple #2
0
        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;
                }
            }
        }