Обмен сообщениями между клиентами и клиентами C #

StackOverflow https://stackoverflow.com/questions/1037838

  •  10-07-2019
  •  | 
  •  

Вопрос

Сначала я попытаюсь объяснить, чего именно я хочу достичь.

Представьте, что два пользователя используют приложение форм Windows, когда пользователь A открывает конкретную форму, к записи данных, лежащей в основе формы, применяется блокировка, так что только этот пользователь может вносить изменения в это время.

Пользователь 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 #.

Это было полезно?

Решение

Я бы просто добавил еще несколько данных, чтобы указать, какой контекст приложения затронут, и чтобы другие клиенты сами решали, обрабатывать ли они сообщение или нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top