1,聊天室新旧消息的记录,先看看一段服务器返回的XML吧
<message
from='darkcave@chat.shakespeare.lit/firstwitch'
to='hecate@shakespeare.lit/broom'
type='groupchat'>
<body>Thrice the brinded cat hath mew'd.</body>
<delay xmlns='urn:xmpp:delay'
from='crone1@shakespeare.lit/desktop'
stamp='2002-10-13T23:58:37Z'/>
</message>
<message
from='darkcave@chat.shakespeare.lit/secondwitch'
to='hecate@shakespeare.lit/broom'
type='groupchat'>
<body>Thrice and once the hedge-pig whined.</body>
<delay xmlns='urn:xmpp:delay'
from='wiccarocks@shakespeare.lit/laptop'
stamp='2002-10-13T23:58:43Z'/>
</message>
<message
from='darkcave@chat.shakespeare.lit/thirdwitch'
to='hecate@shakespeare.lit/broom'
type='groupchat'>
<body>Harpier cries 'Tis time, 'tis time.</body>
<delay xmlns='urn:xmpp:delay'
from='hag66@shakespeare.lit/pda'
stamp='2002-10-13T23:58:49Z'/>
</message>
上边这段是一个聊天室返回的XML数据,是历史消息。就在这里要告诉大家的是,如果是新消息的话就没有<delay>节点。所以我们以这个为根据来判断。下边贴些我的代码,因为服务器被我们给改了,所以返回的有些出入。但八九不离十。原理一样。
DelayInformation inf = (DelayInformation) message.getExtension(
"x", "jabber:x:delay");
System.out.println("判断消息");
if (inf == null && count >= 1) {
System.out.println("新消息来了");
isHistory = true;
} else {
System.out.println("这是旧的消息");
}
这段代码写哪里呢,就是写在消息的监听里头
/**
* PacketListener 通过一个规定的过滤器提供一个机制来监听数据包
*
* @author liaonaibo
*
*/
class ChatPacketListener implements PacketListener
重写它的方法
@Override
public void processPacket(Packet packet)
好了,下边讲踢人吧
2,踢人:
踢人很简单,只要你是房主,或管理员什么的,主持人也行。这些高权限的才能有踢人的权限。
// 踢人
try {
String nickName = affiliates.get(id);
//得到的昵称包含的房间名和服务名的一段很长数据。好像是吧。哈哈,忘记了。所以截取吧
muc.kickParticipant(nickName
.substring(nickName.indexOf("]") + 1), "看你不爽就 踢了你");
android.os.Message msg = new android.os.Message();
msg.what = MEMBER;
handler.sendMessage(msg);
Toast.makeText(this, "哈哈,踹了你", Toast.LENGTH_LONG).show();
} catch (XMPPException e) {
e.printStackTrace();
Toast.makeText(this, "你没有权利踢人", Toast.LENGTH_LONG).show();
}
有的哥们会疑惑,说如果根据昵称来踢人,那会不会把重名的人都一起踢了。这个问题我也想过,这个也是测试的一个弊端。但是如果通过spark来看,即便你用同样的名字加入了房间,要么会报错,要么就是系统自动在你的名字后边加个2,呵呵,够2吧。如果有人坚持要用自己的昵称,这个可以的,具体怎么样做,下次再阐述。
分享到:
相关推荐
android studio 基于XMPP,Openfire,Smack聊天demo 基于openfire3.9.3
Android 基于xmpp协议,smack包,openfire服务端的高仿QQ的即时通讯实现.zip
高仿android qq客户端,基于xmpp openfire smack。难得的即时通信学习源码。 介绍链接: http://blog.csdn.net/shimiso/article/details/11225873
android openfire xmpp smack即时通讯,包括:聊天发生文字,表情,图片,语音。添加删除好友,消息提醒,群聊,邀请好友进入房间,聊天记录保存等等。界面美观。最后说明:此demo是在网上一个叫EIM企信通的demo基础...
Android-XMPP-openfire-实现IM
简单列一下这个客户端实现的功能: 1.聊天 2.离线消息 3.添加,删除好友 ...10.查看历史聊天记录 11.消息弹出提醒,和小气泡 .... 因为时间关系不是很完美,主要用于学习研究,欢迎大家给我提bug和改进意见。
关于Smack编程库,前面我们提到,它是面向Java端的api,主要在PC上使用,利用它我们可以向openfire服务器注册用户,发送消息,并且可以通过监听器获得此用户的应答消息,以及构建聊天室,分组,个人通讯录等等。
基于xmpp openfire smack 的即时通信客户端,高仿qq,难得的学习资源。 资源介绍:http://blog.csdn.net/shimiso/article/details/11225873
先说一下为什么要写这篇博客,是因为本人在周末在研究XMPP和OpenFire,从网上下载了个Demo,但跑不起来,花了很长时间,经改造后,跑起来了,写个篇博文也是希望后边学习XMPP和OpenFire的同学下载后直接运行,少走...
本项目是一套基于android+asmack+openfire+xmpp的安卓即时聊天服务端,项目直连google talk服务器,可以使用谷歌帐号登录客户端,测试需要至少两个谷歌帐号。在程序里添加好友即可聊天。聊天核心功能使用的smack库
XMPP+Openfire4.5.1+Smack4.3.4+MySql,支持手机对手机,手机对PC(Spark)的消息收发
Android 基于xmpp协议,smack包,openfire服务端的高仿QQ的即时通讯实现。实现了注册,登录,读取好友列表,搜索好友,添加分组,添加好友,删除好友,修改心情,两个客户端之间的信息发送与接收,监听发送来的好友...
android openfire xmpp smack即时通讯,包括:聊天发生文字,表情,图片,语音。添加删除好友,消息提醒,群聊,邀请好友进入房间,聊天记录保存等等。界面美观。最后说明:此demo是在网上一个叫EIM企信通的demo基础...
一个简单的Demo,Android工程,实现了启动Service,登陆Openfire服务器,实现简单的消息推送功能。
基于Smack3.0.4+ Openfire3.10.2开发之Android 客户端之三(用户登入、用户注册与XMPP 服务器交互)。
Asmack是smack的android版,是对xmpp协议进行了封装,并提供了丰富的api,简化了操作。Openfire是一个开源的IM服务器,基于Xmpp实现。换句话说使用xmpp开发即时通讯应用的话,服务器端已经开发好了,就是openfire。
android openfire xmpp smack即时通讯,包括:聊天发生文字,表情,图片,语音等.zip
android基于xmpp协议的即时聊天demo 可加好友,可即时聊天,可运行
基于xmpp协议的openfire android客户端,登录,接受消息