Свой xmpp клиент для windows

Простой XMPP-клиент, основанный на Windows Workflow Foundation

Предыстория

Как-то в одном проекте, представляющим собой централизованную систему управления программными модулями, установленными на разных рабочих станциях в сети, понадобилось реализовать рассылку уведомлений по протоколу XMPP (также известному как Jabber).
Из доступных готовых решений на платформе .NET Framework обнаружилась библиотека agsXMPP, которая позволяет решить поставленную задачу. Однако из-за некоторых ограничений лицензии, а также доступности свободного времени и наличия желания, было принято в качестве пищи для ума написать свою библиотеку, позволяющую выполнять необходимые для проекта действия, а именно уметь рассылать конкретным адресатам автоматически сгенерированные сообщения.
Библиотека была написана, однако в дальнейшем, по мере изучения технологий и желания применить их для закрепления новых навыков, было принято решение переписать код с использованием Windows Workflow Foundation. Автору показалось, что такие действия, как аутентификация с помощью механизма Digest SASL (RFC 2831) неплохо будет смотреться, если представить ее шаги в виде определенных Activity.

Немного теории

Как говорит википедия, XMPP-протокол (Extensible Messaging and Presence Protocol расширяемый протокол обмена сообщениями и информацией о присутствии) — это основанный на XML открытый, свободный для использования протокол для мгновенного обмена сообщениями и информацией о присутствии (см. список контактов) в режиме, близкому к режиму реального времени. Изначально спроектированный легко расширяемым, протокол, помимо передачи текстовых сообщений, поддерживает передачу голоса, видео и файлов по сети.
В отличие от коммерческих систем мгновенных сообщений, таких, как AIM, ICQ, MSN и Yahoo, XMPP является децентрализованной, расширяемой и открытой системой. Любой желающий может открыть свой сервер мгновенных сообщений, регистрировать на нём пользователей и взаимодействовать с другими серверами XMPP.
В тоже время, Windows Workflow Foundation – представляет собой технологию компании Microsoft для определения, выполнения и управления рабочими процессами.
WF – это специальная среда исполнения, которая управляет выполнением программ, состоящих из возобновляемых программных «блоков», называемых Activity.

Реализация

Проект состоит из двух сборок и одного xolm-файла: JabberClient.dll (пространство имен Jabber.Client), WorkflowActivities.dll (пространство is Workflow) и Sequence.xml

Пространство Jabber.Client

Namespace Worflow

Пространство имен Workflow содержит множество объектов Activity и вспомогательных классов, с помощью которых конструируется алгоритм исполнения программы. Основные из них перечислены ниже:

  • Workflow.Activities.Receiver получает сообщение из очереди, обрабатывает его с помощью метода ReceiveMethod класса ReceiveType сборки AssemblyFile и вызывает метод OnReceived интерфейса IWorkflowDataService
  • Workflow.Activities.Sender Sender получает сообщение из очереди, обрабатывает его с помощью метода SendMethod класса SendType сборки AssemblyFile и вызывает метод Send интерфейса IWorkflowDataService
  • Workflow.Activities.StateSendAndReceive посылает сообщение, ожидает ответа и обрабатывает ответ. Для своей работы использует следующие свойства: ReceiveMethod, ReceiveType, AssemblyFile, SendMethod, SendType и Context. Свойство Context предназначено для использования разными Activity.
  • Workflow.Activities.Sequence – последовательно выполняет дочерние Activity
  • Workflow.Activities.Switch — эмулирует инструкцию Switch.

XOML-файл XMPP-клиента представлен ниже:

Здесь следует обратить на то, как выполняется блок аутентификации: он состоит из нескольких Activity, которые выполняются строго в определенном порядке и используют динамическую привязку свойства Context для передачи необходимых данных между ними (таких, как nonce, AuthMechanism и других).

Пример использования XMPP-клиента:
.
using Jabber.Client;
using Jabber.Client.Core;
.

using (JabberClient jabber =
new JabberClient(«jabber.org», «test», «test»))
<
//subscribe to events
jabber.Authentificated += new EventHandler(jabber_Authentificated);
jabber.RosterReceived += new RosterHandler(jabber_RosterReceived);
jabber.MessageReceived += new MessageHandler(jabber_MessageReceived);

