最初に達成したいことを正確に説明しようとします。
2 人のユーザーが Windows フォーム アプリケーションを使用しているとします。ユーザー A が特定のフォームを開くと、フォームの基になるデータ レコードにロックが適用され、その時点でそのユーザーだけが変更できるようになります。
ユーザー B は、(グリッド内の) すべてのレコードのリストを持っています。これには、特にユーザー A が既に開いているレコードへの参照が含まれています。ユーザー A がレコードを開くと、ユーザー B のレコードのリストが更新され、行の横にあるロック アイコンをクリックして、レコードが使用中であることを示します。
これはメッセージングで行うことの些細な例ですが、ユーザー A がユーザー B が知る必要のあることを行っていることは理解できます。
Jabber-net for C# と OpenFire Jabber Server を使用してシステムを実装しました。基本的に、メッセージが送信されると、データベースのメッセージ テーブルに新しい行が挿入されます。メッセージ テーブルは、SqlDependancy オブジェクトを使用してサービス クライアントによって監視されるため、新しいメッセージの準備が整うと、サービスは関連するメッセージを作成し、Jabber および OpenFire サーバーを介して目的のクライアントに送信します。
これは問題なく動作しますが、OpenFire のすぐに使える機能はインスタント メッセージングをサポートするためのものであり、明らかに私が達成しようとしているものではありません。私が抱えている問題は、ユーザーが 2 つのアプリケーション コンテキスト (テストとライブ) にログインしている場合、user@server/resource の JID 構造がリソースを認識しないため、OpenFire はどちらにメッセージを送信するかを認識できないことです。
基本的に、私が現在 OpenFire と Jabber-net を使用している方法は、まったく正しくありません。
私が達成したいことを達成するために使用できるパターンはありますか。つまり、メッセージを送信しているクライアントを指定しながら、何かをするようにクライアントにメッセージを送信します。XMPP は、解析する独自のメッセージ タイプを構築できるため、答えのように思えました。
私のアプリケーションは、Windows フォーム、.NET 3.5 C# アプリケーションです。