private async void Channel_OnReceive(object sender, ChannelReceivedEventArgs e) { logger?.LogDebug("SCADA client channel starting receive."); try { MbapHeader header = MbapHeader.Decode(e.Message); RtuPiSystem piSystem = map.GetItem(header.UnitId); if (piSystem == null) { logger?.LogWarning("SCADA client receive cannot find RTU pi-system."); throw new InvalidOperationException("RTU pi-system was not found."); } if (!subscribed.Contains(header.UnitId)) { //subscribe to pi-system for unit id await connection.AddSubscriptionAsync(piSystem.RtuOutputEvent.ToLowerInvariant(), ReceiveOutput); subscribed.Add(header.UnitId); } byte[] msg = mapper.MapIn(e.Message); await connection.SendAsync(piSystem.RtuInputEvent.ToLowerInvariant(), CONTENT_TYPE, msg); MbapHeader mheader = MbapHeader.Decode(msg); //await connection.Monitor.SendInAsync(ModuleType.VRTU.ToString(), e.Message, mheader.TransactionId); } catch (Exception ex) { logger?.LogError($"SCADA client receive error - {ex.Message}"); OnError?.Invoke(this, new AdapterErrorEventArgs(Id, ex)); } }