Esempio 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);
     }
 }
Esempio n. 2
0
        /// <summary>
        /// Отправка фрейма данных
        /// </summary>
        /// <param name="command"></param>
        /// <param name="messageBody"></param>
        protected void SendFrame(TrackerCommand command, string messageBody)
        {
            TrackerFrame frame = null;

            try
            {
                frame = CreateFrame(command, messageBody);
                Logger.InfoFormat("Отправка фрейма {0}", frame.ToString());
                TcpClient.Client.Send(frame.BlockData);
            }
            catch (Exception ex)
            {
                Logger.Error(String.Format("Ошибка при отправке фрейма {0}", frame == null ? "(фрейм не создан)" : frame.ToString()), ex);
            }
        }
Esempio 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));
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Получение фрейма
        /// </summary>
        /// <param name="frame">фрейм</param>
        protected void OnReceiveFrame(TrackerFrame frame)
        {
            Logger.DebugFormat("Получен фрейм {0}, команда {1}", frame.ToString(), frame.Command.CommandType.Description);

            // Проверка
            CheckHandshake(frame);

            // Если обработчик ответа не указан то выходим
            if (String.IsNullOrEmpty(frame.Command.CommandType.AnswerHandlerFunction))
            {
                return;
            }

            // Имем обработчик
            var handler = GetType().GetMethod(frame.Command.CommandType.AnswerHandlerFunction);

            if (handler == null)
            {
                throw new Exception(String.Format("Функция обработки ответа не найдена: {0}",
                                                  frame.Command.CommandType.AnswerHandlerFunction));
            }
            // Вызов обработчика
            handler.Invoke(this, new object[] { frame });
        }
Esempio n. 5
0
 /// <summary>
 /// Авторизация
 /// </summary>
 /// <param name="frame"></param>
 public void OnLoginCommand(TrackerFrame frame)
 {
     // Согласно спецификации
     SendFrame("AP05");
 }
Esempio n. 6
0
 /// <summary>
 /// Рукопожатие
 /// </summary>
 /// <param name="frame"></param>
 public void OnHandshakeCommand(TrackerFrame frame)
 {
     // Согласно спецификации
     SendFrame("AP01", "HSO");
 }
Esempio n. 7
0
 /// <summary>
 /// Создание фрейма команды
 /// </summary>
 /// <param name="command"></param>
 /// <param name="messageBody"></param>
 /// <returns></returns>
 public TrackerFrame CreateFrame(TrackerCommand command, string messageBody)
 {
     return(TrackerFrame.NewFrame(DeviceId, command, messageBody));
 }