public override string ToString() { return(_identifier.ToHex()); }
public void OnMessage(MessageDirection direction, RfpIdentifier rfp, ReadOnlyMemory <byte> data, DateTimeOffset timestamp) { if (data.IsEmpty) { return; } AaMiDeMessage message; string prefix; MacConnectionTracker reassembler; if (direction == MessageDirection.FromOmm) { reassembler = _ommTracker; prefix = "OMM:"; } else { reassembler = _rfpTracker; prefix = "RFP:"; } try { message = AaMiDeMessage.Create(data, reassembler.Get(rfp)); } catch (Exception ex) { Console.WriteLine($"{timestamp:yyyy/MM/dd HH:mm:ss.fff} {prefix}{rfp} Cannot parse {data.ToHex()}"); Console.WriteLine(ex); return; } if (message is DnmMessage dnm) { if (dnm.Payload is MacDisIndPayload || dnm.DnmType == DnmType.MacDisReq) { RfpConnectionTracker rfpTracker; if (direction == MessageDirection.FromOmm) { rfpTracker = _rfpTracker.Get(rfp); } else { rfpTracker = _ommTracker.Get(rfp); } var nwk = rfpTracker.Get(dnm.MCEI); nwk.Close(); } else if (dnm.Payload is MacConIndPayload macConInd) { RfpConnectionTracker rfpTracker; if (direction == MessageDirection.FromOmm) { rfpTracker = _rfpTracker.Get(rfp); } else { rfpTracker = _ommTracker.Get(rfp); } var nwk = rfpTracker.Get(dnm.MCEI); nwk.Open(macConInd); } } if (_unknown && !message.HasUnknown) { return; } Console.Write($"{timestamp:yyyy/MM/dd HH:mm:ss.fff} {prefix}{rfp} "); message.Log(Console.Out); Console.WriteLine(); if (_logRaw) { Console.Write("\t"); int i = 0; var span = data.Span; for (; i < span.Length - 4; i += 4) { Console.Write(span.Slice(i, 4).ToHex()); Console.Write(' '); } Console.WriteLine(span.Slice(i).ToHex()); } return; }