您的位置:首页 > 移动开发 > Android开发

Android xmpp协议 之 openfire 通讯

2015-08-06 11:43 351 查看


1、smack.jar中相关类概述

PacketListener 接收消息类 (单聊、聊天室)
@Override
public void processPacket(Packet packet) {

if (packet instanceof Message) {
Message message = (Message) packet;
if (TextUtils.isEmpty(message.getBody())) {
return;
}
if (Message.Type.groupchat.equals(message.getType())){
helper.push(message);
} else if (Message.Type.chat.equals(message.getType())){
helper.push(message);
}
} else if (packet instanceof Presence) {
loadGroup(packet);
}
}


根据 message可以获取 在线消息 Message.Type.groupchat 聊天室消息; Message.Type.chat 单聊消息
根据 Presence可以获取 成员状态

Presence pre = (Presence) packet;
if (Presence.Type.unavailable.equals(pre.getType())) {
/**
* 监听退出聊天室
*/
String str[] = pre.getFrom().split("/");
String strRoom[] = str[0].split("@");
} else if (Presence.Type.available.equals(pre.getType())) {
/**
* 监听加入聊天室
*/
String str[] = pre.getFrom().split("/");
String strRoom[] = str[0].split("@");
}


根据 InvitationListener 监听聊天室邀请
@Override
public void invitationReceived(Connection conn, String roomJid,
String inviter, String reason, String password, Message message) {

String str[] = reason.split("/");
String roomName  = str[0];
String roomOwner = str[1];
String roomId = SmackUtil.getRoom(roomJid);

try {
// 监听群组邀请
MultiUserChat muc = new MultiUserChat(conn, roomJid);
if (muc != null) {

muc.addParticipantStatusListener(statusListener);

// 聊天室服务将会决定要接受的历史记录数量
DiscussionHistory history = new DiscussionHistory();
history.setSince(DateUtils.minusDate(new Date(), 2));
muc.join(XmppUtils.USER_ACCOUNT,
password, history,SmackConfiguration.getPacketReplyTimeout());

}
} catch (XMPPException e) {
Log.i("XmppService - invitationListener:" + e.getMessage());
}
}


ConnectionListener 获取重连接
@Override
public void connectionClosed() {
Log.i("MyConnectionListener  - connectionClosed");

XmppUtils.closeConn();

// 重连服务器
tExit = new Timer();
tExit.schedule(new Timetask(), logintime);
}

@Override
public void connectionClosedOnError(Exception e) {
Log.i("MyConnectionListener  - connectionClosedOnError");

boolean error = e.getMessage().equals("stream:error (conflict)");
if (!error) {
XmppUtils.closeConn();
// 重连服务器
tExit = new Timer();
tExit.schedule(new Timetask(), logintime);
}
}

@Override
public void reconnectingIn(int arg0) {

Log.i("MyConnectionListener  - reconnectingIn: " + arg0);
}

@Override
public void reconnectionFailed(Exception arg0) {

Log.i("MyConnectionListener  - reconnectionFailed: " + arg0);
}

@Override
public void reconnectionSuccessful() {

Log.i("MyConnectionListener  - reconnectionSuccessful: " );

/**
* 获取IM离线消息
*/
getOffline();

/**
* 发送在线状态
*/
XmppUtils.updateToAvailable();

}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: