Пример #1
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);
    }
Пример #2
0
 public Connection(LogItemQueue logger, ServerCfg config)
 {
     m_Logger = logger;
     m_config = config;
     m_Logger.Push(LogLevel.WARNING, 0, "Client started");
     m_Timer = new Timer(new TimerCallback(Tick), null, 1000, 100);
 }
Пример #3
0
    //////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////
    public GPSPointQueue(LogItemQueue logger)
    {
        m_Logger         = logger;
        m_FlushDataTimer = new Timer(new TimerCallback(FlushData), null, 20000, 10000);

        m_Logger.Push(LogLevel.WARNING, 0, "GPSPointQueue started");
    }
Пример #4
0
    public ConfigMgr(LogItemQueue logger)
    {
        m_Logger            = logger;
        m_ReloadConfigTimer = new Timer(new TimerCallback(ReloadConfig), null, 2000, 5 * 60000);

        m_Logger.Push(LogLevel.WARNING, 0, "ConfigMgr started");
    }
Пример #5
0
 protected bool DeletePoint(CDatabase db, TrackerPacketList pts)
 {
     try
     {
         using (MySqlCommand cmd = new MySqlCommand("UPDATE Points SET Send = Send | " + (1 << m_config.UID) + " WHERE TrackerID = ?TrackerID AND Time = ?Time", db.connection))
             using (MySqlTransaction trans = db.connection.BeginTransaction())
             {
                 cmd.Parameters.Add("?TrackerID", MySqlDbType.UInt32);
                 cmd.Parameters.Add("?Time", MySqlDbType.UInt32);
                 for (int i = 0; i < pts.Count; i++)
                 {
                     cmd.Parameters["?TrackerID"].Value = pts[i].m_ID;
                     cmd.Parameters["?Time"].Value      = pts[i].m_Time;
                     cmd.ExecuteNonQuery();
                 }
                 trans.Commit();
             }
         for (int i = 0; i < pts.Count; i++)
         {
             decimal val = 0;
             pts[i].GetInput("ALARM", out val);
             m_config.SetAlarmState(m_Tracker, val > 0);
         }
         return(true);
     }
     catch (Exception ex)
     {
         m_Logger.Push(LogLevel.ERROR, 0, "Ошибка удаления точки " + ex.ToString());
     }
     return(false);
 }
Пример #6
0
    //////////////////////////////////////////////////////////////////////////
    bool SendMessage(SmtpClient client, Email mail)
    {
        try
        {
            string addr = mail.m_strAddress.Replace(";", ",");
            addr = addr.Replace(" ", "");

            m_Logger.Push(LogLevel.INFO, 0, "Sending message: " + addr + "->" + mail.m_strMessage);

            MailMessage msg = new MailMessage(Configuration.inst().Email.From, addr, Configuration.inst().Email.Title, mail.m_strMessage);
            client.Send(msg);
            return(true);
        }
        catch (Exception ex)
        {
            m_Logger.Push(LogLevel.ERROR, 0, ex.ToString());
        }
        return(false);
    }
Пример #7
0
    //////////////////////////////////////////////////////////////////////////
    bool SendMessage(SmtpClient client, Email mail)
    {
        try
        {
            string addr = mail.m_strAddress.Replace(";", ",");
            addr = addr.Replace(" ", "");

            m_Logger.Push(LogLevel.INFO, 0, "Sending message: " + addr + "->" + mail.m_strMessage);

            MailMessage msg = new MailMessage("*****@*****.**", addr, mail.m_strSubject, mail.m_strMessage);
            client.Send(msg);
            return(true);
        }
        catch (Exception ex)
        {
            m_Logger.Push(LogLevel.ERROR, 0, ex.ToString());
        }
        return(false);
    }
Пример #8
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);
    }
