实现方案:
1、插件中调用openfire api,实践发现api中接口参数部分无法确定,且部分api不是public类型,无法直接调用,方案舍弃
2、发送出席信息(通过xmpp协议),此方案可行
具体代码
String userAccount = XmppStringUtils.parseLocalpart(userJid.toString());
try {
String userName = UserNameManager.getUserName(userJid,userAccount);
Presence presence = new Presence();
presence.addChildElement("x", "http://jabber.org/protocol/muc");
presence.setTo(mucRoom.getJID()+"/"+userName);
presence.setFrom(userJid);
Log.info("aaaa="+presence.toXML());
XMPPServer.getInstance().getPresenceRouter().route(presence);
} catch (UserNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
userName直接赋值也可以,为用户在房间中的名称,mucRoom.getJID()为房间jid
即在用户登录后(插件实现SessionEventListener接口,在session创建时,即为用户登录<用户登录后服务端会创建一个对应的session>)
@Override
public void sessionCreated(Session session) {
userJid = session.getAddress();
System.out.println("sessionCreated ----");
Log.info(userJid+" login-----");
}
发送presence节为
<presence
from="hag66@shakespeare.lit/pda"
to='darkcave@macbeth.shakespeare.lit/thirdwitch'>
<x xmlns='http://jabber.org/protocol/muc'/>
</presence>
待解决:服务端加群后还不知道怎么添加消息监听
参考:
XEP-0045协议中文版文档 7.1章节,例子18
XEP-0045协议英文版
Openfire实现QQ群功能
https://blog.youkuaiyun.com/xiao__gui/article/details/42642573
https://blog.youkuaiyun.com/yangzl2008/article/details/16991175
https://blog.youkuaiyun.com/ajian759447583/article/details/36672945
https://blog.youkuaiyun.com/ldwtill/article/details/18258453