Jabber клиент (xmpp) NativeAPI внешняя компонента (ВК) для 1С (версия 2.1) платформы x32, x64 (работает на клиенте и сервере)

Опубликовал Александр Синиченко (nytlenc) в раздел Программирование - Внешние компоненты

Внешняя компонента для 1С предприятие, по технологии NativeAPI (не требует регистрации в системе как COM компоненты). Это Jabber клиент для 1С (xmpp протокол). Работает на платформах x32 и x64 на клиенте и сервере а так же на сервере приложений (в том числе в фоновом сеансе и регламентных заданиях).

1. Видео о том, что примерно можно реализовать с помощью компоненты

2. Видео по работе с компонентой

Для работы компоненты нужно объявить переменную и подключить ее 

Например: 

Перем Об;
Процедура ПриОткрытии(Отказ)
	
	ПодключитьВнешнююКомпоненту("C:\JabberClient.dll", "Jabber", ТипВнешнейКомпоненты.Native);
	Об = Новый("AddIn.Jabber.JabberClient");
	Результат = Об.Создать("jabber.ru", "5222", "test_my_jabber", "test_my_jabber");
	//ПодключитьОбработчикОжидания("ПроверитьСообщения",1); Можно подключить обработчик и получать все приходящие сообщения или обрабатывать очередь вручную
	
КонецПроцедуры

Дальше работаем как с обычным объектом. 

Описание функций:

ОтправитьСообщение(Получатель@сервер, ТекстСообщения, ТипСообщения) //Отправка сообщения возвращает Булево значение
ПолучитьСообщения() //Получение массива со структурой сообщений в формате 1с
СписокПользователей() // Возвращает список пользователей в формате 1с
Соединиться() //Подключение возвращает Булево значение
Подключен() //Проверка состояния подключения возвращает Булево значение
Отключиться() //Отключение возвращает Булево значение
Создать(Сервер, порт, Логин, Пароль) //Создание экземпляра клиента возвращает Булево значение
Уничтожить() //Уничтожение экземпляра клиента при закрытии возвращает Булево значение
Пауза() // Аналог Sleep(), ожидает количество миллисекунд, например Об.Пауза(1000) = 1 сек.
Версия() // Информация о файле

В архиве описание, компонента и тестовая база - пример работы с компонентой.

01.11.2015 Добавлена новая команда:

СписокПользователей() // Возвращает список пользователей

Возвращает строку которую на сервере нужно перевести в массив 1с с помощью функции 

Массив = ЗначениеИзСтрокиВнутр(Результат);

Упрощена процедура обработки входящих сообщений, теперь "ПолучитьСообщения()" возвращает массив в котором каждый элемент это структура 1С - тоесть Массив[0] будет содержать в себе Структуру - "ОтКого" и "ТекстСообщения", пример:

&НаКлиенте
Процедура ПроверитьСообщения()
	
	Результат = Об.ПолучитьСообщения();
	Если Значениезаполнено(Результат) Тогда
		Массив = ПроверитьСообщенияНаСервере(Результат);
		Для Каждого Сообщение Из Массив Цикл
			Сообщить("Сообщение от: " + Сообщение.ОтКого + ", " + Сообщение.ТекстСообщения);
		КонецЦикла;
	КонецЕсли;
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПроверитьСообщенияНаСервере(Результат)
	
	Возврат ЗначениеИзСтрокиВнутр(Результат);
	
КонецФункции

12.11.2015 Добавлены обработчики исключений с сообщением об ошибке (теперь больше не ложит платформу и сообщает причину по которой произошла обшибка)

Изменен способ обработки событий. Проведена оптимизация. Теперь сообщения поступают при возникновении события входящего сообщения.

Обработка происходит назначением события обычной или управляемой формы 1С "ВнешнееСобытие", пример:

&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)

         Сообщить(Событие + " " + Источник + " " + Данные);

КонецПроцедуры

Также в компоненту добавлен обработчик события ошибок клиента, если произойдет ошибка, в обрабтчик событий "ВнешнееСобытие" поступит событие "Ошибка клиента", с источником "Клиент" или "Ошибка" с источником "Компонента" и данными с сообщением об ошибке.

