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();
}