Ejemplo n.º 1
0
        public void SchemaVersion()
        {
            var data = message.ToArray();

            var decodeMessage = (DecodeMessage)DecodeMessage.Parse(data);

            Assert.Equal(2, decodeMessage.SchemaVersion);
            Assert.Equal("WSJT-X", decodeMessage.Id);
            Assert.True(decodeMessage.New);
            Assert.Equal(TimeSpan.FromSeconds(29820), decodeMessage.SinceMidnight);
            Assert.Equal(-12, decodeMessage.Snr);
            Assert.Equal(0.3, Math.Round(decodeMessage.DeltaTime, 1));
            Assert.Equal(367, decodeMessage.DeltaFrequency);
            Assert.Equal("~", decodeMessage.Mode);
            Assert.Equal("EC1AIJ US2YW KN28", decodeMessage.Message);
            Assert.False(decodeMessage.LowConfidence);
            Assert.False(decodeMessage.OffAir);
        }
Ejemplo n.º 2
0
        public static WsjtxMessage Parse(byte[] datagram)
        {
            if (!CheckMagicNumber(datagram))
            {
                return(null);
            }

            int cur = MAGIC_NUMBER_LENGTH;

            int schemaVersion = DecodeQInt32(datagram, ref cur);
            var messageType   = (MessageType)DecodeQInt32(datagram, ref cur);

            try
            {
                if (schemaVersion == 2)
                {
                    WsjtxMessage result;

                    if (messageType == MessageType.HEARTBEAT_MESSAGE_TYPE)
                    {
                        result = HeartbeatMessage.Parse(datagram);
                    }
                    else if (messageType == MessageType.STATUS_MESSAGE_TYPE)
                    {
                        result = StatusMessage.Parse(datagram);
                    }
                    else if (messageType == MessageType.DECODE_MESSAGE_TYPE)
                    {
                        result = DecodeMessage.Parse(datagram);
                    }
                    else if (messageType == MessageType.CLEAR_MESSAGE_TYPE)
                    {
                        result = ClearMessage.Parse(datagram);
                    }
                    else if (messageType == MessageType.QSO_LOGGED_MESSAGE_TYPE)
                    {
                        result = QsoLoggedMessage.Parse(datagram);
                    }
                    else if (messageType == MessageType.CLOSE_MESSAGE_TYPE)
                    {
                        result = CloseMessage.Parse(datagram);
                    }
                    else if (messageType == MessageType.WSPR_DECODE_MESSAGE_TYPE)
                    {
                        result = WsprDecodeMessage.Parse(datagram);
                    }
                    else if (messageType == MessageType.LOGGED_ADIF_MESSAGE_TYPE)
                    {
                        result = LoggedAdifMessage.Parse(datagram);
                    }
                    else
                    {
                        result = new UnknownMessage();
                    }

                    result.Datagram = datagram;

                    return(result);
                }
            }
            catch (Exception ex)
            {
                throw new ParseFailureException(messageType, datagram, ex);
            }

            throw new NotImplementedException($"Schema version {schemaVersion}, message type {messageType}");
        }