Example #1
0
    ////////////////////////////////////////////////////////////////////////
    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);
    }
Example #2
0
    ////////////////////////////////////////////////////////////////////////
    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);
    }
Example #3
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);
 }
Example #4
0
 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);
         }
     }
 }
Example #5
0
    public TrackerPacketList GetPackets()
    {
        TrackerPacketList points = new TrackerPacketList();

        lock (m_Points)
            foreach (TrackerPacket packet in m_Points.Values)
            {
                points.Add(packet);
            }
        return(points);
    }
Example #6
0
    ////////////////////////////////////////////////////////////////////////
    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);
    }
Example #7
0
 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);
 }
Example #8
0
 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);
 }
Example #9
0
    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());
        }
    }
Example #10
0
    ////////////////////////////////////////////////////////////////////////
    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);
    }
Example #11
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);
    }
Example #12
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;
    }
Example #13
0
 protected abstract int DoSession(TrackerPacketList pts, int isResend);
Example #14
0
 protected abstract int DoSession(TrackerPacketList pts);