23.12.2015 

Добавлена поддержка шифрования (TLS/SSL). Теперь будет работать с серверами, которые раньше сообщали "Ошибка 605: TLS required"

24.12.2015 

Добавлена компонента для работы на сервере x64, а так же отлажена работа не сервере приложений, в фоновом режиме и регламентном задании.

Добавлена команда ПолучитьСообщения() для получения сообщений в ручном режиме с сервера - возвращает строку которую нужно перевести на сервере в массив со структурой сообщений, пример работы на сервере:

&НаСервере
Процедура СоздатьНаСервере()
	
	ПодключитьВнешнююКомпоненту("ОбщийМакет.JabberClient64", "JabberClient64", ТипВнешнейКомпоненты.Native);
	Об = Новый("AddIn.JabberClient64.JabberClient");
	
	Попытка
		Результат = Об.Создать("jabber.ru", "5222", "test_my_jabber2@jabber.ru", "test_my_jabber2");
		Результат = Об.ПолучитьСообщения();
		Если ЗначениеЗаполнено(Результат) Тогда
			МассивСообщений = ЗначениеИзСтрокиВнутр(Результат);
		
			Для Каждого Сообщение Из МассивСообщений Цикл
				Сообщить("Сообщение от: " + Сообщение.Отправитель + ", текст сообщения: " + Сообщение.Сообщение);
			КонецЦикла;
		КонецЕсли;
		
		Результат = Об.ОтправитьСообщение("test_my_jabber1@jabber.ru", "Тестовое сообщение из 1С!");
		Результат = Об.Уничтожить();
		Об = Неопределено;
	Исключение
		Сообщить("Произошла ошибка!");// Подробнее в ИнформацияОбОшибке() и ОписаниеОшибки();
    КонецПопытки;
КонецПроцедуры

Так же добавлена возможность подключение к серверу по IP адресу и выбор возможности подключаться с шифрованием или без, в связи с этим доработана процедура Создать(). Теперь она ваыглядит так:

ВнешняяКомпонента.Создать("IP_адрес_сервера_или_имя_домена", "Порт_подключения_к_серверу", "логин@домен", "пароль", Шифрование);
//Пример
Результат = Об.Создать("192.168.1.1", "5222", "test_my_jabber2@jabber.ru", "test_my_jabber2", Ложь); // Без шифрования
//Пример 2
Результат = Об.Создать("jabber.ru", "5222", "test_my_jabber2@jabber.ru", "test_my_jabber2", Истина); // С шифрованием

Пример работы с компонентой на клиенте и сервере x64 в демонстрационной базе в архиве.

Пример работы регламентного задания, которое на сервере слушает входящие сообщения в чате и обрабатывает их, а также каждые 10 минут переподключается:

Процедура ПроверкаСообщенийВЧате() Экспорт
	
	УчетнаяЗаписьЧата = Справочники.УчетныеЗаписиЧата.СистемнаяУчетнаяЗаписьЧата;
	Пользователь = УчетнаяЗаписьЧата.ИмяПользователя + "@" + УчетнаяЗаписьЧата.Домен;
	Пароль = УчетнаяЗаписьЧата.Пароль;
	Сервер = УчетнаяЗаписьЧата.Сервер;
	Порт = УчетнаяЗаписьЧата.Порт;
	
	ПодключитьВнешнююКомпоненту("ОбщийМакет.JabberCli64_dll", "JabberCli64_dll", ТипВнешнейКомпоненты.Native);
	Робот = Новый("AddIn.JabberCli64_dll.JabberClient");
	
	Если Робот.Создать(Сервер, Порт, Пользователь, Пароль, Ложь) Тогда
		Для ъ=1 По 600 Цикл // 600 циклов по одной секунде = ~10 минут
			ПроверитьСообщения(Робот);
			ОтправитьСообщения(Робот);
			Робот.Пауза(1000); // Ожидаем 1 секунду
		КонецЦикла;
		Робот.Уничтожить();
		Робот = Неопределено;		
	КонецЕсли;	
	
