Ejemplo n.º 1
0
 private void Log(AaMiDeMessage message)
 {
     using (var writer = new StringWriter())
     {
         message.Log(writer);
         _output.WriteLine(writer.ToString());
     }
 }
Ejemplo n.º 2
0
        private T Decode <T>(string hex) where T : AaMiDeMessage
        {
            var data = HexEncoding.HexToByte(hex.Replace(" ", String.Empty));
            var rfpConnectionTracker = _reassembler.Get(new RfpIdentifier(new byte[6]));

            if (data.Length >= 7)
            {
                var mac = rfpConnectionTracker.Get(data[6]);
                if (!mac.IsConnected)
                {
                    mac.Open(new MacConIndPayload(new byte[4]));
                }
            }
            var message = AaMiDeMessage.Create(data, rfpConnectionTracker);

            return(Assert.IsType <T>(message));
        }
Ejemplo n.º 3
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;
            }