2009-06-24 9 views
1

Ich werde versuchen und genau erklären, was ich zuerst erreichen möchte.C# Client zu Client Messaging

Stellen Sie sich vor, zwei Benutzer verwenden eine Windows Forms-Anwendung. Wenn Benutzer A ein bestimmtes Formular öffnet, wird eine Sperre auf den dem Formular zugrunde liegenden Datensatz angewendet, sodass nur dieser Benutzer Änderungen vornehmen kann.

Benutzer B hat eine Liste aller Datensätze (in einem Raster), die unter anderem einen Verweis auf den bereits von Benutzer A geöffneten Datensatz enthält. Was möchten wir tun, wenn Benutzer A die Datensätze von Benutzer B die Liste der Datensätze öffnet aktualisiert, um ein Sperrsymbol neben der Zeile anzuzeigen, um anzuzeigen, dass der Datensatz verwendet wird.

Dies ist ein triviales Beispiel für das, was wir mit Messaging tun, aber Sie bekommen die Idee, dass Benutzer A etwas tut, das Benutzer B darüber wissen muss.

Ich habe ein System mit Jabber-Net für C# und einem OpenFire Jabber Server implementiert. Wenn eine Nachricht gesendet werden soll, wird eine neue Zeile in eine Nachrichtentabelle in der Datenbank eingefügt. Die Nachrichtentabelle wird von einem Dienstclient unter Verwendung des SqlDependancy-Objekts überwacht. Wenn eine neue Nachricht bereit ist, erstellt der Dienst die entsprechende Nachricht und sendet sie über Jabber und den OpenFire-Server an den gewünschten Client.

Das funktioniert OK, aber OpenFire's Out-of-the-Box-Funktionalität ist für die Unterstützung von Instant Messaging, was offensichtlich nicht das ist, was ich erreichen möchte. Das Problem, das ich habe, ist, dass OpenFire, wenn ein Benutzer in zwei Anwendungskontexte (d. H. Test und Live) angemeldet ist, nicht wissen, an welche eine Nachricht senden, da die JID-Struktur von Benutzer @ Server/Ressource keine Notiz von der Ressource nimmt.

Grundsätzlich ist die Art, wie ich momentan mit OpenFire und Jabber-Net arbeite, nicht ganz richtig.

Gibt es ein Muster, das ich verwenden kann, um das zu erreichen, was ich erreichen möchte, d. H. Eine Nachricht an einen Client senden und ihm mitteilen, welcher Client die Nachricht auch sendet. XMPP schien die Antwort zu sein, weil ich meine eigenen Nachrichtentypen zum Analysieren konstruieren kann.

Meine Anwendung ist eine Windows Forms, .NET 3.5 C# -Anwendung.

+0

Persönlich klingt es wie eine gute Wahl und entbehrliche Wahl. – kenny

Antwort

0

Ich würde nur einige weitere Daten hinzufügen, um anzuzeigen, welcher Anwendungskontext betroffen ist und die anderen Clients entscheiden müssen, ob sie die Nachricht verarbeiten müssen oder nicht.

+0

Ja, ich habe schon darüber nachgedacht, es fühlte sich einfach an wie ein Betrüger. Ich könnte am Ende damit enden, ich war nur interessiert zu sehen, welche anderen Möglichkeiten es gibt. – MrEdmundo