Java openfire外部组件如何处理状态和订阅?
我通过扩展AbstractComponent类,基于Whack库构建了一个外部openfire组件。我希望客户端订阅我的组件,并在组件联机和脱机时接收状态通知。所以我的问题是,我们如何处理基于AbstractComponent的外部组件的状态和状态订阅 目前,我可以使用handlePresence()方法响应状态请求,但是如何将客户端添加到组件花名册中(外部组件首先允许花名册吗)Java openfire外部组件如何处理状态和订阅?,java,xmpp,openfire,whack,Java,Xmpp,Openfire,Whack,我通过扩展AbstractComponent类,基于Whack库构建了一个外部openfire组件。我希望客户端订阅我的组件,并在组件联机和脱机时接收状态通知。所以我的问题是,我们如何处理基于AbstractComponent的外部组件的状态和状态订阅 目前,我可以使用handlePresence()方法响应状态请求,但是如何将客户端添加到组件花名册中(外部组件首先允许花名册吗) 组件没有服务器提供的花名册。如果需要,您可以将自己的花名册存储在数据库中。有些应用程序根本不需要花名册(当他们只是想
组件没有服务器提供的花名册。如果需要,您可以将自己的花名册存储在数据库中。有些应用程序根本不需要花名册(当他们只是想让每个人在线时) 要向所有人在线显示(最简单的方法,不需要花名册存储):
- 当您收到
回复 - 当您收到
回复
(或您希望显示的任何状态)
- 发件人希望订阅您的状态更新。您可以批准或拒绝此操作。如果您批准,您应该将发件人的JID存储在您的数据库中,以便您知道需要在必要时向他们发送状态更新
- 规格:
- 发件人希望停止接收您的状态更新。您应该将他们从订阅更新的人员列表中删除,然后发回
和 - 规范:(尽管本文更多地针对服务器而不是组件进行定制)
- 发件人希望停止接收您的状态更新。您应该将他们从订阅更新的人员列表中删除,然后发回
- 发件人要求您当前在场。只需回复该用户的最新状态节。这通常由用户登录时的服务器发送
。您应该准备好接受批准(
)或拒绝(
)
当组件首次联机时,它可以通过向每个用户发送
来获取用户的当前状态。组件运行时,每个用户无需多次执行此操作-如果用户如上所述批准您的订阅请求,则用户服务器将自动向您发送状态更新。如果服务器未存储组件的花名册,订阅的范围是什么?服务器重新启动后,它会继续存在吗?或者组件连接重新启动后会怎样?
@Override
protected void handlePresence(Presence presence){
if (presence.getType() == Presence.Type.subscribe){
System.out.println("The component has received Subscribtion request.");
Presence original = presence;
Presence response = new Presence();
//Swap the sender/recipient fields
response.setTo(original.getFrom());
response.setFrom(original.getTo());
//Convert the text to upper case
response.setType(Presence.Type.subscribed);
send(response);
}
}