private void ProcessSpecificMessage(ISpecificMessage specificMessage) { _log.AppendMessage(LogMessageType.Info, "Processing message as specific message"); _device.OnSpecificMessageReceived(specificMessage); // todo: response on specific message? _log.AppendMessage(LogMessageType.Warning, "Specific messages response has not been sent. Not Implemented"); }
public void ProcessSpecificMessage(ISpecificMessage message) { using (var listener = new MessageListener(_protocol)) { _protocol.SendMessage(message); while (true) { if (!listener.WaitMessage(_dispatcher.RequestTimeout, out IMessage receivedMessage)) { throw new DeviceNotRespondException("Device Not responding"); } if (receivedMessage.Type != MessageType.Response) { continue; } // All high priority messages should be handled in separate thread. if (receivedMessage is HighPriorityMessage) { continue; } if (receivedMessage.SlaveDeviceAddress != _slaveDevice.Address) { _dispatcher.OnUnexpectedDeviceResponse(_slaveDevice, receivedMessage.SlaveDeviceAddress); continue; } if (receivedMessage is IErrorMessage errorMessage) { ProcessErrorMessage(errorMessage); } if (!(receivedMessage is ISpecificMessage response)) { throw new InvalidMetaDataException("Wrong response received"); } _slaveDevice.OnSpecificMessageReceived(response); break; } } }