Example #1
0
    //////////////////////////////////////////////////////////////////////
    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);
    }
Example #2
0
    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());
        }
    }
Example #3
0
    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;
    }
Example #4
0
    protected override void OnCurPosChange(TrackerPacket packet)
    {
        CTracker tracker = ConfigMgr.inst().GetTrackerByID((int)packet.m_ID);

        if (tracker == null)
        {
            return;
        }
    }
Example #5
0
    //////////////////////////////////////////////////////////////////////
    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);
    }
Example #6
0
    //////////////////////////////////////////////////////////////////////
    public CTracker GetTrackerByID(int ID)
    {
        CTracker tracker = null;

        lock (m_TrackersByID)
            if (m_TrackersByID.TryGetValue(ID, out tracker))
            {
                return(tracker);
            }
        return(null);
    }
Example #7
0
    //////////////////////////////////////////////////////////////////////
    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);
    }
Example #8
0
    //////////////////////////////////////////////////////////////////////
    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);
    }
Example #9
0
    //////////////////////////////////////////////////////////////////////
    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);
    }
Example #10
0
 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);
 }
Example #11
0
 //////////////////////////////////////////////////////////////////////
 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);
 }
Example #12
0
    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;
        }
    }
Example #13
0
    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);
    }
Example #14
0
    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);
    }
Example #15
0
 //////////////////////////////////////////////////////////////////////
 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);
 }
Example #16
0
    //////////////////////////////////////////////////////////////////////////
    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;
    }
Example #17
0
    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;
    }
Example #18
0
    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;
    }