上一篇文章,我们已经写了,单聊和注册用户,我们这节讲一下创建群聊的问题以及发送群消息
第一步,创建房间,以及房间成员加入
public String createChatRoom(String nickName, String source, String kf) throws SmackException, IOException {
HashMap<String, Object> map = new HashMap<>();
map.put("customer_id", nickName);
List<ChatGroup> list = chatGroupService.selectByMap(map);
// 组装群聊jid,这里需要注意一下,群jid的格式就是 群名称@conference.openfire服务器名称
String roomName = System.currentTimeMillis() + "";
if (list.size() > 0) {
return roomName;
}
// 管理员在每一个群里
AbstractXMPPConnection connection = getXmpptcpConnection("admin", "admin");
try {
connection.connect();
connection.login();
ConnectionMap.put("admin", connection);
String jid = roomName + "@conference." + connection.getServiceName();
EntityBareJid groupJid = JidCreate.entityBareFrom(jid);
MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection);
MultiUserChat muc = manager.getMultiUserChat(groupJid);
muc.create(Resourcepart.from("admin"));
// 获得聊天室的配置表单
Form subform = muc.getConfigurationForm();
// 根据原始表单创建一个要提交的新表单。
Form form = subform.createAnswerForm();
// 设置聊天室的新拥有者
List<String> owners = new ArrayList<>();
owners.add("admin" + "@" + openfireServer);//admin加入群成员
owners.add(nickName + "@" + openfireServer);//客户加入群成员
// 指派客服逻辑-----------------------------------------------------
EntityBareJid userJid = JidCreate.entityBareFrom(kf + "@" + openfireServer);//客服加入群成员
owners.add(userJid + "");
form.setAnswer("muc#roomconfig_passwordprotectedroom", false);
form.setAnswer("muc#roomconfig_roomname", roomName);
form.setAnswer("muc#roomconfig_persistentroom", true);
form.setAnswer("muc#roomconfig_changesubject", true);
form.setAnswer("muc#roomconfig_publicroom", true);
form.setAnswer("muc#roomconfig_allowinvites", true);
form.setAnswer("muc#roomconfig_membersonly", false);
form.setAnswer("muc#roomconfig_moderatedroom", false);
form.setAnswer("muc#roomconfig_roomowners", owners);
// muc.sendConfigurationForm(new Form(DataForm.Type.submit));
muc.sendConfigurationForm(form);
muc.join(Resourcepart.from("admin"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return roomName;
}
第二步,就是发送群消息了
@RequestMapping("/sendRoomMsg")
public void sendChatGroupMessage(String roomid, String username, String msg) throws Exception {
AbstractXMPPConnection connection = ConnectionMap.get("admin");
connection = getXmpptcpConnection("admin", "admin");
//
// 拼凑jid
connection.connect();
if (!connection.isAuthenticated()) {
connection.login();
ConnectionMap.put("admin", connection);
}
}
EntityBareJid jid = JidCreate.entityBareFrom(roomid + "@conference." + connection.getServiceName());
// 创建一个MultiUserChat
MultiUserChat muc = MultiUserChatManager.getInstanceFor(connection).getMultiUserChat(jid);
MucEnterConfiguration.Builder builder = muc.getEnterConfigurationBuilder(Resourcepart.from("admin"));
// 只获取最后99条历史记录
builder.requestNoHistory();
builder.requestMaxCharsHistory(0);
MucEnterConfiguration mucEnterConfiguration = builder.build();
// // 加入群
muc.join(mucEnterConfiguration);
muc.sendMessage(msg);
// connection.disconnect();
}
注意,上面的admin是我已经在openfire里创建好的用户