好友花名册官方解析:
ofRoster (buddy rosters or lists)Column Name Type Length Description
rosterID |
NUMBER |
n/a |
ID of roster (Primary Key) |
username |
VARCHAR |
32 |
User Name |
jid
|
TEXT
|
n/a
|
The address of the roster entry
|
sub
|
NUMBER
|
n/a
|
The subscription status of the entry
|
ask
|
NUMBER
|
n/a
|
The ask status of the entry
|
recv
|
NUMBER
|
n/a
|
Flag indicating the entry is a roster request that was received
|
nick
|
VARCHAR
|
255
|
The nickname assigned to this roster entry
|
字段的具体分析:
askstatus
-1— 没有挂起的添加好友请求。
The roster item has no pending subscription requests.
0— 有挂起的添加好友请求。
The roster item has been asked for permission to subscribe to its presence but no response has been received.
1— 估计是有没有回复的删除请求吧
The roster owner has asked the roster item to be unsubscribed from its presence notifications but hasn't yet received confi rmation.
recvstatus
-1— 已经回复添加好友请求
There are no subscriptions that have been received but not presented to the user.
1— 接收到好友请求但是没有给好友回复
The server has received a subscribe request, but has not forwarded it to the user.
2— 估计是没有回复删除请求吧
The server has received an unsubscribe request, but has not forwarded it to the user.
substatus
-1— 应该删除这个好友
Indicates that the roster item should be removed.
0— 没有建立好友关系
No subscription is established.
1— 用户已经发出好友请求
The roster owner has a subscription to the roster item’s presence.
2— 收到好友请求并且加对方好友
The roster item has a subscription to the roster owner’s presence.
3— 好友已经相互添加
The roster item and the owner have a mutual subscription.
代码操作:
PacketListener myListener = new PacketListener() {
public void processPacket(Packet packet) {
if(packet instanceof Message) {
Message message = (Message) packet;
String type = message.getType().toString();
if(type.equals("chat")) {
//接收消息
if(message.getBody()!=null){
//保存信息到客户端数据库
}
}
}
} else if(packet instanceof Presence) {
Presence presence = (Presence) packet;
String type = presence.getType().toString();
boolean b= TalkService.this.roster.contains(packet.getFrom());
Log.i(tag, b+"");
Roster roster = connection.getRoster();
RosterEntry rosterEntry = roster.getEntry(presence.getFrom());
String itemType="";
if(rosterEntry!=null){
Log.e(tag, "PacketListener Presence: rosterEntry.getName()= "+rosterEntry.getName()+
" - rosterEntry.getUser()="+rosterEntry.getUser()+
" - rosterEntry.getStatus()="+rosterEntry.getStatus()+
" -rosterEntry.getType()= "+rosterEntry.getType());
itemType=rosterEntry.getType().toString();
}
Log.e(tag, "itemType=="+itemType);
if(type.equals("subscribe")) {//我收到对方的加好友的请求
//添加好友请求
FriendRelationParam param = new FriendRelationParam();
TalkCallback callback = new TalkCallback();
callback.from = getUId(presence.getFrom());
callback.to = getUId(presence.getTo());
try {
param.callbackStr = callback.toJsonObject().toString();
} catch (Exception e) {
e.printStackTrace();
}
param.userId = Long.parseLong(callback.to);
param.friendUid = Long.parseLong(callback.from);
startFriendRelation(param);
if("none".equals(itemType)){//收到对方的加好友的请求
Log.i(tag, "type="+type+" 我收到对方的加好友的请求");
}
if("to".equals(itemType)){//我加对方好友后,对方同意,给我发回的交友请求
Log.i(tag, "type="+type+" 我加对方好友后,对方同意,给我发回的交友请求");
}
}else if("subscribed".equals(type)){//对方同意加我为好友
if("both".equals(itemType)){//双方互为好友关系建立
Log.i(tag, "type="+type+" 双方互为好友关系建立!");
}
Log.e("TalkService"+Thread.currentThread().getName(), presence.getFrom()+"同意了我["+packet.getTo()+"]的加好友请求 ");
}else if(type.equals("unsubscribe")) {//对方发起了把我删除了||或者拒绝 //拒绝的时候只会走这A
if("none".equals(itemType)){//拒绝
Log.i(tag, "type="+type+" 我被拒绝!!!");
}
if("to".equals(itemType)){//我收到被对方删除
Log.i(tag, "type="+type+" 我收到被对方删除");
}
}else if(type.equals("unsubscribed")) {//对方把我删除了 //删除的时候 会走A,同时再走一次这
if("none".equals(itemType)){// 我被删除 ,双方关系解除**************************
Log.i(tag, "type="+type+" 我被删除的!!!");
}
}else if(type.equals("available")) {//对方告诉我他在线
// presence = new Presence(Presence.Type.available);
// presence.setTo(presence.getFrom());
// connection.sendPacket(presence);
}
}else if(packet instanceof AuthMechanism) {
}
}
};
这些状态搞了几天,还是有点迷糊,大家一块分享一下心得,求共勉!!
分享到:
相关推荐
Linux环境下的openfire安装包,能够结合spark客户端进行即时通信
【标题】"openfire-red5-spark-rtmps-required-files" 涉及到的是一个针对企业内部通信的二次开发项目,它结合了Openfire、Red5和Spark这三款工具,以提供更加定制化的实时通信解决方案。 Openfire是一款开源的即时...
openfire-4.3.0-1.x86_64.rpm, 为CentOS 安装 提供,开发即时消息使用
openfire是基于XMPP协议的即时通讯框架,spark是pc客户端应用,类似qq客户端。smack提供了与XMPP服务通信的开发库。
openfire-4.2.3-1.x86_64,linux版本,openfire4.2.3最新版本
- **状态管理**:展示用户在线状态,并能处理好友的在线/离线状态变化。 4. **MyXmpp项目**: - **源码解析**:MyXmpp可能是这个项目提供的示例代码,包含了Android客户端的具体实现,例如XMPP连接、消息处理、...
- **解压文件**:使用`unrar`命令或者第三方工具解压"Openfire-linux-4.6.4.rar"。 - **启动安装**:进入解压后的目录,执行安装脚本,例如:`./install.sh`。 - **配置服务**:安装过程中,会提示配置数据库连接...
openfire的linux安装版本,下载以后将文件上传到linux某文件夹下面,然后敲“tar –xzvf openfire-3.6.2-1.i386.tar.gz mv openfire /opt”命令完成安装。完成安装以后再敲“/etc/init.d/openfire /etc/init.d/...
《Openfire 4.5.0源码解析:探索即时通讯框架的秘密》 Openfire,一个基于XMPP(Extensible Messaging and Presence Protocol)协议的开源即时通讯框架,因其高效、可扩展性和安全性,在IT领域备受青睐。4.5.0版本...
**Android-Openfire-Smack4.1.2在Android Studio中的应用详解** 在移动通信领域,即时通讯(Instant Messaging, IM)系统是不可或缺的一部分,它允许用户实时地进行文字、语音甚至视频交流。Android平台上的即时...
**Openfire 漏洞详解:CVE-2023-32315** Openfire 是一款基于 Java 的开源即时通讯服务器,它允许企业构建实时、安全的通信网络。然而,任何软件都有可能存在的安全漏洞,这正是 CVE-2023-32315 的关注点。这个安全...
openfire服务端
博客有关于openfire4.5版本idea的导入,希望各位大佬多多关注 openfire4.5导入intellij idea的maven构建地址: https://blog.csdn.net/zlvszsl/article/details/104909825
建造先决条件:使用 Maven 2.2.1 从安装 maven-openfire-plugin 获取一份openfire.jar并将其安装到 maven 中。 有几种方法可以做到,这里有两种: 选项 1. 在下载您需要的 openfire 版本的源代码然后根据源代码路径...
- 使用以下命令来启动 Openfire 服务,并检查其运行状态。 ```bash ./openfire start ./openfire status ``` ##### 5. 数据库配置 - 在 MySQL 中创建名为 `openfire` 的数据库。 ```sql CREATE DATABASE ...
同时,可以通过JavaScript API与Openfire-Oju-Plugin进行交互,实现自定义的会议功能,如自动录制、参会者管理等。 至于已知的问题,由于目前只支持64位系统,32位系统的用户需要关注开发者社区的更新动态,或者...
openfire老版本,3.7rpm版本,可以直接下载来用openfire老版本,3.7rpm版本,可以直接下载来用
Openfire 4.2.2 源码,需要使用mvn 命令编译后生成ecplise项目,在关联相关文件夹就行了。 Openfire is a real time collaboration (RTC) server licensed under the Open Source Apache License.
此外,还可以学习到如何处理群聊管理、用户状态管理等相关功能,对于想要深入了解即时通讯系统开发的人员来说,这是一个宝贵的资源。 在实际应用中,开发者可能需要对源码进行如下扩展和优化: - **安全增强**:...
Pàdéfor Openfire该项目为Openfire提供了基于Web的统一通信解决方案。基于点对点的聊天,持续的群聊,音频,视频会议和实时流媒体,电话会议它包括第三方产品,特别是: 项目; 项目; Web客户端。 项目。基于项目...