Console.WriteLine(«Authentication. «);
jabber.Auth();
string s = Console.ReadLine();
Console.WriteLine(«Client state=<0>«, jabber.State);
while (!string.IsNullOrEmpty(s))
<
if (jabber.State == ClientState.Authenticated)
<
Contact contact = new Contact(«», «veleslaff@jabber.ru»);
jabber.AddToContacts(contact); //Add to contacts
jabber.SetStatusForContact(contact, UserStatus.Online);//Set status
jabber.Send(contact, s); //Send message
jabber.Contacts(); //Get roster list
>
s = Console.ReadLine();
>
>
.

Читайте также:  Windows scheduler python script

Послесловие

Основной код взаимодействия с XMPP-сервером написан довольно-таки давно, с тех пор практического опыта прибавилось. Также последняя реализация написана в качестве пищи для ума в свободное время, поэтому там очень много недостатков, которые исправляются потом и кровью при реальном использовании. Следует отметить следующие недостатки:

  • плохая обработка ошибок
  • слабая реализация событийной модели
  • «некрасивая» реализация Jabber.Client.Xml.

Исходники и статья на английском доступны codeproject.com

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

10 Best Free Open Source XMPP Client Software For Windows

Here is a list of best free open source XMPP client software for Windows. An XMPP client aka Jabber client is a software which lets you communicate in an XMPP network over the Internet. XMPP stands for Extensible Messaging and Presence Protocol which is an instant messaging protocol based on XML. These are lightweight and open source XMPP client software. You can easily find the source code of these freeware on their websites and study or modify it. All of these are cross-platform Jabber clients available for other platforms like Mac, Linux, BSD, etc.

Using these software, you can add Jabber accounts and chat with a person within the XMPP network. You can configure your profile by customizing information, status, display picture, setting presence, etc. In some of these, you can add and manage multiple user accounts. All of these support group chats and conference. You can send normal text, formatted text, images, files, screenshots, emojis, etc. to your contacts. Additionally, multi-tab chat interface, plugin support, end-to-end encryption, multilingual interface, chat history, bookmarks, broadcast message, etc. features are provided in these. One XMPP client even supports voice and video calls.

My Favorite XMPP Client Software For Windows:

Jitsi is one of my favorite XMPP client software as along with text messaging, it supports voice and video calls too. It offers support for other networks too such as AIM, ICQ, SIP, IPPI, etc. Gajim is also a good Jabber client. It provides desirable features such as several plugins, multiple user accounts, file sharing, etc.

Jitsi

Jitsi is a nice, easy-to-use Jabber client for Windows, Mac, Ubuntu, Linux, etc. It actually provides service for multiple networks including XMPP, such as AIM, ICQ, SIP, IPPI, etc. You can add multiple accounts to this software and set up your profiles (information, status, profile picture, etc.). It lets you create groups and chat rooms and chat with them using emojis.

Features of Jitsi worth mentioning:

  • It lets you share files and desktop with your contacts.
  • You can also make voice and video calls using it.
  • It allows you call recording.
  • You can transfer a call to your another contact.
  • You can search and view chat and call history.
  • It lets you make a conference call.
  • You can enable or disable notification sound.
  • Connection and account information can be viewed.
  • It has a multi-tab chat interface.
  • It lets you hide offline contacts.

Overall, Jitsi is a simple yet one of the best open source XMPP clients for Windows.

Свой xmpp клиент для windows