КонецПроцедуры

26.12.2015

Исправлены мелкие недочеты. Переписана база-пример по работе с компонентами (добавлены детальные комментарии).

22.02.2016

Версия 1.7. Добавлена работа с SSL серверами которые ранее выдавали ошибку проверки сертификата (например talk.goole.com). Параметр шифрования перенесен в свойства компоненты, теперь выставляется как

Об.ИспользоватьШифрование = Истина;

Добавлен параметр Онлайн (только чтение) отображает текущее состояние связи.

26.05.2016

Версия 1.8. Добавлена возможность работы с одного аккаунта одновременно. Теперь можно одновремнно работать из Jabber клиента и из Jabber компоненты (и даже из нескольких разных Jabber компонент которые подключены в разных местах Wink ). Для того чтобы сообщения приходили и в Jabber компоненту и в клиент, нужно на клиенте убрать ресурс и выставить приоритет 0, то же самое нужно сделать и в компоненте

Об.Ресурс = "";

Например настройки PSI:

Настройки PSI

Или QIP

Результат:

Если вы хотите чтобы входящие сообщения приходили только в клиент, минуя Jabber компоненту. То можете задать имя ресурса или выставить приоритет выше нуля в клиенте... Внимание!! Как только Jabber клиент будет отключен, все сообщения автоматически пойдут в Jabber компненту, т.к. она будет иметь следующий приоритет и все еще будет оставаться онайлн.

26.05.2016

Версия 2.0

Переаботан алгоритм. Теперь не нудно вызывать процедуры Создать() и Уничтожить(), это делает конструктор с деструктором при подулючении и отключении компоненты. Отлажена работа в фоновм задании и на сервере.

Переработаны параметры компоненты, теперь логин, пароль, сервер, порт указываются в свойствах компоненты.

ПодключитьВнешнююКомпоненту(ИмяФайлаКомпоненты, "JabCli32", ТипВнешнейКомпоненты.Native); //Подключаем компоненту
Об = Новый("AddIn.JabCli32.JabberClient"); //Вызываем класс из компоненты
Об.Сервер = "jabber.ru";
Об.Порт = 5222;
Об.Логин = "test_my_jabber2@jabber.ru";
Об.Пароль = "1qaz2wsx3edc";
Об.Ресурс = "";
Об.Подключиться();

30.11.2016 

Версия 2.1. Добавлена возможность работы с конференциями. (Обновлена база пример)

Новые функции:

СоздатьКонференцию(НазваниеКомнаты) // Создание/вход в команту
УдалитьКонференцию(НазваниеКомнаты) // Удаление/выход из команты
СписокКонференций() // возвращает список текущих конференций
КонференцСообщение(КонференцКомната, ТекстСообщения) //Отправка сообщения в конференц комнату возвращает Булево значение
ДобавитьПользователя(JabberID, ИмяВКонтактЛисте, Группа) // Добавляет пользователя в список

16.12.2016 

Версия 2.2. Добавлены типы сообщений. (Обновлена база пример)

Пример:

Результат = Об.ОтправитьСообщение("test_my_jabber1@jabber.ru", "Тестовое сообщение из 1С!", "chat");
    Если Результат Тогда
        Лог = "Сообщение для test_my_jabber1@jabber.ru успешно отправлено" + Символы.ПС + Лог;
    КонецЕсли;

возможные типы сообщений:

normal  

Обычное сообщение, чем-то сходное с письмом на E-mail. Обычно клиентами оно открывается в отдельном окне. Для такого сообщения можно установить тему (subject).
chat  
Чат-сообщение. Такие сообщения обычно открываются клиентами в виде быстрой беседы — чата (chat).
groupchat 
Сообщение специального типа, рассылаемое сервером сразу нескольким клиентам, находящимся в одной конференции.
headline  
Специальный тип сообщений, применяемый для рассылок заголовков новостей, включающих в себя, собственно, заголовок, краткое описание новости (тело сообщения), ссылку (URL) на новость. Ссылок может не быть совсем, их может быть несколько. RSS-транспорты обычно рассылают новости как сообщения типа headline.
error
Сообщение возвращается отправителю с указанием сообщения об ошибке, которое связано с предыдущим сообщением отправленным этим пользователем.

