Esempio n. 1
0
 private static String GetEntrada(string tmp)
 {
     try
     {
         var ini = tmp.IndexOf('>');
         var len = (tmp.IndexOf('<', ini) - ini) + 1;
         var msg = tmp.Substring(ini, len);
         if (!msg.Contains(";*"))
         {
             return(msg);
         }
         var chkini  = msg.IndexOf(";*", StringComparison.Ordinal) + 2;
         var chkOrig = Convert.ToInt32(msg.Substring(chkini, 2), 16);
         var chkCalc = GetCheckSum(msg);
         if (chkCalc != chkOrig)
         {
             STrace.Debug(typeof(Parser).FullName, ParserUtils.GetDeviceIdTaip(msg), String.Format("Mensaje con error de checksum: {0}", msg));
             return(null);
         }
         return(msg);
     }
     catch (Exception e)
     {
         STrace.Exception(typeof(Parser).FullName, e, tmp);
         return(null);
     }
 }
Esempio n. 2
0
        public override INode Factory(IFrame frame, int formerId)
        {
            var buffer = GetEntrada(frame.Payload);

            if (String.IsNullOrEmpty(buffer))
            {
                return(null);
            }
            var x = buffer.StartsWith(Reporte.HandShake) ?
                    DataProvider.FindByIMEI(buffer.Split(',')[2], this) :
                    DataProvider.Get(ParserUtils.GetDeviceIdTaip(buffer), this);

            Console.WriteLine("Factory X: " + x.GetDeviceId());
            return(x);
        }
Esempio n. 3
0
        public override INode Factory(IFrame frame, int formerId)
        {
            var buffer = Encoding.ASCII.GetString(frame.Payload, 0, frame.Payload.Length);

            if (String.IsNullOrEmpty(buffer))
            {
                return(null);
            }
            var dev = ParserUtils.GetDeviceIdTaip(buffer);

            if (ParserUtils.IsInvalidDeviceId(dev))
            {
                return(buffer.StartsWith(Reporte.IdReq) ? DataProvider.FindByIMEI(buffer.Substring(5, 15), this) : null);
            }
            return(DataProvider.Get(dev, this));
        }
Esempio n. 4
0
        public override IMessage Decode(IFrame frame)
        {
            var s      = Encoding.ASCII.GetString(frame.Payload, 0, frame.Payload.Length);
            var buffer = GetEntrada(s);

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

            IMessage salida;

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

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

            case Reporte.EventoFg:
                if (ParserUtils.IsInvalidDeviceId(Id))
                {
                    goto case Reporte.SinNodo;
                }
                var bytes = new byte[33];
                Array.Copy(frame.Payload, 4, bytes, 0, 33);
                salida = GetSalida(bytes, this, msgId);
                break;

            case Reporte.EventoGp:
                if (ParserUtils.IsInvalidDeviceId(Id))
                {
                    goto case Reporte.SinNodo;
                }
                salida = GetSalida(buffer, this, msgId, null);
                break;

            case Reporte.SinNodo:
                msgId  = ParserUtils.MsgIdNotSet;    //para no enviar ack sino un query
                salida = new UserMessage(Id, 0).AddStringToSend(">QIME<");
                break;

            case Reporte.IdReq:
                msgId  = ParserUtils.MsgIdNotSet;    //para no enviar ack sino un query
                salida = Mensaje.FactorySetId(msgId, Id, ParserUtils.GetDeviceIdTaip(buffer));
                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);
        }