XMPP — Extensible Messaging and Presence Protocol (англ. расширяемый протокол обмена сообщениями и информацией о присутствии), ранее известный как Jabber (джа́ббер (англ. болтовня, трёп; тарабарщина) — это основанный на XML открытый, свободный для использования протокол для мгновенного обмена сообщениями и информацией о присутствии в режиме, близкому к режиму реального времени. Изначально спроектированный легко расширяемым, протокол, помимо передачи текстовых сообщений, поддерживает передачу голоса, видео и файлов по сети.
В отличие от коммерческих систем мгновенных сообщений, таких, как AIM, ICQ, MSN и Yahoo, XMPP является децентрализованной, расширяемой и открытой системой. Любой желающий может открыть свой сервер мгновенных сообщений, регистрировать на нём пользователей и взаимодействовать с другими серверами XMPP. На основе протокола XMPP уже открыто множество частных и корпоративных серверов XMPP. Среди них есть достаточно крупные проекты, такие как Google Talk, LiveJournal и Gizmo5.

Читайте также:  Голосовой помощник cortana для windows 10 как включить

В отличие от других интернет-пейджеров, джаббер больше похож на электронную почту:
• нет нумерации, есть произвольные имена
• джаббер-сервер может запустить любой
• у одного сервера может быть несколько имён (алиасов)
• каждый сервер может свободно общаться с каждым
• возможно безопасное подключение к серверу
• возможно шифрование отправляемых сообщений на уровне клиента
• возможно хранение всей истории чата на сервере
• есть веб-интерфейс
• возможно создание vCard визиток
• подтверждение доставки сообщения

В то же время, джаббер унаследовал некоторые приятные черты чатов:
• отображение статуса собеседника (в т.ч. расширенные статусы)
• многопользовательские комнаты («конференции»)
• боты полезной функциональности

Обзор Jabber клиентов под Windows: _http://habrahabr.ru/blogs/jabber/50776/
Для того, чтобы воспользоваться Jabber, необходимо иметь учётную запись на сервере. Таковую вы можете получить на следующих серверах (список серверов с графическим отображением поддерживаемых транспортов): _http://jabberworld.info/Список_работающих_публичных_серверов_Jabber

Сообщение отредактировал wandererbk — 30.10.09, 16:21

В: Как надо произносить «Jabber»?
О: Джаббер.

В: Как зарегистрироваться на сайте? Как зарегистрироваться на сервере?
О: Получить логин и пароль можно:

1. В разделе регистрации на сайте.
2. Через любой джаббер-клиент.

Для входа на сайт нужно использовать полный логин (ваше_имя@jabber.ru) и пароль.

В: Я забыл пароль, что мне делать?
О: Воспользуйтесь формой восстановления пароля: www.jabber.ru/xremind.
Восстановление возможно только при наличии адреса email в вкарде.

В: Что такое транспорт?
О: Сервис, который позволяет разговаривать с пользователями других IM-сетей через единственное подключение.

В: Как мне подключить транспорт в Майл.ру агент (Мрим)?
О: У вас должен быть емейл на одном из доменов, с которыми работает Майл.ру агент (mail.ru, list.ru, bk.ru, inbox.ru)
Найдите в своем клиенте Обзор Служб (Service Discovery).
Введите mrim.jabber.ru, нажмите «Просмотреть» (Browse).
Выберите «Зарегистрироваться» (Register).
Введите ваш емейл и пароль на одном из доменов mail.ru.
Авторизуйте транспорт.
Контакт mail.ru в ростере выглядит так . Добавляется в ростер как обычный джид.

В: Как мне подключить транспорт ICQ?
О: Подробное описание подключения в Bombus здесь bombus-im.org/wiki/howto/howto_icq. Инструкция подойдет для любого клиента.

В: Я хочу перенести свои контакты из аськи в джаббер с сохранением ников.
О: Скачайте программу QIP Contacts Manager. В этой программе выполните команду «Export» в файл *.clb.
Зарегистрируйтесь на транспорте ICQ.
Откройте файл *.clb в текстовом редакторе.
Введите имя ICQ и содержимое файла *.clb на _www.jabber.ru/jabaddons/qip2jabber.
Нажимайте кнопку. Вы получите данные в формате, подходящем для J.RU.

В: Я хочу перенести свои контакты с одного аккаунта на другой?
О: Можно воспользоваться утилитой JRU _http://www.jabber.ru/jabaddons/jru/jru.php.

В: Я хочу перенести свои контакты с одного транспорта на другой или удалить ненужные контакты?
О: Можно воспользоваться утилитой JRU _http://www.jabber.ru/jabaddons/jru/jru.php.

В: Что такое конференция/комната?
О: Сервис @conference.jabber.ru позволяет создавать комнаты, каждая из которых работает как отдельный чат. Зайти в конференцию можно из любого джаббер-клиента.

В: Как создать конференцию на сервере Jabber.Ru?
О: Новая конференция создается при первом заходе в нее пользователя. Такой пользователь получает права владельца (owner). По умолчанию, конференция временная. После создания комнаты можно изменить ее свойства и сделать постоянной (галочка «Persistent» в свойствах конференции).

Читайте также:  Logitech f710 как настроить windows 10

В: Чем отличаются участники от модераторов? Кем я могу быть в конференции?
О: Иерархия пользовательских прав существует специально для того, чтобы пользователи путались могли контролировать процесс общения (например, в тематических конференциях).
1. Owner: может всё.
2. Admin
3. Moderator
4. Member
5. None
6. Participant

Сообщение отредактировал wandererbk — 01.11.09, 14:35

Для новичков рекомендую Jimm Aspro.
Из WМ клиентов альтернативы Talkonaut’у не вижу.

Сообщение отредактировал wandererbk — 07.11.09, 15:38

это из тех клиентов, темы для которых созданы на форуме. однако, ни один из перечисленных не имеет поддержки конференций. из клиентов с поддержкой оных есть OneTeam и japyt(это не совсем клиент, работает по принципу прокси c любым jabber-клиентом, написан на python Disabler’ом).

Сообщение отредактировал Xamil — 07.11.09, 16:07

Транспорт
Транспорты (они же шлюзы) — один из способов использования Jabber-клиентов для общения с пользователями других сетей. Заключается в том, что на Jabber-сервере устанавливается специальный модуль, преобразующие сообщения из формата Jabber в формат других сетей. Преобразование происходит совершенно незаметно для пользователя. Чаще всего транспорты служат для подключения к другим сетям обмена сообщениями, например, ICQ, IRC и MRIM, AIM, Yahoo!, MSN и другим. Но связь с другими сетями обмена сообщениями — не единственное применение транспортам, их также используют для доступа к различным ботам, предоставляющим самые разнообразные функции, например, погодным ботам, ботам-переводчикам или RSS-агрегаторам.

Преимущества транспортов
Транспорты настраиваются один раз и не зависят от клиента, с которого их используют. Подключив шлюзы с Jabber-клиента на домашнем компьютере, не требуется подключать их на мобильном телефоне и ноутбуке.
При прямом использовании нескольких сетей (через многопротокольные клиенты) может значительно возрасти количество передаваемых данных. Транспорты же потребляют гораздо меньше трафика, особенно если подключенных сетей много.
Транспорты, дающие доступ к специальным ботам позволяют создать из своего Jabber-клиента универсальный инструмент, объединяющий в себе, к примеру, RSS-читалку, почтовый клиент, словари и переводчики, а также средство для просмотра погоды и отправки СМС.
Примеры использования таких транспортов:

* транспорт почты: email%domain@smtp.jabber.snc.ru — для отправки почты на адрес email@domain;
* транспорт погоды: city_ID@weather.jrudevels.org — для получения прогноза погоды определенного города;
* транспорт-переводчик: направление_перевода@translate.jrudevels.org — осуществляет перевод текста в соответствующем направлении.
* транспорт-агрегатор RSS: название_ленты@rss.jrudevels.org

Недостатки использования транспортов

Транспорты — не панацея. Из-за закрытости многих IM и отсутствия полной документации по протоколу, пользователь может лишиться ряда возможностей по сравнению с использованием клиентов, напрямую работающих с данным протоколом. Например, желающим использовать ICQ или MRIM через Jabber придётся пожертвовать передачей файлов[1], а также, например, статусом «невидимый» и списками видимости. Следовательно, если требуются все возможности, лучше параллельно использовать ICQ-клиент, либо многопротокольный клиент с поддержкой как Jabber, так и ICQ.
При подключении транспортов теряются все группы. Помимо этого, если Вы вручную переименовывали контакты, то эта информация тоже пропадет. После подключение можно рассортировать новые контакты по группам, как и обычные Jabber-контакты.
Примечания:
1. ↑ Частично её могут восполнить Jabber Disk или Service Disk

Настройка jabber-клиента Talkonaut для общения в официальной конференции форума 4pda
1. Устанавливаем и запускаем:

2. Выбираем тип аккаунта — jabber

3. Регистрируемся на http://jabber.ru и вводим логин и пароль
! логин вводить с @jabber.ru, если собираетесь использовать Talkonaut по полной, то можно и реальный номер телефона ввести, я не стал.

4. Cохраняемся и видим список комнат (и свои контакты, если раньше пользовались jabber’om )

5. Меню-войти в конференцию
! комната 4pda, хост не меняете, ник под которым вы будете в конференции и ваш пароль.нажимаем сохранить.

6. Вы вошли 🙂

Сообщение отредактировал Blind Fury — 10.11.09, 12:46

Оцените статью