### 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(四)相关推荐

  1. agsXMPP + Openfire 即时通讯开发(二) 【文件传输】

    上篇bolg(agsXMPP + Openfire 即时通讯开发(一) [agsXMPP 连接 Openfire])中agsXMPP的MiniClient已经可以相互之间进行通讯了,本篇介绍如何进行文 ...

  2. bs模式Java web,基于BS模式的即时通讯系统的设计与实现(MyEclipse)

    基于BS模式的即时通讯系统的设计与实现(MyEclipse)(包含选题审批表,任务书,开题报告,中期检查表,毕业论文13000字,答辩记录,成绩评定册,源程序) 摘  要:即时通讯(Instant M ...

  3. 实现Web端即时通讯的四种方式

    Web端即时通讯技术:即时通讯技术简单的说就是实现这样一种功能:服务器端可以即时地将数据的更新或变化反应到客户端,例如消息即时推送等功能都是通过这种技术实现的.但是在Web中,由于浏览器的限制,实现即 ...

  4. java代码例子_Java与C++两大语言比较

    Java Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程 ...

  5. java 泛型例子_java中的泛型的一些常见例子

    /** * @author Rollen-Holt 使用泛型 */ class hello { hello(){ } public T getName(){ return name; } public ...

  6. java 序列化 例子_Java序列化和反序列化例子

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段.@H_502_1@ 编程之家小编现在分享给大家,也给大家做个参考.@H_502_1@ /** * 对象序列化与反序列化 * */ impor ...

  7. java protobuf 例子_java使用protobuf例子

    Protobuf版本:2.5.0 最近研究Hadoop时,发现Hadoop的RPC使用到了Protobuf这个东西,于是就了解了这个 Protobuf Protobuf是google的一种数据交互格式 ...

  8. java初始化例子_Java 非静态初始化的例子

    在继承关系中,静态初始化.非静态初始化和构造函数的执行顺序 public class ExA { static { System.out.println("父类--静态代码块"); ...

  9. java+mock+例子_java – 如何使用PowerMock和Mockito模拟枚举类的实例?

    我试着按照这个非常相似的问题的答案提供的例子,但它对我不起作用.我收到以下错误消息: java.lang.IllegalArgumentException: Cannot subclass final ...

最新文章

  1. linux驱动:设备-总线-驱动(以TI+DM8127中GPIO为例)
  2. 数据录入工作,使用VBA
  3. 用python实现图书管理系统
  4. MFC UI按钮多线程
  5. 【PAT甲级 最长公共子串】1007 Maximum Subsequence Sum (25 分) C++ 全部AC
  6. 吸尘车-真空吸尘车:真空吸尘车
  7. Magento搬家、换域名、重新安装教程
  8. 服务器里的文件链接地址怎么写,服务器里的文件链接地址怎么写
  9. 如何实现LBS轨迹回放功能?含多平台实现代码
  10. 零基础使用pscc 证件照换底色
  11. 仙剑奇侠传五破解方法(虚拟机版)
  12. 最新互联网架构师视频教程+源码20G
  13. 什么是DNS?为什么选择UDP?详细的DNS解析过程?
  14. 简单介绍 内网与外网IP地址,域名,子网掩码,网关与路由器,ping
  15. Flutter 吐司弹框的使用 showToast弹框(插件)
  16. 现代操作系统学习笔记三、死锁
  17. 计算机软考初级网络管理员——计算机科学基础笔记
  18. VSCode使用Dart和lutter所需按照的插件
  19. 使用frp实现内网穿透(含SSH、远程桌面、文件访问等)
  20. jad文件生成工具--jad easy

热门文章

  1. Javascript 模块化指北
  2. 全球云端数据仓库领导者 MaxCompute 将于本月10日正式开服美东节点
  3. “匿名句柄” 是一切皆文件背后功臣……
  4. 对话MathWorks:解读MATLAB技术生态圈与未来趋势
  5. 996!007!同是敲了2万行代码,为什么他却晋升了?
  6. IEEE 回应禁止华为系审稿人;WiFi联盟、蓝牙联盟已恢复华为成员资格;中国计算机学会:暂时中止与IEEE通信学会合作……...
  7. ZStack张鑫:面对混合云浪潮 我们主动出击
  8. coding ssh端口指定_443 端口的 SSH 服务
  9. docker rabbitmq:3.9.10-management
  10. 解决 mysql>com.mysql.jdbc.PacketTooBigException: Packet for query is too large (12073681 > 4194304)