我将尝试准确地解释我首先想要实现的目标。
想象一下,两个用户正在使用一个 Windows 窗体应用程序,当用户 A 打开一个特定的窗体时,会将一个锁应用于窗体底层的数据记录,以便当时只有该用户可以进行更改。
用户 B 有一个所有记录的列表(在网格中),其中包含对用户 A 已经打开的记录的引用。我们想要做的是当用户 A 打开记录时,用户 B 的记录列表被更新以显示行旁边的锁定图标表示该记录正在使用中。
这是我们处理消息传递的一个简单示例,但您明白了,用户 A 做了用户 B 需要知道的事情。
我已经使用 Jabber-net for C# 和 OpenFire Jabber Server 实现了一个系统。基本上,当要发送消息时,会在数据库的消息表中插入一个新行。消息表由使用 SqlDependancy 对象的服务客户端监视,因此当新消息准备好时,服务构建相关消息并通过 Jabber 和 OpenFire 服务器将其发送到所需的客户端。
这工作正常,但是 OpenFire 的开箱即用功能是支持即时消息,这显然不是我想要实现的。我遇到的问题是,如果用户登录到两个应用程序上下文(即测试和实时),OpenFire 不知道要向哪一个发送消息,因为 user@server/resource 的 JID 结构不会注意到资源。
基本上我目前使用 OpenFire 和 Jabber-net 的方式不太正确。
是否有一种模式可以用来实现我想要实现的目标,即向客户端发送消息,告诉它做某事,同时能够指定您也发送消息的客户端。XMPP 似乎是答案,因为我可以构建自己的要解析的消息类型。
我的应用程序是一个 Windows 窗体、.NET 3.5 C# 应用程序。