Использовать можно где угодно, в коммерческих целях в том числе!

ВНИМАНИЕ 
Компонента х64 РАБОЧАЯ 

в базе примере не поправлен вызов функции. Всегда внимательно читайте тему.

Было 

Результат = Об.ОтправитьСообщение("test_my_jabber1@jabber.ru", "Тестовое сообщение из 1С!");

А нужно

Результат = Об.ОтправитьСообщение("test_my_jabber1@jabber.ru", "Тестовое сообщение из 1С!", "chat");

Скачать файлы

Наименование Файл Версия Размер
JabberNativeAPI_x32_x64
.rar 2,77Mb
30.11.16
41
.rar 2.2 2,77Mb 41 Скачать

См. также

Добавить вознаграждение
Комментарии
1. Дмитрий Шерстобитов (DitriX) 2342 24.10.15 08:25 Сейчас в теме
Во, вот теперь именно то, что нужно :) Огромное спасибо. И цену поставьте не 1$m, а 5 или 10, она достойна этого :)
2. Александр Синиченко (nytlenc) 67 24.10.15 15:04 Сейчас в теме
3. Сергей Филькин (FSerg) 62 27.10.15 18:48 Сейчас в теме
При попытке выполнить: Об.Соединиться();
платформа вылетает с ошибкой (Win 7 32bit Eng)
8.3.6.2100
4. Александр Синиченко (nytlenc) 67 28.10.15 03:29 Сейчас в теме
(3) FSerg, Об.Создать("Сервер", "Порт", "Логин", "Пароль"); предварительно объявляли? Если да проверяйте внимательно параметры Логин, Пароль, Сервер, Порт, попробуйте с этими учетными данными предварительно авторизоваться с помощью обычного jabber клиента, авторизация проходит? Какой метод аутентификаци используется на сервере, PLAIN, SASL?
5. Сергей Филькин (FSerg) 62 10.11.15 13:49 Сейчас в теме
(4) nytlenc, Обработку запускал из вашего же демо-примера.
На сервере протокол точно не PLAIN, потому что хотел делать это модных сейчас Slack и HipChat.
Но в любом случае, какой бы протокол и ответ сервера не был - не очень клево что валится платформа.
6. Александр Синиченко (nytlenc) 67 12.11.15 17:50 Сейчас в теме
(5) FSerg, исправил компоненту, добавил обработчики исключений - теперь не валит платформу, а также выдает сообщение об ошибке, напишите почту в личку, я вышлю Вам (и все кто качал пишите в личку или на почту с указанием логина на infostart отправлю) новую компоненту, чтобы не перекачивать платно тут.
7. Василий Тёркин (1С_Мастер) 48 22.12.15 17:01 Сейчас в теме
На линукс сервере компонента, к сожалению, подключаться отказывается. Жаль
8. Александр Синиченко (nytlenc) 67 23.12.15 04:31 Сейчас в теме
(7) 1С_Мастер, Компонента писалась под Win x32, x64. Пока так и не смог добиться того, чтобы она заработала на сервере. И вообще пока не нашел ни одной компоненты xmpp которая работала бы на сервере.
9. Александр Синиченко (nytlenc) 67 25.12.15 04:06 Сейчас в теме
(7) 1С_Мастер, Переработал компоненту, теперь работает и на сервере. Попробую теперь запустить ее на Linux.
10. zavedeev (zavedeev) 15.01.16 20:48 Сейчас в теме
11. Александр Синиченко (nytlenc) 67 18.01.16 03:57 Сейчас в теме
(10) zavedeev, исходники не даю. Нигде не написано, что в архиве есть исходники или их Вам дадут.
12. Александр Тарасюк (Aletar) 18.02.16 05:58 Сейчас в теме
Добрый день.

