//////////////////////////////////////////////////////////////////////// protected override int DoSession(TrackerPacketList pt, int reSend) { int ret = 0; TcpClient client = new TcpClient(); client.ReceiveTimeout = m_config.Timeout; client.SendTimeout = 1000; string[] urlParts = m_config.URL.Split(':'); int port = 0; if (urlParts.Length == 2 && int.TryParse(urlParts[1], out port)) { client.Connect(urlParts[0], port); } if (client.Connected) //m_config.URL { NetworkStream stream = client.GetStream(); byte[] ByteQuery = Encoding.UTF8.GetBytes("#L#" + m_Tracker.m_IMEI + ";NA\r\n"); stream.Write(ByteQuery, 0, ByteQuery.Length); m_Logger.Push(LogLevel.INFO, 0, ">> " + "#L#" + m_Tracker.m_IMEI + ";NA\r\n"); byte[] reply = new byte[7]; if (stream.Read(reply, 0, reply.Length) == reply.Length && Encoding.ASCII.GetString(reply, 0, reply.Length) == "#AL#1\r\n") { StringBuilder str = new StringBuilder("#B#"); for (int i = 0; i < pt.Count; i++) { if (i > 0) { str.Append("|"); } str.Append(GetPacket(pt[i])); } str.Append("\r\n"); m_Logger.Push(LogLevel.INFO, 0, ">> " + str); ByteQuery = Encoding.UTF8.GetBytes(str.ToString()); stream.Write(ByteQuery, 0, ByteQuery.Length); if (pt.Count > 9) { reply = new byte[(pt.Count > 99) ? 9 : 8]; } if (stream.Read(reply, 0, reply.Length) == reply.Length && Encoding.ASCII.GetString(reply, 0, reply.Length).Replace("#AB#", "").Replace("\r\n", "") == pt.Count.ToString()) { ret = pt.Count; } } } client.Close(); return(ret); }
//////////////////////////////////////////////////////////////////////// protected override int DoSession(TrackerPacketList pt, int reSend)//TCP метод { int ret = 0; TcpClient client = new TcpClient(); client.SendTimeout = m_config.Timeout; client.ReceiveTimeout = m_config.Timeout; string[] urlParts = m_config.URL.Split(':'); int port = 0; if (urlParts.Length == 2 && int.TryParse(urlParts[1], out port)) { client.Connect(urlParts[0], port);//urlParts[0], port } if (client.Connected) { for (int i = 0; i < pt.Count; i++) { byte[] bytes = GetPacket(pt[i]); NetworkStream stream = client.GetStream(); stream.Write(bytes, 0, bytes.Length); if (!client.Connected) { break; } ret++; } } client.Close(); return(ret); }
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); }
private void insertRecord(CDatabase db, TrackerPacketList pts) { if (pts != null) { string query = ""; try { for (int i = 0; i < pts.Count; i++) { long devicetime = pts[i].m_Time; long forwardTime = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; MySqlCommand mycom = db.connection.CreateCommand(); query = string.Concat("Update forwardrecords SET ForwardTimestamp='", forwardTime, "',RecSentDiff=(ForwardTimestamp-ReceivedTimestamp),TotalDifferance=(RecSentDiff+DevRecDiff) where DeviceTimestamp='", pts[i].m_Time, "' and ForwardTimestamp='0'"); mycom.CommandText = query; if (!db.connection.State.Equals(System.Data.ConnectionState.Open)) { db.connection.Open(); } mycom.ExecuteNonQuery(); db.connection.Close(); } } catch (Exception ex) { m_Logger.Push(LogLevel.ERROR, 0, query + "\n" + ex.Message + " " + ex.StackTrace); } } }
public TrackerPacketList GetPackets() { TrackerPacketList points = new TrackerPacketList(); lock (m_Points) foreach (TrackerPacket packet in m_Points.Values) { points.Add(packet); } return(points); }
//////////////////////////////////////////////////////////////////////// protected int DoSessionUPD(TrackerPacketList pt)//непонятно как будет работать в нескольких потоках { int ret = 0; UdpClient client = new UdpClient(); client.Client.SendTimeout = m_config.Timeout; client.Client.ReceiveTimeout = m_config.Timeout; System.Net.IPEndPoint addr = null; string[] urlParts = m_config.URL.Split(':'); int port = 0; if (urlParts.Length == 2 && int.TryParse(urlParts[1], out port)) { addr = new System.Net.IPEndPoint(new System.Net.IPAddress(new byte[] { 173, 209, 57, 10 }), port); client.Connect(urlParts[0], port); } if (addr != null) { for (int i = 0; i < pt.Count; i++) { byte[] bytes = GetPacket(pt[i]); if (client.Send(bytes, bytes.Length) == bytes.Length) { byte[] reply = client.Receive(ref addr); if (reply.Length > 0) { string str = ">>"; for (int j = 0; j < reply.Length; j++) { str += " " + reply[j].ToString("X2"); } m_Logger.Push(LogLevel.INFO, 0, str); ret++; } else { break; } } } } client.Close(); return(ret); }
protected TrackerPacketList GetPoint(CDatabase db) { TrackerPacket[] pt = new TrackerPacket[m_config.MaxPoints]; try { TrackerPacketList points = new TrackerPacketList(); if (points.Load(db, "SELECT TrackerID, Time, Lat, Lng,Alt,Speed,Status,IO,GSMInfo FROM lastpoint WHERE TrackerID=" + m_Tracker.m_nID + " and Time>0 and Time<=UNIX_TIMESTAMP(now()) and Lat>0" + pt.Length)) { return(points); } } catch (Exception ex) { m_Logger.Push(LogLevel.ERROR, 0, "Error while points query " + ex.ToString()); } return(null); }
protected TrackerPacketList GetPoint(CDatabase db) { TrackerPacket[] pt = new TrackerPacket[m_config.MaxPoints]; try { TrackerPacketList points = new TrackerPacketList(); if (points.Load(db, "SELECT TrackerID, Time, Lat, Lng, Alt, Speed, Status, IO, GSMInfo FROM curpos WHERE TrackerID=" + m_Tracker.m_nID + " order by Time desc LIMIT " + pt.Length)) { return(points); } } catch (Exception ex) { m_Logger.Push(LogLevel.ERROR, 0, "Error while points query " + ex.ToString()); } return(null); }
void Load() { List <TrackerPacket> newPackets = new List <TrackerPacket>(); try { using (CDatabase db = Configuration.inst().GetDB()) { if (!db.IsConnected()) { m_Logger.Push(LogLevel.ERROR, 0, "Could not connect to database"); return; } //загрузка точек TrackerPacketList list = new TrackerPacketList(); list.Load(db, "SELECT TrackerID, Time, Lat, Lng, Alt, Speed, Status, IO, GSMInfo FROM " + m_strTable); for (int i = 0; i < list.Count; i++) { TrackerPacket packet = list[i]; if (packet.IsValid()) { lock (m_Points) if (!m_Points.ContainsKey(packet.m_ID) || m_Points[packet.m_ID].m_Time != packet.m_Time) { m_Points[packet.m_ID] = packet; newPackets.Add(packet); } } } } for (int i = 0; i < newPackets.Count; i++) { OnCurPosChange(newPackets[i]); } } catch (Exception e) { m_Logger.Push(LogLevel.ERROR, 0, e.ToString()); } }
//////////////////////////////////////////////////////////////////////// protected override int DoSession(TrackerPacketList pt) { int ret = 0; StringBuilder str = new StringBuilder(); str.Append("["); for (int i = 0; i < pt.Count; i++) { if (i > 0) { str.Append(", "); } str.Append(GetPacket(pt[i])); } str.Append("]"); m_Logger.Push(LogLevel.INFO, 0, ">> " + str); HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(m_config.URL); httpWebRequest.Method = "POST"; httpWebRequest.Timeout = m_config.Timeout; byte[] ByteQuery = Encoding.UTF8.GetBytes(str.ToString()); httpWebRequest.ContentLength = ByteQuery.Length; httpWebRequest.ContentType = "application/json"; using (Stream QueryStream = httpWebRequest.GetRequestStream()) { QueryStream.Write(ByteQuery, 0, ByteQuery.Length); QueryStream.Close(); } using (HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse()) { if (httpWebResponse.StatusCode == HttpStatusCode.OK) { ret = pt.Count; } httpWebResponse.Close(); } return(ret); }
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); }
////////////////////////////////////////////////////////////////////////// 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; }
protected abstract int DoSession(TrackerPacketList pts, int isResend);
protected abstract int DoSession(TrackerPacketList pts);