Pregunta

Primero intentaré explicar exactamente lo que quiero lograr.

Imagine que dos usuarios están utilizando una aplicación de formularios de Windows, cuando el usuario A abre un formulario particular, se aplica un bloqueo al registro de datos subyacente al formulario para que solo ese usuario pueda realizar cambios en ese momento.

El usuario B tiene una lista de todos los registros (en una cuadrícula) que, entre otros, contiene una referencia al registro ya abierto por el usuario A. Lo que queremos hacer es cuando el usuario A abre los registros La lista de registros del usuario B se actualiza para mostrar un icono de candado al lado de la fila para indicar que el registro está en uso.

Este es un ejemplo trivial de lo que hacemos con la mensajería, pero se entiende la idea, el usuario A hace algo que el usuario B necesita saber al respecto.

He implementado un sistema usando Jabber-net para C # y un servidor OpenFire Jabber. Básicamente, cuando se va a enviar un mensaje, se inserta una nueva fila en una tabla de mensajes en la base de datos. Un cliente de servicio observa la tabla de mensajes utilizando el objeto SqlDependancy, de modo que cuando un nuevo mensaje está listo, el servicio crea el mensaje relevante y lo envía al cliente deseado a través de Jabber y el servidor OpenFire.

Esto funciona bien, sin embargo, la funcionalidad lista para usar de OpenFire es para soportar la mensajería instantánea, que obviamente no es lo que estoy tratando de lograr. El problema que tengo es que si un usuario inicia sesión en dos contextos de aplicación (es decir, Test y Live) OpenFire no sabe a quién enviar un mensaje porque la estructura JID del usuario @ servidor / recurso no tiene en cuenta el recurso.

Básicamente, la forma en que estoy usando OpenFire y Jabber-net no es del todo correcta.

¿Hay algún patrón que pueda usar para lograr lo que quiero lograr? es decir, enviar un mensaje a un cliente diciéndole que haga algo, al tiempo que puedo especificar a qué cliente también está enviando el mensaje. XMPP parecía la respuesta porque puedo construir mis propios tipos de mensajes para analizar.

Mi aplicación es una aplicación Windows Forms, .NET 3.5 C #.

¿Fue útil?

Solución

Simplemente agregaría más datos para indicar qué contexto de aplicación se ve afectado y hacer que los otros clientes decidan si necesitan manejar el mensaje o no.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top