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);),要不然过一段时间群聊会自动删除的,还有就是添加成员进入群聊以后,当成员下线以后会自动将下线的成员踢出群聊。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 常量区存放 new_java---堆、栈、常量池的存储数据

说到Java中堆、栈和常量池,首先还是看看他们各自存放的数据类型吧!栈:Java的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)也叫静态存储区。堆区:(存放所有new出来的对象;)1.存储的全部是对象&#xff0c…

log加时间 securecrt_SecureCRT配置自动记录日志

很多人用SecureCRT时,希望自动记录日志,一个是方便以后查阅,一个是对自己的操作有个记录。可以看看自己做了什么操作,有时甚至可以看看之前是不是犯了什么错,是个很不错的功能。设置很简单,还可以根据连接的…

java txt 按行读取_java读取按行txt文件

import java.io.BufferedReader;import java.io.FileInputStream;import java.io.InputStreamReader;public class T {public static void main(String[] args) throws Exception{long startTimeSystem.currentTimeMillis(); //获取开始时间FileInputStream filestreamnew File…

java泛型改进_java泛型高级篇 - 真正理解协变与逆变 | 鱼儿的博客

无论你是否听过java泛型的协变与逆变,我们直接进入例子,一起来看一下java泛型比较高级的用法。例子1:copy函数第1个例子我们实现copy函数,它将List中的元素复制到List中。JavaList src Arrays.asList(1,2,3,4,5);List dst new A…

java中br.readline_java中br.readLine与 br.read的用法有什么区别??

报错?请发送错误信息为了帮助理解我写了一个测试类,请参照import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;public class T0517 {public static void main(String[] args) {FileReader input;try …

java实训遇到问题解决_「instantiationexception」关于java出现 java.lang.InstantiationException异常的分析与解决方案 - seo实验室...

instantiationexceptionjava.lang.instantiationexception 是指不能实例化某个对象,一般在我们使用java反射机制去创建某个对象的时候实例化到了一个抽象类或者接口(java中抽象类和接口是不能被实例化),而今天我遇到的则是我在使用反射机制实例化某个持久…

java对外发布接口文档_java之接口文档规范

一、xxxxxx获取指定任务爬取的所有url的接口接口名称:xxxxxx获取指定任务爬取的所有url的接口访问链接:http://IP:PORT/crwalTask/findUrlExceptionById?ctIdctIdVal&timetimeVal&limitlimitVal传入参数类型:String,int参数内容:返回…

java怎么跟qtp脚本传参数_QTP多个Action之间传递参数的方法详解

脚本的朋友们都会碰到多个Action之间传递参数的问题,想当年我也是研究了好久才成功的,网上虽然有很多文章都在讲这个问题,但是大多都是雷同的抄来抄去不能解决实际问题,也有可能是我太笨了吧。下面我们来详细讲一下QTP多个Action之…

mysql 哈希缓存_MySQL数据库性能优化思路总结

本文主要是自己记录在MySQL开发学习过程中遇到的数据库新能优化方向利用缓存缓存这个方面,可以说是一个技术,也可以说是一个思路和方向从技术手段上讲使用一些缓存插件,只需要确定创建、更新缓存的时机,以及清理缓存的时机就可以了…

java画好看坦克_坦克大战第一节——画出自己的坦克(新手篇)

刚刚开始学习java,对java不是很熟悉,但是自己的兴趣挺喜欢java。现在自己在自学java做一个小游戏,坦克大战。自己现在完成了画出自己的坦克和坦克的移动方向。希望各位大神指导一下我这个刚刚学java的新手小白。我会每完成一个阶段&#xff0…

java中timer类包_Java~util包中Timer的使用, 演示cancel方法 和 对比schedule和scheduleAtFixedRate方法...

TimerTimer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类执行计划任务的代码要放人TimerTask的子类中,因为TimerTask是一个抽象类。而且要重写其run方法 因为这是一个抽象方法.常见问题任务执行完了, 但进程并没有销毁,通过源码查看构造方…

scala java抽象理解_Scala之类、特质和抽象类

1. 类1.1. 类的定义类的定义://定义Point类,构造器带有两个参数class Point(var x: Int, var y: Int) {//无返回值的类方法def move(dx: Int, dy: Int): Unit {x x dxy y dy}//没有参数但是返回值为String类型的重写方法override def toString: Str…

centos eclipse java_CentOS7 安装 Eclipse

咳咳, 虽然大神的 Linux 都是命令行的, 但是谁让 LZ 是 LJ, 桌面开俩终端不觉得更好么。。。CentOS7 安装 Eclipse, 比在 Window 系统下安装 Eclipse 要复杂得多。。参考 : https://segmentfault.com/a/11900000026517…

iap java md5_苹果应用内支付(iOS IAP)的流程与常用攻击方式

1. 客户端直接verify苹果的receipt 如果verify成功 自行发放商品2. 客户端将receipt传给server,由server进行验证并发放商品按照安全性原则, 客户端的所有信息都是不可信的,而且支付是业务中的核心模块,所以应该选择第二种。下面简要介绍下,第二种方式的简单流程。1. 客户端支付…

java opencv orb_opencv python ORB算法

理论ORB(Oriented FAST and Rotated BRIEF)是一种快速特征点提取和描述的算法,这个算法是由Ethan Rublee, Vincent Rabaud, Kurt Konolige以及Gary R.Bradski在2011年一篇名为“ORB:An Efficient Alternative to SIFTor SURF”的文章中提出.ORB算法分为两部分&#…

php中define的参数_php中define的用法有哪些

php中define的用法:1、【define()】函数定义一个常量;2、定义常量名称及值,代码为【define(name,value,case_insensitive)】;3、定义一个大小写敏感的常量。php中define的用法:1、define()函数理解1define()函数定义一…

php 判断是否文件,php 判断是否一个文件的函数is_file()应用举例

php手册中关于此函数的介绍。php is_file 判断是否为文件的代码is_file() 函数检查指定的文件名是否是正常的文件。is_file — Tells whether the filename is a regular file用法bool is_file ( string $filename ) $file 为必选参数如果文件存在且为正常的文件则返回 TRUE。例…

php 登陆微博,PHP调用微博接口实现微博登录的方法示例

在平时项目开发过程中,除了注册本网站账号进行登录之外,还可以调用第三方接口进行登录网站。这里以微博登录为例。微博登录包括身份认证、用户关系以及内容传播。允许用户使用微博帐号登录访问第三方网站,分享内容,同步信息。1、首…

php计算结果排序,php-按从数组计算出的值对数组进行排序

我从阵列中的数据库中获得了用户的经纬度我有我的经纬现在,我要计算距离并使用该距离对数据库中的用户进行排序$mylat $_SESSION[lat];$mylng $_SESSION[lng];$statement $pdo->prepare("SELECT * FROM users");$statement->execute();$users $statement-&…

php获取音频的时长,PHP编程获取音频文件时长的方法【基于getid3类】

本文实例讲述了PHP编程获取音频文件时长的方法。分享给大家供大家参考,具体如下:问题:昨天在新增论坛功能的时候,移动端显示音频文件需要知道是多长的音频;具体解决方案如下:首先就是数据库中增加保存音频文…