Сначала я попытаюсь объяснить, чего я хочу достичь.
Представьте, что два пользователя используют приложение форм Windows, когда пользователь А открывает конкретную форму, к записи данных, лежащей в основе формы, применяется блокировка, чтобы только этот пользователь мог вносить изменения в это время.
Пользователь B имеет список всех записей (в сетке), который, среди прочего, содержит ссылку на запись, уже открытую пользователем A. Что мы хотим сделать, это когда пользователь A открывает записи. Список записей пользователя B обновляется. чтобы показать значок замка рядом со строкой, чтобы указать, что запись используется.
Это тривиальный пример того, что мы делаем с обменом сообщениями, но вы понимаете, что пользователь A делает то, что должен знать пользователь B.
Я реализовал систему с использованием Jabber-net для C # и OpenFire Jabber Server. В основном, когда сообщение должно быть отправлено, новая строка вставляется в таблицу сообщений в базе данных. Таблица сообщений отслеживается клиентом службы с помощью объекта SqlDependancy, поэтому, когда новое сообщение готово, служба создает соответствующее сообщение и отправляет его нужному клиенту через Jabber и сервер OpenFire.
Это работает нормально, однако стандартная функциональность OpenFire для поддержки мгновенных сообщений, что, очевидно, не то, чего я пытаюсь достичь. У меня проблема в том, что, если пользователь вошел в два контекста приложения (т. Е. Test и Live), OpenFire не знает, в какой из них отправить сообщение, потому что структура JID user @ server / resource не обращает внимания на ресурс.
В основном то, как я сейчас использую OpenFire и Jabber-net, не совсем правильно.
Есть ли шаблон, который я могу использовать для достижения того, чего я хочу достичь, то есть отправить сообщение клиенту, сказав, что он что-то делает, при этом имея возможность указать, какому клиенту вы также отправляете сообщение. XMPP показался мне ответом, потому что я могу создавать собственные типы сообщений для анализа.
Мое приложение - это приложение Windows Forms, .NET 3.5 C #.