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); } }
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); }