Компонента работает. Но если имя пользователя на русском (у нас имя совпадает с учетной записью AD), то не происходит подключения к серверу (у нас openfire). При этом демонстрационная конфигурация говорит, что подключение выполнено, но при этом состояние оффлайн. Попытка подключения (кнопка Подключить) ситуацию не меняет. Если же при этом попробовать отправить сообщение, то платформа падает (версия 8.2.19.121).

Когда имя пользователя задано латиницей, все нормально.
13. Александр Синиченко (nytlenc) 67 18.02.16 09:26 Сейчас в теме
(12) Aletar, добрый день. Я попробую разобраться в ситуации. Быть может дело в кодировке. Но это уже копаться надо в самой компоненте. Я напишу и выложу обновление как будет результат.
14. it it (it@1c-usoft.ru) 20.02.16 12:56 Сейчас в теме
С talk.google.com не получается настроить. Кто то пробовал?
15. Александр Синиченко (nytlenc) 67 22.02.16 15:14 Сейчас в теме
(12) Aletar, Проверено на jabber.ua совместно с TLS. Все работает прекрасно. Попробуйте зарегистрируйте там пользователей с русскими именами, код:

Компонента = ПолучитьМакетССервера(); //Получаем макет компоненты с сервера
	ИмяФайлаКомпоненты = ПолучитьИмяВременногоФайла("dll"); //Получаем имя файла в который сохраним компоненту
	Компонента.Записать(ИмяФайлаКомпоненты); //Сохраняем компоненту в файл
	ПодключитьВнешнююКомпоненту(ИмяФайлаКомпоненты, "j3321", ТипВнешнейКомпоненты.Native); //Подключаем компоненту
	Об = Новый("AddIn.j3321.JabberClient"); //Вызываем класс из компоненты
	
	Результат = Об.Создать("jabber.ua", "5222", "тест_май_джабер2@jabber.ua", "*************ПАРОЛЬ_Я_СКРЫЛ**********", Истина); // Создаем экземпляр Jabber клиента с шифрованием
	Об.ОтправитьСообщение("тест_май_джабер@jabber.ua", "Тестовое сообщение из 1С!");
	Результат = Об.ПолучитьСообщения(); // Обязательно получить сообщения прежде чем выходить в онлайн с помощью Об.Соединиться(), чтобы не потерять сообщения которые
	                                    // были отправлены нам в оффлайн. Команда Об.ПолучитьСообщения() выведет нас в онайн и сразу вернет список сообщений в "Резултат"
	Если ЗначениеЗаполнено(Результат) Тогда // Если есть какая-то строка, значит получили сообщения, будем обрабатывать
		Попытка
			МассивСообщений = ПеревестиСтрокуНаСервере(Результат); // Переводим получнную из компоненты строку в массив 1С	
			Для Каждого Сообщение Из МассивСообщений Цикл
				Лог = "Сообщение от: " + Сообщение.Отправитель + ", текст сообщения: " + Сообщение.Сообщение + Символы.ПС + Лог;
			КонецЦикла;
		Исключение
		КонецПопытки;
	КонецЕсли;
	
	Элементы.Подключиться.Доступность = Истина;
	Элементы.Отключиться.Доступность = Истина;
	Элементы.СписокПользователей.Доступность = Истина;
	Элементы.СостояниеКлиента.Доступность = Истина;
	Элементы.ОтправитьСообщение.Доступность = Истина;
	Элементы.Версия.Доступность = Истина;
