Example #1
0
 public override string ToString()
 {
     return(_identifier.ToHex());
 }
Example #2
0
            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;
            }