Exemple #1
0
 private void TesterUT_ExcesoVelocidad(object sender, ExcesoVelocidad pdu)
 {
     if (pdu.CL == 0x01)
     {
         Marshall.User("El dispositivo {0} exedio la velocida maxima velocidad={1}", pdu.IdDispositivo,
                       pdu.VelocidadMaximaAlcanzada);
     }
     else
     {
         Marshall.User("El dispositivo {0} vuelve a velocidad normal. la velocida maxima velocidad alcanzada={1}", pdu.IdDispositivo, pdu.VelocidadMaximaAlcanzada);
     }
 }
Exemple #2
0
        private static bool UrbetrackUT_ExcesoVelocidad(object sender, ExcesoVelocidad pdu)
        {
            var d = Devices.I().FindById(pdu.IdDispositivo);

            if (d == null)
            {
                return(false);
            }

            // si alguna posicion DEL TICKET esta mocha...
            if (pdu.PosicionDeTicket == null || pdu.PosicionDeTicket.Lat == 0 || pdu.PosicionFinal == null || pdu.PosicionFinal.Lat == 0)
            {
                STrace.Debug(typeof(UrbetrackUT).FullName, d.Id, String.Format("CrapReceivedCounter -> Device[{0}]: TICKET[VELOCIDAD EXCEDIDA]/MALFORMACION DE DATOS", d.LogId));
                return(true);
            }

            #region HACK FIX PARA LA VERSION 99 DEL FIRMWARE

            if (d.HackVersion99())
            {
                if (pdu.PosicionDeAviso != null && pdu.PosicionDeAviso.Lat != 0)
                {
                    var diferencia = pdu.PosicionDeTicket.Date - pdu.PosicionDeAviso.Date;

                    STrace.Debug(typeof(UrbetrackUT).FullName, d.Id, String.Format("TICKET[VELOCIDAD EXCEDIDA/DEVICE={0}]: DIFERENCIA CALCULADA {1}", d.LogId, diferencia));

                    if (diferencia.TotalSeconds > 21)
                    {
                        if (QuadTree.QuadTree.i() == null)
                        {
                            return(false);
                        }

                        // esto me indica que aplico el b-u-g
                        var claseAviso  = QuadTree.QuadTree.i().GetPositionClass(pdu.PosicionDeAviso.Lat, pdu.PosicionDeAviso.Lon);
                        var claseTicket = QuadTree.QuadTree.i().GetPositionClass(pdu.PosicionDeTicket.Lat, pdu.PosicionDeTicket.Lon);

                        if (claseAviso == -1 || claseTicket == -1)
                        {
                            return(false);
                        }

                        if (claseAviso == claseTicket)
                        {
                            return(true);
                        }

                        STrace.Debug(typeof(UrbetrackUT).FullName, d.Id, String.Format("TICKET[VELOCIDAD EXCEDIDA/DEVICE={0}/RIDER={1}]: REPARANDO EVENTO MALFORMADO X BUG v99", d.LogId, pdu.RiderIdentifier));

                        pdu.PosicionDeAviso = null;
                    }
                }

                if (pdu.PosicionDeAviso != null && pdu.PosicionDeAviso.Lat != 0)
                {
                    var duracion = pdu.PosicionFinal.Date.Subtract(pdu.PosicionDeAviso.Date).TotalSeconds;

                    if (duracion < 21)
                    {
                        return(true);
                    }
                }
            }

            #endregion

            DecorateFixWithZone(pdu.PosicionDeTicket);
            DecorateFixWithZone(pdu.PosicionDeTicket);
            DecorateFixWithZone(pdu.PosicionFinal);

            if (DataTransportLayer.IsRetransmission(d.Id, pdu.Seq))
            {
                return(false);
            }
            var msg = new SpeedingTicket(d.Id, pdu.Seq)
            {
                StartPoint     = pdu.PosicionDeAviso,
                UserIdentifier = pdu.RiderIdentifier,
                TicketPoint    = pdu.PosicionDeTicket,
                EndPoint       = pdu.PosicionFinal,
                SpeedReached   = Speed.KnotToKm(pdu.VelocidadMaximaAlcanzada),
                SpeedLimit     = Speed.KnotToKm(pdu.VelocidadMaximaPermitida),
                Tiempo         = (pdu.PosicionDeAviso ?? pdu.PosicionDeTicket).GetDate(),
            };
            Dispatcher.Dispatch(msg);
            return(true);
        }