Изучив несколько примеров проектов плагинов, выделил базовую структуру, которая должна быть во всех плагинах. Плагин основывается на классах-наследниках от следующих базовых классов: GpsGate.Online.Directory.DeviceDefinition, GpsGate.Online.Net.Protocol, GpsGate.Online.Net.NmeaListener или других *Listener (зависит от требований к проекту), GpsGate.Online.Net.NmeaConnection или других *Connection.Опишу поподробнее эти классы, чтобы было понятно, для чего они нужны.
Класс-наследник GpsGate.Online.Directory.DeviceDefinition нужен для описания базовых свойств и характеристик устройства. Для этого переопределяются следующие методы и свойства:
- Свойство Name возвращает название устройства.
- Свойство Description возвращает полное описание устройства.
- Свойство NamespaceName возвращает имя пространства имен, в котором размещены остальные классы плагина.
- Метод InstallMessageFields должен вернуть список названий полей, которые поддерживает устройство.
- Метод InstallDefaultMapperEntryFor позволяет задать привязку полей устройства к полям сервера. Например, если в устройстве есть поле SOS, то его можно связать с одноименным полем SOS на сервере.
- Метод RegisterCommad возвращает набор команд, которые могут быть отправлены устройству. Да-да, именно Commad, видимо, разработчики допустили небольшую ошибочку но исправлять уже поздно.
Класс-наследник GpsGate.Online.Net.Protocol реализует протокол устройства. В частности это реализуется парой методов TranslateFromDevice, которые получают данные, поступающие с устройства, и обрабатывают их. Также в данном классе необходимо переопределить свойство StringID, чтобы оно возвращало символьное название протокола.
Классы-наследники GpsGate.Online.Net.*Listener и GpsGate.Online.Net.*Connection предназначены для реализации связи с устройством. Например, если устройство общается с сервером по протоколу UDP, то создаются два класса наследника от UdpNmeaListener и UdpNmeaConnection.
Класс-наследник *Listener выступает в качестве слушателя порта и т.п., т.е. он устанавливает соединения с устройством. В данном классе необходимо переопределить по необходимости методы OnStart, OnStop, Install и метод CreateUdpConnection, который создаст соединение с использованием вашего класса-наследника от UdpNmeaConnection. Также в данном классе необходимо переопределить свойство ProtocolID, чтобы оно возвращало символьное название протокола.
Крайне важно, чтобы свойства StringID класса-наследника GpsGate.Online.Net.Protocol свойство ProtocolID класса-наследника GpsGate.Online.Net.*Listener возвращали одинаковые значения, иначе Вы не увидите ваш плагин в VehicleTracker. Обратите на это внимание, потому что, я при разработке плагина потратил очень много времени, чтобы разобраться с этой проблемой. Решение было найдено при переписке со службой техподдержки и на данный момент об этом нигде в документации не сказано.
Класс-наследник *Connection реализует соединение с устройством и должен переопределить метод CreateProtocol, который должен создавать для обработки данных ваш класс-наследник GpsGate.Online.Net.Protocol.
В плагине может быть реализовано несколько различных соединений, например, по SMS и TCP/IP.
Также в плагине доступен глобальный объект NLog для логгирования. Его Вы можете получить с помощью такой конструкции:
private static Logger m_nlog = LogManager.GetCurrentClassLogger();
Leave a Reply
You must be logged in to post a comment.