Пример #9
0
    //////////////////////////////////////////////////////////////////////////
    void Tick(object obj)
    {
        m_Logger.Push(LogLevel.INFO, 0, "Clearing DB......");
        try
        {
            DateTime dt1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
            using (CDatabase db = Configuration.inst().GetDB())
            {
                if (!db.IsConnected())
                {
                    m_Logger.Push(LogLevel.ERROR, 0, "Cant connect to db");
                    return;
                }

                DateTime dtNow = DateTime.Now;
                long     now   = (dtNow.ToFileTime() - dt1970.ToFileTime()) / 10000000;
                long     time  = now - 86400;
                using (MySqlCommand cmd = new MySqlCommand("UPDATE events SET status = status | 1 where status = 2 AND Time < " + time, db.connection))
                    cmd.ExecuteNonQuery();

                CTracker[] trackers = Global.m_ConfigMgr.GetTrackers();
                for (int i = 0; i < trackers.Length; i++)
                {
                    time = now - trackers[i].m_nDaysToStore * 86400;

                    //удалить выполненные
                    Thread.Sleep(3000);
                    using (MySqlCommand cmd =
                               new MySqlCommand("DELETE FROM Points WHERE TrackerID = " + trackers[i].m_nID + " AND Time < " + time + ";" +
                                                "DELETE FROM Events WHERE TrackerID = " + trackers[i].m_nID + " AND Time < " + time + ";", db.connection))
                        cmd.ExecuteNonQuery();
                }
            }
        }
        catch (Exception e)
        {
            m_Logger.Push(LogLevel.ERROR, 0, e.ToString());
        }
        m_Logger.Push(LogLevel.INFO, 0, "Old data deleted");
    }
Пример #10
0
    //////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////
    void Listen(object me)
    {
        try
        {
            m_Logger.Push(LogLevel.WARNING, 0, "Server " + ToString() + " started at " + m_endPoint.ToString());

            m_Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            m_Listener.Bind(m_endPoint);
            m_Listener.Listen(100);
            while (m_Listener != null)
            {
                m_evtAcceptConnection.Reset();
                m_Listener.BeginAccept(new AsyncCallback(AcceptCallback), m_Listener);
                m_evtAcceptConnection.WaitOne();
            }
        }
        catch (Exception e)
        {
            m_Logger.Push(LogLevel.ERROR, 0, "Listen: " + e.ToString());
        }

        StopListener();
    }
Пример #11
0
    protected void Tick(object obj)
    {
        try
        {
            using (CDatabase db = Configuration.inst().GetDB())
            {
                lock (m_Trackers)
                {
                    m_Trackers.Load(db, "SELECT * FROM Trackers WHERE servergroup in (" + m_strGroups + ")");
                }

                /*if (Configuration.inst().RemoveSendedPoints)
                 * {
                 *  string strQuery = "DELETE FROM Points WHERE TrackerID IN (SELECT ID FROM Trackers WHERE ServerGroup in(" + m_strGroups + ")) AND Send>= AND Send";
                 *  using (MySqlCommand cmd = new MySqlCommand(strQuery, db.connection))
                 *      cmd.ExecuteNonQuery();
                 * }*/
            }
        }
        catch (Exception ex)
        {
            m_Logger.Push(LogLevel.ERROR, 0, "Error " + ex.ToString());
        }
    }
Пример #12
0
    protected bool DeletePoint(CDatabase db, TrackerPacketList pts)
    {
        try
        {
            using (MySqlCommand cmd = new MySqlCommand("UPDATE Points SET Send = Send | " + (1 << m_config.UID) + " ,ForwardTime=case when ForwardTime=0 then UNIX_TIMESTAMP(now()) else ForwardTime end,NTS=NTS+1,VehicleStatus=case when speed>0 then 1 else 0 end WHERE TrackerID = ?TrackerID AND Time = ?Time", db.connection))
            {
                using (MySqlTransaction trans = db.connection.BeginTransaction())
                {
                    try {
                        cmd.Parameters.Add("?TrackerID", MySqlDbType.UInt64);
                        cmd.Parameters.Add("?Time", MySqlDbType.UInt32);
                        for (int i = 0; i < pts.Count; i++)
                        {
                            cmd.Parameters["?TrackerID"].Value = pts[i].m_ID;
                            cmd.Parameters["?Time"].Value      = pts[i].m_Time;
                            cmd.ExecuteNonQuery();
                        }
                        trans.Commit();
                    }
                    catch (Exception ex)
                    {
                        trans.Rollback();
                    }
                }
            }
            for (int i = 0; i < pts.Count; i++)
            {
                decimal val = 0;
                pts[i].GetInput("ALARM", out val);
                m_config.SetAlarmState(m_Tracker, val > 0);
            }

            return(true);
        }
        catch (Exception ex)
        {
            m_Logger.Push(LogLevel.ERROR, 0, "Unable To send Data " + ex.Message + " " + ex.StackTrace);
        }
        return(false);
    }
