java smack 例子_java+smack+openfire即时通讯Im(四)
### java+smack+openfire即时通讯Im(四) ###
* 创建群聊
* 加入群聊
# 创建群聊 #
前面的单聊完成以后,就开始群聊的功能把,首先是创建群聊:
后端进行群组创建:
/***
*
* 方法名称:createMutiUserChat
* 概要说明:创建群聊
*
* @param userName
* @param password
* @param roomName
* @param roomDesc
* @return void
*
* @author ZhangYH
* @date 2020/06/17 10:18:08
*/
public static String createMutiUserChat(String userName, String password,String roomName,String roomDesc){
//默认使用创建人用户名+时间戳为房间ID
String roomId = userName+"_"+System.currentTimeMillis();
try {
XMPPTCPConnection connection = initOpenfireConnect();
connection.login(userName,password);
//获取房间管理对象
MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection);
//创建一个房间
MultiUserChat muc = manager.getMultiUserChat(roomId+"@conference."+OPENFIRE_SERVICE_NAME);
muc.create(userName);
// User1 (which is the room owner) configures the room as a moderated room
Form form = muc.getConfigurationForm();
Form answerForm = form.createAnswerForm();
//向提交的表单添加默认答复,获取房间的默认设置菜单
for(FormField field : form.getFields() ){
if(!FormField.Type.hidden.name().equals(field.getType()) && field.getVariable() != null) {
answerForm.setDefaultAnswer(field.getVariable());
}
}
//muc#
//房间名称
answerForm.setAnswer(FormField.FORM_TYPE, "http://jabber.org/protocol/muc#roomconfig");
//设置房间名称
answerForm.setAnswer("muc#roomconfig_roomname",roomName);
//设置房间描述
answerForm.setAnswer("muc#roomconfig_roomdesc", roomDesc);
//是否允许修改主题
answerForm.setAnswer("muc#roomconfig_changesubject", true);
//设置房间最大用户数
List maxusers = new ArrayList();
maxusers.add("100");
answerForm.setAnswer("muc#roomconfig_maxusers", maxusers);
List cast_values = new ArrayList();
cast_values.add("moderator");
cast_values.add("participant");
cast_values.add("visitor");
answerForm.setAnswer("muc#roomconfig_presencebroadcast", cast_values);
//设置为公共房间
answerForm.setAnswer("muc#roomconfig_publicroom", true);
//设置为永久房间
answerForm.setAnswer("muc#roomconfig_persistentroom", true);
//允许修改昵称
answerForm.setAnswer("x-muc#roomconfig_canchangenick", true);
//允许用户登录注册房间
answerForm.setAnswer("x-muc#roomconfig_registration", true);
muc.sendConfigurationForm(answerForm);
muc.join(userName);
//关闭连接
closeConnection(connection);
return roomId;
}catch (Exception e){
e.printStackTrace();
}
return roomId;
}
# 加入群聊 #
/***
*
* 方法名称:joinMultiUserChat
* 概要说明:加入群聊
*
* @param userName
* @param password
* @param roomId
* @return void
*
* @author ZhangYH
* @date 2020/06/17 10:30:28
*/
public static void joinMultiUserChat(String userName, String password, String roomId) {
try {
XMPPTCPConnection connection = initOpenfireConnect();
connection.login(userName,password);
// 使用XMPPConnection创建一个MultiUserChat窗口
MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection);
//获取会议室信息
MultiUserChat muc = manager.getMultiUserChat(roomId+"@conference."+OPENFIRE_SERVICE_NAME);
// 聊天室服务将会决定要接受的历史记录数量
DiscussionHistory history = new DiscussionHistory();
history.setMaxStanzas(0);
//history.setSince(new Date());
// 用户加入聊天室
muc.join(userName, password, history, System.currentTimeMillis());
System.out.println("群聊加入成功........");
//关闭连接
closeConnection(connection);
}catch (Exception e){
e.printStackTrace();
}
}
注:openfire的群聊机制是这样的:建群的时候必须要设置群组信息持久化(answerForm.setAnswer(“muc\#roomconfig\_persistentroom”, true);),要不然过一段时间群聊会自动删除的,还有就是添加成员进入群聊以后,当成员下线以后会自动将下线的成员踢出群聊。
java smack 例子_java+smack+openfire即时通讯Im(四)相关推荐
- agsXMPP + Openfire 即时通讯开发(二) 【文件传输】
上篇bolg(agsXMPP + Openfire 即时通讯开发(一) [agsXMPP 连接 Openfire])中agsXMPP的MiniClient已经可以相互之间进行通讯了,本篇介绍如何进行文 ...
- bs模式Java web,基于BS模式的即时通讯系统的设计与实现(MyEclipse)
基于BS模式的即时通讯系统的设计与实现(MyEclipse)(包含选题审批表,任务书,开题报告,中期检查表,毕业论文13000字,答辩记录,成绩评定册,源程序) 摘 要:即时通讯(Instant M ...
- 实现Web端即时通讯的四种方式
Web端即时通讯技术:即时通讯技术简单的说就是实现这样一种功能:服务器端可以即时地将数据的更新或变化反应到客户端,例如消息即时推送等功能都是通过这种技术实现的.但是在Web中,由于浏览器的限制,实现即 ...
- java代码例子_Java与C++两大语言比较
Java Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程 ...
- java 泛型例子_java中的泛型的一些常见例子
/** * @author Rollen-Holt 使用泛型 */ class hello { hello(){ } public T getName(){ return name; } public ...
- java 序列化 例子_Java序列化和反序列化例子
下面是编程之家 jb51.cc 通过网络收集整理的代码片段.@H_502_1@ 编程之家小编现在分享给大家,也给大家做个参考.@H_502_1@ /** * 对象序列化与反序列化 * */ impor ...
- java protobuf 例子_java使用protobuf例子
Protobuf版本:2.5.0 最近研究Hadoop时,发现Hadoop的RPC使用到了Protobuf这个东西,于是就了解了这个 Protobuf Protobuf是google的一种数据交互格式 ...
- java初始化例子_Java 非静态初始化的例子
在继承关系中,静态初始化.非静态初始化和构造函数的执行顺序 public class ExA { static { System.out.println("父类--静态代码块"); ...
- java+mock+例子_java – 如何使用PowerMock和Mockito模拟枚举类的实例?
我试着按照这个非常相似的问题的答案提供的例子,但它对我不起作用.我收到以下错误消息: java.lang.IllegalArgumentException: Cannot subclass final ...
最新文章
- linux驱动:设备-总线-驱动(以TI+DM8127中GPIO为例)
- 数据录入工作,使用VBA
- 用python实现图书管理系统
- MFC UI按钮多线程
- 【PAT甲级 最长公共子串】1007 Maximum Subsequence Sum (25 分) C++ 全部AC
- 吸尘车-真空吸尘车:真空吸尘车
- Magento搬家、换域名、重新安装教程
- 服务器里的文件链接地址怎么写,服务器里的文件链接地址怎么写
- 如何实现LBS轨迹回放功能?含多平台实现代码
- 零基础使用pscc 证件照换底色
- 仙剑奇侠传五破解方法(虚拟机版)
- 最新互联网架构师视频教程+源码20G
- 什么是DNS?为什么选择UDP?详细的DNS解析过程?
- 简单介绍 内网与外网IP地址,域名,子网掩码,网关与路由器,ping
- Flutter 吐司弹框的使用 showToast弹框(插件)
- 现代操作系统学习笔记三、死锁
- 计算机软考初级网络管理员——计算机科学基础笔记
- VSCode使用Dart和lutter所需按照的插件
- 使用frp实现内网穿透(含SSH、远程桌面、文件访问等)
- jad文件生成工具--jad easy
热门文章
- Javascript 模块化指北
- 全球云端数据仓库领导者 MaxCompute 将于本月10日正式开服美东节点
- “匿名句柄” 是一切皆文件背后功臣……
- 对话MathWorks:解读MATLAB技术生态圈与未来趋势
- 996!007!同是敲了2万行代码,为什么他却晋升了?
- IEEE 回应禁止华为系审稿人;WiFi联盟、蓝牙联盟已恢复华为成员资格;中国计算机学会:暂时中止与IEEE通信学会合作……...
- ZStack张鑫:面对混合云浪潮 我们主动出击
- coding ssh端口指定_443 端口的 SSH 服务
- docker rabbitmq:3.9.10-management
- 解决 mysql>com.mysql.jdbc.PacketTooBigException: Packet for query is too large (12073681 > 4194304)