...Показать Скрыть
16. Александр Синиченко (nytlenc) 67 22.02.16 15:50 Сейчас в теме
(14) it@1c-usoft.ru, Исправлено. Перекачайте компоненту будет работать с talk.google.com (не забудьте включить шифрование)
17. it it (it@1c-usoft.ru) 24.02.16 15:02 Сейчас в теме
Соединение проходит нормально.
Все функции работают.
Но.
К аккаунту на talk.google.com подключент через qip. Сообщения проходят. Но сообщения на hangouts не проходят.
В чем может быть проблема?
18. Александр Синиченко (nytlenc) 67 28.02.16 15:48 Сейчас в теме
(17) it@1c-usoft.ru, Нет не в курсе.
19. Алексей Б (windsurf) 21 15.05.16 20:39 Сейчас в теме
Спасибо за Вашу разработку! Получилось запустить компоненту, но сильно не хватает пары вещей:
1) инфы о статусе контактов (онлайн/офлайн) - не понятно кому можем писать, а кому бессмысленно
2) На jabber сервере, кроме логина контакта, хранится и его представление (удобочитаемое имя) - вот его бы тоже вытаскивать
20. Александр Синиченко (nytlenc) 67 25.05.16 04:37 Сейчас в теме
(19) windsurf, я попробую что-нибудь придумать.
21. Константин Манычев (kostyaCD) 10.11.16 16:32 Сейчас в теме
Благодарю за компоненты и хотел бы узнать не поменялось ли что-то касательно Онлайн\Оффлайн. И интересует можно ли как-то отправлять свой статус на сервер, чтоб и остальные видели, что я в онлайне?
22. Александр Синиченко (nytlenc) 67 14.11.16 17:12 Сейчас в теме
(21) kostyaCD, не поменялось ничего касательно оффлайн/онлайн, этот момент пока в разработке. По поводу статуса, клиент при подключении отправляет автоматически уведомление, что он онлайн и переходит в статус "Готов поболтать". Таким образом все видят что вы онлайн если подключены или оффлайн если нет.
23. Константин Манычев (kostyaCD) 22.11.16 13:14 Сейчас в теме
Хм... Странно, вроде подключаюсь и могу писать, а на другом устройстве все-равно в оффе. И еще хотел спросить есть ли способ с помощью этой компоненты добавлять пользователей в контакт лист? Не нашел что-то такого метода.
24. Константин Манычев (kostyaCD) 24.11.16 12:20 Сейчас в теме
И еще хотел спросить. Есть свой сервере, маковский. Не удается получить список существующих пользователей, я так понимаю потому-что оно там должно у них подтягивать всех кто на этом сервере. И не получить/отправить сообщение. Схожая проблема есть у клиента PSI+, но Spark работает и вроде нормально с этим сервером. На самом деле не сильно разбираюсь во всех этих джабберах и хотел поинтересоваться, может что-то подскажете, что им на сервере подкрутить или как компоненту поднастроить?
25. Александр Синиченко (nytlenc) 67 30.11.16 17:37 Сейчас в теме
(23) Добавил функцию добавления пользователей в контакт лист. см. описание
26. Александр Синиченко (nytlenc) 67 30.11.16 17:37 Сейчас в теме
(24) к сожалению на счет сервера не подскажу
27. sergej anonymous (ksv74) 85 08.12.16 23:20 Сейчас в теме
Под какую платформу файл выгрузки?
Не получается загрузить.
Ошибка "Не верный формат для загрузки информационной базы"
28. Александр Синиченко (nytlenc) 67 09.12.16 09:29 Сейчас в теме
(27) 8.3 попробуйте последнюю версию платформы
29. Рубеж рубеж (rubezh) 13.12.16 13:30 Сейчас в теме
Подскажите, какие-нибудь параметры при отправке сообщений еще можно задавать? Интересует установка типа сообщения, что-то вроде type=>"chat". Потому как иначе выглядит как рассылка.
30. Александр Синиченко (nytlenc) 67 14.12.16 05:10 Сейчас в теме
31. Рубеж рубеж (rubezh) 14.12.16 09:53 Сейчас в теме
(30) Здорово, спасибо! Новую версию как можно будет получить?
32. Александр Синиченко (nytlenc) 67 16.12.16 17:45 Сейчас в теме
(31) Напишите почту в личку, получите компоненту
33. Информационно-технического развития Служба (SITR-utyos) 480 30.01.17 17:35 Сейчас в теме
Пробовал поиграться в тестовой базе. Выяснил, что не работает &насервере версия ВК x64.dll из архива. Та, что в dt в макете x64 - сообщения отправляет. Платформа 1С 8.3.9 x64, Windows server 2008 x64.

