Android xmpp协议 之 openfire 通讯

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





	

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值