вторник, 19 апреля 2016 г.

Связка Delphi + Jabber + 1C

Сегодня и здесь я вам расскажу и покажу внешнюю компоненту для 1С 7.7 (возможно, что и для 8) для общения по jabber протоколу. Компонента писалась по мотивам компонент romix`a на базе его vk_rs232, за основу был взят TJabberClient, нарытый на просторах интернета и, самое главное, все это адаптировано под Embarcadero RAD Studio XE8. До этого для разработки компонент приходилось пользовать Delphi 7 в виртуалке под WinXP, но с TJabberClient этот номер не прошел.


В общем-то, исходники с готовой vk_jabber.dll лежат тут (Яндекс.Диск). В исходниках осталась компонента vk_rs232, вычищать не стал, лень ))

Пример использования в 1С - простой эхо-бот:

Перем Жаббер;

//_____________________________________________________________________________
Процедура ОбработатьСообщение(ОтКого,Сообщ)

            Жаббер.Отправить(ОтКого,Сообщ);
КонецПроцедуры //ОбработатьСообщение

Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)

    Если Найти("JabberSend/JabberRecieve",Событие)=00 Тогда
        Сообщить("Источник: "+Источник+" \ Событие: "+Событие+" \ Данные: "+Данные);
    КонецЕсли;
    Если Событие="JabberMessage" Тогда
        Стр=Данные;
        ОтКого=Лев(Стр,Найти(Стр,"|")-1);
        Сообщ=Прав(Стр,СтрДлина(Стр)-Найти(Стр,"|"));
        Сообщить("От "+ОтКого+", сообщение "+Сообщ);
        ОбработатьСообщение(ОтКого,Сообщ);
    КонецЕсли;                                 
КонецПроцедуры


//_____________________________________________________________________________
Процедура ПриОткрытии() //предопределенная          
    Если глЗагрузитьВнешнююКомпоненту("vk_jabber")=0 Тогда
        Сообщить("Внешняя компонента не была загружена!","!");
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;       
    Жаббер=СоздатьОбъект("AddIn.vk_jabber");
    Жаббер.Аккаунт=СокрЛП(Константа.Жаббер);
    Жаббер.Пароль=СокрЛП(Константа.ЖабберПароль);

    Жаббер.Подключить();
    Жаббер.ПериодичностьПроверкиВСети=60;
КонецПроцедуры //ПриОткрытии

//_____________________________________________________________________________
Процедура ПриЗакрытии()
    Жаббер.ПериодичностьПроверкиВСети=0;
    Жаббер.Отключить();
    Жаббер=0;
КонецПроцедуры //ПриЗакрытии

В общем-то и все. Для меня этого функционала хватает, работает стабильно, вся логика через сообщения. Сообщения передаются простым текстом, без выкрутасов, в ОбработкаВнешнегоСобытия данные поступают в виде "account@jabber.ru|message", что понятно из приведенного примера. Функционал чатов, регистрации, смены статуса и прочего - в компоненте не делал, просто обмен сообщениями.

Мой код абсолютно бесплатен и свободен для использования, ненавижу само слово "лицензия".

Комментариев нет:

Отправить комментарий