////////////////////////////////////////////////////////////////////// public bool PushPacketWithID(TrackerPacket packet) { try { CTracker tracker = ConfigMgr.inst().GetTrackerByID((int)packet.m_ID); if (tracker != null) { if (packet.IsValid()) { lock (m_Queue) m_Queue.Enqueue(packet); if (packet.IsFixed(true)) { CurPosMgr.inst().AddPoint(packet); } LastPointMgr.inst().AddPoint(packet); } return(true); } } catch (Exception ex) { m_Logger.Push(LogLevel.ERROR, 0, "PushPacket:" + ex.ToString()); } return(false); }
void ClearLogsForTracker(CTracker tracker) { int now = CTime.GetTime(DateTime.UtcNow); try { using (CDatabase db = Configuration.inst().GetDB()) { if (!db.IsConnected()) { m_Logger.Push(LogLevel.ERROR, 0, "Не удалось соединиться с БД"); return; } int storedatatime = now - tracker.m_nDaysToStore * 86400; using (MySqlCommand cmd = new MySqlCommand("DELETE FROM Points WHERE TrackerID = " + tracker.m_nID + " AND Time < " + storedatatime, db.connection)) cmd.ExecuteNonQuery(); /*string types = ""; * int storeunusedeventstime = now - 10 * 86400; * for (int i = 0; i < CEventList.UsefulEvents.Length; i++) * types += ((i > 0) ? "," : "") + (int)CEventList.UsefulEvents[i];*/ using (MySqlCommand cmd = new MySqlCommand("DELETE FROM Events WHERE TrackerID = " + tracker.m_nID + " AND Time < " + storedatatime + " AND Status=3", db.connection)) cmd.ExecuteNonQuery(); } } catch (Exception e) { m_Logger.Push(LogLevel.ERROR, 0, e.ToString()); } }
public CTracker(CTracker tracker) { m_nID = tracker.m_nID; m_nUserID = tracker.m_nUserID; m_IMEI = tracker.m_IMEI; m_strName = tracker.m_strName; m_strComment = tracker.m_strComment; m_strDeviceType = tracker.m_strDeviceType; m_strFlags = tracker.m_strFlags; m_nIconID = tracker.m_nIconID; m_strColor = tracker.m_strColor; m_strPhone = tracker.m_strPhone; m_Timeout = tracker.m_Timeout; m_ParkRadius = tracker.m_ParkRadius; m_MinParkTime = tracker.m_MinParkTime; m_MaxSpeed = tracker.m_MaxSpeed; m_AlarmParkTime = tracker.m_AlarmParkTime; m_fFuelExpensePerKm = tracker.m_fFuelExpensePerKm; m_fFuelExpensePerHr = tracker.m_fFuelExpensePerHr; m_fMinDrain = tracker.m_fMinDrain; m_fMinDrainSpeed = tracker.m_fMinDrainSpeed; m_nDaysToStore = tracker.m_nDaysToStore; m_MinIdleTime = tracker.m_MinIdleTime; m_dtCreateDate = tracker.m_dtCreateDate; //m_dtInstallDate = tracker.m_dtInstallDate; m_strStateNumber = tracker.m_strStateNumber; //m_strInstallerName = tracker.m_strInstallerName; }
protected override void OnCurPosChange(TrackerPacket packet) { CTracker tracker = ConfigMgr.inst().GetTrackerByID((int)packet.m_ID); if (tracker == null) { return; } }
////////////////////////////////////////////////////////////////////// public bool SetOnline(long IMEI, uint sessid) { CTracker tracker = (IMEI > 0) ? ConfigMgr.inst().GetTrackerByIMEI(IMEI) : null; if (tracker != null) { lock (m_SessionTrackers) m_SessionTrackers[sessid] = tracker.m_nID; } return(tracker != null); }
////////////////////////////////////////////////////////////////////// public CTracker GetTrackerByID(int ID) { CTracker tracker = null; lock (m_TrackersByID) if (m_TrackersByID.TryGetValue(ID, out tracker)) { return(tracker); } return(null); }
////////////////////////////////////////////////////////////////////// public bool PushPacket(TrackerPacket packet) { CTracker tracker = (packet.m_ID > 0) ? ConfigMgr.inst().GetTrackerByIMEI(packet.m_ID) : null; if (tracker != null) { packet.m_ID = tracker.m_nID; return(PushPacketWithID(packet)); } return(false); }
////////////////////////////////////////////////////////////////////// public bool SetOnline(long IMEI, uint sessid) { CTracker tracker = Global.m_ConfigMgr.GetTrackerByIMEI(IMEI); if (tracker != null) { lock (m_SessionTrackers) m_SessionTrackers[sessid] = tracker.m_nID; } return(tracker != null); }
////////////////////////////////////////////////////////////////////// public CTracker GetTrackerByIMEI(long IMEI) { CTracker tracker = null; lock (m_TrackersByIMEI) if (m_TrackersByIMEI.TryGetValue(IMEI, out tracker)) { return(tracker); } m_Logger.Push(LogLevel.WARNING, 0, "Invalid IMEI: " + IMEI); return(null); }
public bool Delete(CDatabase db, CTracker tracker, int time) { try { using (MySqlCommand cmd = new MySqlCommand("DELETE FROM Points WHERE TrackerID=" + tracker.m_nID + " AND Time=" + time, db.connection)) cmd.ExecuteNonQuery(); } catch (Exception e) { Debug.Assert(false, e.ToString()); return(false); } return(true); }
////////////////////////////////////////////////////////////////////// public CTracker[] GetTrackers() { CTracker[] trackers = null; lock (m_TrackersByID) { trackers = new CTracker[m_TrackersByID.Count]; int count = 0; foreach (CTracker tracker in m_TrackersByID.Values) { trackers[count++] = tracker; } } return(trackers); }
public void SetAlarmState(CTracker tracker, bool state) { lock (m_TrackersAlarmState) { if (!m_TrackersAlarmState.ContainsKey(tracker.m_nID)) { m_TrackersAlarmState[tracker.m_nID] = false; } if (state && !m_TrackersAlarmState[tracker.m_nID]) { EmailSender.inst().AddMessage(AlarmEmailAddr, tracker.m_strName + " (" + tracker.m_IMEI + ") " + AlarmEmailContent); } m_TrackersAlarmState[tracker.m_nID] = state; } }
public bool Load(CDatabase db, CTracker tracker, int TimeFrom, int TimeTill) { DateTime dtTime = DateTime.Now; if (Load(db, new DBQuery("SELECT TrackerID, Time, Lat, Lng, Alt, Speed, Status, IO, GSMInfo FROM points WHERE TrackerID = " + tracker.m_nID + " AND Time >= " + TimeFrom + " AND Time <= " + TimeTill))) { try { if (Count > 0) { string pointQuery = "SELECT TrackerID, Time, Lat, Lng, Alt, Speed, Status, IO, GSMInfo FROM points WHERE TrackerID=" + tracker.m_nID + " AND Time>=" + (this[0].m_Time - tracker.m_Timeout) + " AND Time<" + this[0].m_Time + " ORDER BY Time DESC LIMIT 1"; using (MySqlCommand pointCmd = new MySqlCommand(pointQuery, db.connection)) { TrackerPacket packet = new TrackerPacket(); using (MySqlDataReader reader = pointCmd.ExecuteReader()) if (reader.Read() && packet.Load(reader)) { packet.m_Time = TimeFrom; this.Insert(0, packet); } } pointQuery = "SELECT TrackerID, Time, Lat, Lng, Alt, Speed, Status, IO, GSMInfo FROM points WHERE TrackerID=" + tracker.m_nID + " AND Time>" + this[this.Count - 1].m_Time + " AND Time<=" + (this[this.Count - 1].m_Time + tracker.m_Timeout) + " ORDER BY Time ASC LIMIT 1"; using (MySqlCommand pointCmd = new MySqlCommand(pointQuery, db.connection)) { TrackerPacket packet = new TrackerPacket(); using (MySqlDataReader reader = pointCmd.ExecuteReader()) if (reader.Read() && packet.Load(reader)) { packet.m_Time = TimeTill; Add(packet); } } } return(true); } catch (Exception ex) { Debug.Assert(false, ex.ToString()); } } return(false); }
public void Add(int ID, CTracker tracker) { if (!ContainsKey(ID)) { this[ID] = new CTrackerList(); } CTrackerList trackers = this[ID]; for (int i = 0; i < trackers.Count; i++) { if (trackers[i].m_nID == tracker.m_nID) { return; } } trackers.Add(tracker); }
////////////////////////////////////////////////////////////////////// public bool PushPacketWithID(TrackerPacket packet) { try { CTracker tracker = Global.m_ConfigMgr.GetTrackerByID(packet.m_ID); if (tracker != null) { if (packet.IsValid()) { lock (m_Queue) m_Queue.Enqueue(packet); } return(true); } } catch (Exception ex) { m_Logger.Push(LogLevel.ERROR, 0, "PushPacket:" + ex.ToString()); } return(false); }
////////////////////////////////////////////////////////////////////////// void Tick(object obj) { if (m_bRunning) { return; } m_bRunning = true; int now = CTime.GetTime(DateTime.UtcNow); if (m_LastTrackerListLoadTime < now - 12 * 3600 && m_nTrackerIndex >= m_Trackers.Count) { m_Trackers = ConfigMgr.inst().GetTrackers(); m_LastTrackerListLoadTime = now; m_nTrackerIndex = 0; ClearCommonLogs(); int t = CTime.GetTime(DateTime.UtcNow); if (t - now > 1) { m_Logger.Push(LogLevel.WARNING, 0, "Common data cleared for " + (t - now) + " sec"); } } now = CTime.GetTime(DateTime.UtcNow); if (m_nTrackerIndex < m_Trackers.Count) { CTracker tracker = m_Trackers[m_nTrackerIndex++]; ClearLogsForTracker(tracker); int t = CTime.GetTime(DateTime.UtcNow); if (t - now > 1) { m_Logger.Push(LogLevel.WARNING, 0, "Data for " + tracker.GetDesc() + " cleared for " + (t - now) + " sec"); } } m_bRunning = false; }
protected void Tick(object obj) { int cnt = 0; if (m_bRunning) { return; } m_bRunning = true; try { m_Tracker = m_config.GetNextTracker(); if (m_Tracker == null) { m_bRunning = false; return; } TrackerPacketList pts; DateTime start = DateTime.UtcNow; using (CDatabase db = Configuration.inst().GetDB()) { pts = GetPoint(db); if (pts != null && pts.Count > 0) { DateTime query = DateTime.UtcNow; DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); dt = dt.AddTicks(pts[0].m_Time * 10000000); if (dt <= System.DateTime.UtcNow) { cnt = DoSession(pts); } DateTime delete = DateTime.UtcNow; if (cnt == pts.Count && DeletePoint(db, pts)) { m_Logger.Push(LogLevel.INFO, 0, cnt + " point sent of " + pts.Count + ".Times for query/session/delete:" + (query - start).TotalMilliseconds + "/" + (delete - query).TotalMilliseconds + "/" + (DateTime.UtcNow - delete).TotalMilliseconds); m_LastFailTime = 0; } if (cnt == 0 && m_LastFailTime == 0) { m_LastFailTime = CTime.GetTime(DateTime.UtcNow); } } insertRecord(db, pts); } } catch (Exception ex) { m_Logger.Push(LogLevel.ERROR, 0, m_Tracker.m_IMEI + " Error sending points " + ex.ToString()); if (m_LastFailTime == 0) { m_LastFailTime = CTime.GetTime(DateTime.UtcNow); } } try { if (m_LastFailTime > 0 && CTime.GetTime(DateTime.UtcNow) > m_LastFailTime + m_config.MaxFailTimeBeforeEmail) { m_LastFailTime = -1; EmailSender.inst().AddMessage(m_config.EmailAddr, m_config.EmailContent); } } catch (Exception ex) { m_Logger.Push(LogLevel.ERROR, 0, m_Tracker.m_IMEI + " Error in connection " + ex.ToString()); } m_bRunning = false; }
protected void Tick(object obj) { int cnt = 0; if (m_bRunning) { return; } m_bRunning = true; try { m_Tracker = m_config.GetNextTracker(); if (m_Tracker == null) { m_bRunning = false; return; } TrackerPacketList pts; DateTime start = DateTime.UtcNow; using (CDatabase db = Configuration.inst().GetDB()) { pts = GetPoint(db); if (pts != null && pts.Count > 0) { DateTime dt = CTime.GetTime(Convert.ToInt64(pts[0].m_Time)); if (dt <= DateTime.UtcNow) { if (((System.DateTime.UtcNow.AddMinutes(-3)) > dt && pts[0].m_Speed == 0) && m_config.StaticDataResend) { cnt = DoSession(pts, 1); } else { if (dt > (System.DateTime.UtcNow.AddMinutes(-3))) { cnt = DoSession(pts, 0); } } } else { EmailSender.inst().AddMessage(m_config.EmailAddr, pts[0].m_ID + " Is Sending Future Time Stamp Data"); } if (System.DateTime.Now > System.DateTime.UtcNow.AddHours(5).AddMinutes(30)) { EmailSender.inst().AddMessage(m_config.EmailAddr, System.Net.Dns.GetHostName() + " Has Wrong Date Time Setting"); } DateTime delete = DateTime.UtcNow; if (cnt == pts.Count && DeletePoint(db, pts)) { m_Logger.Push(LogLevel.INFO, 0, cnt + " point sent of " + pts.Count + ".Times for query/session/delete:" + (DateTime.UtcNow - start).TotalMilliseconds + "/" + (delete - DateTime.UtcNow).TotalMilliseconds + "/" + (DateTime.UtcNow - delete).TotalMilliseconds); m_LastFailTime = 0; } if (cnt == 0 && m_LastFailTime == 0) { m_LastFailTime = CTime.GetTime(DateTime.UtcNow); } } } } catch (Exception ex) { m_Logger.Push(LogLevel.ERROR, 0, m_Tracker.m_IMEI + " Error sending points " + ex.ToString()); if (m_LastFailTime == 0) { m_LastFailTime = CTime.GetTime(DateTime.UtcNow); } } try { if (m_LastFailTime > 0 && CTime.GetTime(DateTime.UtcNow) > m_LastFailTime + m_config.MaxFailTimeBeforeEmail) { m_LastFailTime = -1; EmailSender.inst().AddMessage(m_config.EmailAddr, m_config.EmailContent); } } catch (Exception ex) { m_Logger.Push(LogLevel.ERROR, 0, m_Tracker.m_IMEI + " Error in connection " + ex.ToString()); } m_bRunning = false; }