Так лучше будет может? )))
Процедура СоздатьНаСервере()
	Если 
		ПодключитьВнешнююКомпоненту("ОбщийМакет.JabCli64", "JabCli", ТипВнешнейКомпоненты.Native)
	Тогда
		Лог = "Компонента загружена" + Символы.ПС + Лог;
	Иначе
		Лог = "Ошибка при загрузке компоненты" + Символы.ПС + Лог;
		Возврат;
	КонецЕсли;
...Показать Скрыть
34. Александр Синиченко (nytlenc) 67 31.01.17 08:06 Сейчас в теме
(33) 64x компонента предназначена только для работы &НаСервере если база запущена на сервере приложений 1С. И только в контексте &НаСервере. Если используется &НаСервере в файловом варианте или &НаКлиенте, не важно какая ОС x64 или x32 (даже если вы запустили это на x64 сервере) то использовать нужно x32 компоненту.
35. Информационно-технического развития Служба (SITR-utyos) 480 31.01.17 10:41 Сейчас в теме
(34)
64x компонента предназначена только для работы &НаСервере если база запущена на сервере приложений 1С.
Так и было. Речь о том, что в поставке получается две разные версии компоненты x64, одна из которых не работает (???).
36. Информационно-технического развития Служба (SITR-utyos) 480 01.02.17 08:32 Сейчас в теме
[quote]Версия 2.0

Переаботан алгоритм. Теперь не нудно вызывать процедуры Создать() и Уничтожить(), это делает конструктор с деструктором при подключении и отключении компоненты. Отлажена работа в фоновм задании и на сервере.[/quote]Правильно понимаю, что для компоненты x64 это тоже неактуально?
37. Александр Синиченко (nytlenc) 67 14.02.17 12:52 Сейчас в теме
(36)
ы x64 это тоже неактуально?


Правильно. Описание актуально для обоих версий компоненты 64 и 32
38. Александр Синиченко (nytlenc) 67 14.02.17 13:18 Сейчас в теме
ВНИМАНИЕ

Компонента х64 РАБОЧАЯ

в базе примере не поправлен вызов функции. Всегда внимательно читайте описание обновления. Было

Результат = Об.ОтправитьСообщение("test_my_jabber1@jabber.ru", "Тестовое сообщение из 1С!");


а нужно

Результат = Об.ОтправитьСообщение("test_my_jabber1@jabber.ru", "Тестовое сообщение из 1С!", "chat");




39. Александр Синиченко (nytlenc) 67 14.02.17 13:23 Сейчас в теме
(35) работают обе компоненты. Для работы брать dll в каталогах. Они самые актуальные.
40. Igor Urinev (woodoo2garik) 16.02.17 16:06 Сейчас в теме
Не получается использовать компоненту, платформа 8.3.9.2170, клиентское приложение. При попытке выполнить ОтправитьСообщение или СписокПользователей результат одинаков: "Ошибка: Access violation at address 09AD24C0 in module 'JabberClient32.dll'. Read of address 0000002C". При вызове метода Создать - ошибка "Метод объекта не обнаружен".
В свойствах JabberClient32.dll указана версия 1.0.0.0, компонента получена с Инфостарта вчера.
41. Александр Синиченко (nytlenc) 67 16.02.17 16:45 Сейчас в теме
(40)
Код в студию. Компонету как подключали? Просто взяли базу пример и попробовали понажимать кнопки? Если так то для начала в макетах базы примера замените компоненты на те что лежат файлами в папке, там актуальные. Сборка версии файла dll и версия компоненты разные вещи. Также рекомендую внимательно прочитать описание в теме.
42. Igor Urinev (woodoo2garik) 16.02.17 17:44 Сейчас в теме
Компонента взята из каталога, размер JabberClient32.dll 1387008 байт. Тестировал на демо-базе, компоненты в макетах заменил на скачанные с Инфостарта (архив получен по электронной почте), в коде указал путь к ним же и заменил адрес сервера и учётные данные на свои. Соединение отрабатывает: "Событие в компоненте на клиенте: Связь установлена 0 OK", но далее при вызове любого метода возвращается указанная выше ошибка. Из самодельной тестовой обработки получается то же самое.
Проверялось на Server 2008 x64 и Windows 7 x32.
43. Александр Синиченко (nytlenc) 67 17.02.17 04:51 Сейчас в теме
(42) вы код так и не предоставили. Я по фотографии не лечу.
44. Igor Urinev (woodoo2garik) 17.02.17 11:56 Сейчас в теме
&НаКлиенте
Перем Об;

