////////////////////////////////////////////////////////////////////// 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 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); }
////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// 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"); }
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"); }
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); }
////////////////////////////////////////////////////////////////////////// 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); }
////////////////////////////////////////////////////////////////////////// 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); }
////////////////////////////////////////////////////////////////////// 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 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"); }
////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// 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(); }
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()); } }
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); }
////////////////////////////////////////////////////////////////////// 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); }
////////////////////////////////////////////////////////////////////////// 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 LogEvent(LogLevel loglevel, string strMessage) { m_Logger.Push(loglevel, m_nID, strMessage); }
////////////////////////////////////////////////////////////////////////// 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; }
////////////////////////////////////////////////////////////////////////// public LogsCleaner(LogItemQueue logger) { m_Logger = logger; m_Timer = new Timer(Tick, null, 200000, 86400000);//раз в день m_Logger.Push(LogLevel.WARNING, 0, "LogsCleaner started"); }