Ejemplo n.º 1
0
 public void OnFeedbackMessage(TrackerFrame frame)
 {
     try
     {
         var gpsLocation = new GpsLocation(frame.MessageBody);
         Logger.InfoFormat("Получены координаты трекера: {0}", gpsLocation.ToString());
         var gpsData = new DataGpsData
         {
             TrackerId          = GpsTrackerData.Id,
             GpsDate            = gpsLocation.Date,
             CreateDate         = DateTime.UtcNow,
             Latitude           = gpsLocation.Latitude,
             LatitudeIndicator  = gpsLocation.LatitudeIndicator,
             Longitude          = gpsLocation.Longitude,
             LongitudeIndicator = gpsLocation.LongitudeIndicator,
             Speed            = gpsLocation.Speed,
             Orientation      = gpsLocation.Orientation,
             AvailabilityData = gpsLocation.AvailabilityData,
             IoState          = gpsLocation.IoState,
             MilePost         = gpsLocation.MilePost,
             MileData         = gpsLocation.MileData,
         };
         DataCrud.CreateGpsData(gpsData);
     }
     catch (Exception ex)
     {
         Logger.Error("Ошибка при обработке полученных координат", ex);
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Disposing
        /// </summary>
        public void Dispose()
        {
            if (!IsDisposed)
            {
                Logger.Info("Остановка трекера...");
                // Сигналим об остановке сервера
                StopEvent.Set();

                // Обновляем состояние подключения трекера
                if (GpsTrackerData != null)
                {
                    GpsTrackerData.ConnectionStatus = TrackerConnectionStatus.Offline.ToString();
                    DataCrud.UpdateGpsTracker(GpsTrackerData);
                }

                // Закрываем соединение
                TcpClient.Close();

                // Ждем максимум 10 секунд пока основной поток остановиться
                var timeElapsed = 0;
                while (DataThread != null && DataThread.IsAlive)
                {
                    Thread.Sleep(100);
                    if (timeElapsed++ == 100)
                    {
                        DataThread.Abort();
                    }
                }

                Logger.Info("Трекер остановлен");

                IsDisposed = true;
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Проверяем есть ли в нашей базе запись о данном трекере
        /// </summary>
        /// <param name="frame"></param>
        protected void CheckHandshake(TrackerFrame frame)
        {
            // Если есть данные по трекеру значит все хорошо
            if (GpsTrackerData != null)
            {
                return;
            }

            using (var dc = new GpsTrackerDataContext())
            {
                var tracker =
                    (from obj in dc.GpsTracker where obj.DeviceId == frame.DeviceIdString select obj).FirstOrDefault();
                // Если вообще  в базе нет трекера с таким ID то создаем его
                if (tracker == null)
                {
                    Logger.InfoFormat("Подключенный трекер не обнаружен в базе данных. В базе данных будет создан новый трекер (id {0}).", frame.DeviceIdString);
                    var dataGpsTracker = new DataGpsTracker()
                    {
                        Phone            = frame.DeviceIdString,
                        DeviceId         = frame.DeviceIdString,
                        ResponseInterval = 30,
                        Comment          = "Автоматически создан сервером",
                        ConnectionStatus = TrackerConnectionStatus.Online.ToString(),
                        Status           = TrackerStatus.Disabled.ToString(),
                        Name             = String.Format("tracker#{0}", frame.DeviceIdString)
                    };
                    DataCrud.CreateGpsTracker(dataGpsTracker);
                }
                else
                {
                    GpsTrackerData = tracker;
                    GpsTrackerData.ConnectionStatus = TrackerConnectionStatus.Online.ToString();
                    DataCrud.UpdateGpsTracker(GpsTrackerData);
                }
                // Переименование логгера
                Logger = log4net.LogManager.GetLogger(String.Format("{0} [{1}:{2}]", MethodBase.GetCurrentMethod().DeclaringType, TcpClient.Client.RemoteEndPoint, DeviceId));
            }
        }