示例#1
0
        public override IMessage Decode(IFrame frame)
        {
            var buffer = AsString(frame);

            if (buffer == null)
            {
                return(null);
            }

            IMessage salida;

            var msgId       = ParserUtils.GetMsgIdTaip(buffer);
            var data        = buffer.Split(';')[0].Split(',');
            var tipoReporte = Reporte.GetTipoReporte(data);

            switch (tipoReporte)
            {
            case Reporte.Nada:
                return(null);

            case Reporte.EventoCq:
            {
                if (ParserUtils.IsInvalidDeviceId(Id))
                {
                    return(null);
                }

                byte entradas;
                int  codEv;
                var  gpsPoint = ParseCq(buffer, out entradas, out codEv, false);                                //TODO chequear que sea en kilometros o knots
                salida = GetSalida(gpsPoint, "00000000", codEv, this, msgId);
                break;
            }

            default:     //es un ack o un mensaje no reconocido, no se responde, solo paso la info arriba
                salida = new UserMessage(Id, msgId);
                //CheckFota(msgId);
                break;
            }
            if ((msgId != ParserUtils.MsgIdNotSet) && (!salida.IsPending()))
            {
                salida.AddStringToSend(BuildAck(buffer));
            }

            return(salida);
        }