Пример #13
0
 //////////////////////////////////////////////////////////////////////
 public bool PushPacket(TrackerPacket packet)
 {
     try
     {
         CTracker tracker = Global.m_ConfigMgr.GetTrackerByIMEI(packet.m_ID);
         if (tracker != null)
         {
             packet.m_ID = tracker.m_nID;
             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);
 }
Пример #14
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;
    }
Пример #15
0
 //////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////
 protected void LogEvent(LogLevel loglevel, string strMessage)
 {
     m_Logger.Push(loglevel, m_nID, strMessage);
 }
Пример #16
0
    //////////////////////////////////////////////////////////////////////////
    void Tick(object obj)
    {
        if (m_bRunning)
        {
            return;
        }
        m_bRunning = true;
        try
        {
            TrackerPacketList list = new TrackerPacketList();
            lock (m_Points)
            {
                foreach (TrackerPacket packet in m_Points4DB.Values)
                {
                    list.Add(packet);
                }
                m_Points4DB.Clear();
            }

            if (list.Count > 0)
            {
                using (CDatabase db = Configuration.inst().GetDB())
                {
                    if (db.IsConnected())
                    {
                        using (MySqlCommand cmdUpdate = new MySqlCommand("UPDATE " + m_strTable + " SET Time=?Time, Lat=?Lat, Lng=?Lng, Status=?Status, Speed=?Speed, Alt=?Alt, IO=?IO, GSMInfo=?GSMInfo WHERE TrackerID = ?ID AND Time <= ?Time", db.connection))
                        {
                            cmdUpdate.Parameters.Add("?ID", MySqlDbType.Int32);
                            cmdUpdate.Parameters.Add("?Time", MySqlDbType.Int32);
                            cmdUpdate.Parameters.Add("?Lat", MySqlDbType.Float);
                            cmdUpdate.Parameters.Add("?Lng", MySqlDbType.Float);
                            cmdUpdate.Parameters.Add("?Alt", MySqlDbType.Int32);
                            cmdUpdate.Parameters.Add("?Speed", MySqlDbType.Int32);
                            cmdUpdate.Parameters.Add("?Status", MySqlDbType.Int32);
                            cmdUpdate.Parameters.Add("?IO", MySqlDbType.Blob);
                            cmdUpdate.Parameters.Add("?GSMInfo", MySqlDbType.UInt64);
                            using (MySqlTransaction trans = db.connection.BeginTransaction())
                            {
                                for (int i = 0; i < list.Count; i++)
                                {
                                    if (!list[i].Write2DB(cmdUpdate))
                                    {
                                        break;
                                    }
                                }
                                trans.Commit();
                            }
                        }
                    }
                    else
                    {
                        m_Logger.Push(LogLevel.ERROR, 0, "Could not connect to database");
                    }
                }
            }
        }
        catch (Exception e)
        {
            m_Logger.Push(LogLevel.ERROR, 0, e.ToString());
        }
        m_bRunning = false;
    }
Пример #17
0
 //////////////////////////////////////////////////////////////////////////
 public LogsCleaner(LogItemQueue logger)
 {
     m_Logger = logger;
     m_Timer  = new Timer(Tick, null, 200000, 86400000);//раз в день
     m_Logger.Push(LogLevel.WARNING, 0, "LogsCleaner started");
 }