&НаКлиенте
Процедура Соединиться(Команда)

ПодключитьВнешнююКомпоненту("C:\ext\jabber\JabberClient32.dll", "JabCli32", ТипВнешнейКомпоненты.Native); //Подключаем компоненту
Об = Новый("AddIn.JabCli32.JabberClient"); //Вызываем класс из компоненты
Об.Сервер = "openfire.xxx.zzz.ru";
Об.Порт = 5222;
Об.Логин = "test@openfire.xxx.zzz.ru";
Об.Пароль = "987654321";
Об.Ресурс = "";
Об.ИспользоватьШифрование = Истина;
ВнутрСтрокаСМассивомСообщений = Об.ПолучитьСообщения(); // Обязательно получить сообщения в первую очередь чтобы не потерять сообщения которые были отправлены нам в оффлайн.
                                                                                                                                             // далее метод Об.Соединиться() не обязателен - клиент выходит на связь автомактически,
Если ЗначениеЗаполнено(ВнутрСтрокаСМассивомСообщений) Тогда // Если есть какая-то строка, значит получили сообщения, будем обрабатывать
                Попытка
                               МассивСообщений = ПеревестиСтрокуНаСервере(ВнутрСтрокаСМассивомСообщений); // Переводим получнную из компоненты строку в массив 1С            
                               Для Каждого Сообщение Из МассивСообщений Цикл
                                               Лог = "Сообщение от: " + Сообщение.Отправитель + ", текст сообщения: " + Сообщение.Сообщение + Символы.ПС + Лог;
                               КонецЦикла;
                Исключение
                КонецПопытки;
КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ОтправитьСообщение(Команда)
                
                Результат = Об.ОтправитьСообщение("user1@openfire.xxx.zzz.ru", "Тестовое сообщение из 1С!", "chat");
                Если Результат Тогда
                               Лог = "Сообщение для успешно отправлено" + Символы.ПС + Лог;
                КонецЕсли;
                
КонецПроцедуры

&НаКлиенте
Процедура СписокПользователей(Команда)
                
                СписокПользователей.Очистить();
                Результат = Об.СписокПользователей();
                Если Значениезаполнено(Результат) Тогда
                               Массив = ПеревестиСтрокуНаСервере(Результат);
                               Для Каждого Юзер Из Массив Цикл
                                               СписокПользователей.Добавить(Юзер, Юзер);
                               КонецЦикла;
                КонецЕсли;
                
КонецПроцедуры


При выполнении ОтправитьСообщение() и СписокПользователей() Результат="Ошибка: Access violation at address 09BD24C0 in module 'JabberClient32.dll'. Read of address 0000002C"
...Показать Скрыть
45. Александр Синиченко (nytlenc) 67 17.02.17 12:56 Сейчас в теме
(44)
Соединиться(Команда)


А если так, что говорит?

ПодключитьВнешнююКомпоненту("C:\ext\jabber\JabberClient32.dll", "JabCli32", ТипВнешнейКомпоненты.Native); //Подключаем компоненту
Об = Новый("AddIn.JabCli32.JabberClient"); //Вызываем класс из компоненты;
Об.Сервер = "openfire.xxx.zzz.ru";
Об.Порт = 5222;
Об.Логин = "test@openfire.xxx.zzz.ru";
Об.Пароль = "987654321";
Об.Ресурс = "";
Об.Подключиться();
Если Об.Онлайн Тогда
         Сообщить("Онлайн");
Иначе
        Сообщить("Оффлайн");
КонецЕсли;
...Показать Скрыть


Что сообщает? Больше чем уверен - Оффлайн.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа