private void SendNextMessage(NandakaDevice device) { MasterSession session = _deviceSessions[device.Address]; ISpecificMessage specificMessage = default; try { if (device.TryGetSpecific(out specificMessage)) { session.ProcessSpecificMessage(specificMessage); } else { session.ProcessNextMessage(); } _dispatcher.OnMessageReceived(device); } catch (DeviceNotRespondException deviceNotRespondException) { _log.AppendMessage(LogMessageType.Warning, deviceNotRespondException.Message); _dispatcher.OnErrorOccured(device, DeviceError.NotResponding); } catch (InvalidAddressException invalidAddressException) { _log.AppendMessage(LogMessageType.Error, invalidAddressException.Message); _dispatcher.OnUnexpectedDeviceResponse(device, invalidAddressException.ReceivedAddress); } catch (InvalidMessageException invalidMessageException) { _log.AppendMessage(LogMessageType.Error, invalidMessageException.ToString()); _dispatcher.OnErrorOccured(device, DeviceError.WrongPacketData); } }