`
linyu19872008
  • 浏览: 281201 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

smack/asmack 监听特定报文代码

 
阅读更多

首先需要两个类

import org.jivesoftware.smack.packet.PacketExtension;


public class XtalkMessage implements PacketExtension {

	private StringBuffer packetContent = null;
	
	public static final String ELEMENT_NAME="xtalk";
	public static final String NAME_SPACE="urn:xmpp:xtalk:dd";
	
	public StringBuffer getPacketContent() {
		return packetContent;
	}
	
	public void setPacketContent(StringBuffer packetContent) {
		this.packetContent = packetContent;
	}
	
	
	@Override
	public String getElementName() {
		// TODO Auto-generated method stub
		return ELEMENT_NAME;
	}

	@Override
	public String getNamespace() {
		// TODO Auto-generated method stub
		return NAME_SPACE;
	}

	@Override
	public String toXML() {
		// TODO Auto-generated method stub
		return packetContent.toString();
	}

}

 

import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smack.provider.PacketExtensionProvider;
import org.jivesoftware.smack.util.StringUtils;
import org.xmlpull.v1.XmlPullParser;

public class XtalkMessageProvider implements PacketExtensionProvider {

	public XtalkMessageProvider() {
	}

	public PacketExtension parseExtension(XmlPullParser parser)
			throws Exception {
		XtalkMessage messageEvent = new XtalkMessage();
		StringBuffer buffer = new StringBuffer();
		boolean done = false;
		int oldNsCount = 0;
		oldNsCount = parser.getNamespaceCount(parser.getDepth());
		while (!done) {
			int eventType = parser.next();
			if (eventType == XmlPullParser.START_TAG) {
				buffer.append('<' + parser.getName());
				int ns = parser.getNamespaceCount(parser.getDepth());
				for (int i = oldNsCount; i < ns; i++) {
					if (parser.getNamespacePrefix(i) != null) {
						buffer.append("  xmlns:")
								.append(parser.getNamespacePrefix(i))
								.append("=\"")
								.append(parser.getNamespaceUri(i)).append("\"");
					} else {
						buffer.append("  xmlns=\"")
								.append(parser.getNamespaceUri(i)).append("\"");
					}
				}
				oldNsCount = ns;
				for (int i = 0; i < parser.getAttributeCount(); i++) {
					buffer.append(" ").append(parser.getAttributeName(i))
							.append("=");
					buffer.append("\"").append(parser.getAttributeValue(i))
							.append("\"");
				}
				buffer.append('>');
			} else if (eventType == XmlPullParser.TEXT) {
				// System.out.println("XmlPullParser.TEXT:"
				// + StringUtils.escapeForXML(parser.getText()));
				//buffer.append(StringUtils.escapeForXML(parser.getText()));                               buffer.append(parser.getText());
			} else if (eventType == XmlPullParser.END_TAG) {
				if (parser.getName().equals(XtalkMessage.ELEMENT_NAME)) {
					done = true;
				} else {
					buffer.append("</" + parser.getName() + '>');
				}
			}
		}
		// System.out.println(TAG + " PacketExtension:" + buffer.toString());
		messageEvent.setPacketContent(buffer);
		return messageEvent;
	}
}

 

在主程序中调用如下

ProviderManager.getInstance().addExtensionProvider(
				XtalkMessage.ELEMENT_NAME, XtalkMessage.NAME_SPACE,
				new XtalkMessageProvider());

 

分享到:
评论

相关推荐

    smack与asmack的区别(包名对比解析)

    ### smack与asmack的区别(包名对比解析) #### 引言 在Java开发领域,特别是针对即时通讯(Instant Messaging, IM)应用时,开发者经常会在选择XMPP客户端库上遇到抉择,其中最为人熟知的就是Smack与ASmack。本文...

    asmack源码包

    asmack是Smack库的一个分支,针对Android平台进行了优化,解决了原版Smack在Android系统上运行时的一些兼容性和性能问题。 **二、asmack与XMPP** 1. **XMPP协议基础**:XMPP是一个开放标准,它允许用户进行实时...

    asmack.rar源代码

    ASMack是基于Smack库的,针对Android平台进行了优化,解决了Smack在Android上的兼容性和性能问题。 在Android开发中,如果你需要构建一个支持聊天、群组、文件传输等功能的即时通讯应用,ASMack是一个值得考虑的库...

    smack4.3.1

    7. **扩展性**:Smack 提供了丰富的扩展点,允许开发者自定义协议处理,实现更复杂的功能,如自定义 stanza 类型、事件监听等。 **文档资源** 在压缩包中,"releasedocs"目录包含了Smack 4.3.1的官方发布文档,这...

    smack 中文文档

    由于 Android 的 Java 库与标准 Java 环境有所不同,ASMack 解决了在 Android 上运行 Smack 时遇到的一些兼容性问题,使得开发者可以在 Android 应用中使用 XMPP 服务。 **XMPP 协议介绍** XMPP 是基于 XML 的即时...

    aSmack测试代码,即时会话,群组聊天

    **aSmack测试代码详解——即时会话与群组聊天** aSmack是Android平台上一个流行的XMPP(Extensible Messaging and Presence Protocol)库,用于实现即时通讯功能。它基于Java的Smack库,并针对Android环境进行了...

    Smack帮助文档中文版

    "Smack帮助文档中文版"提供了一个很好的起点,它详细介绍了Smack和Asmack的API用法、示例代码和最佳实践。此外,官方文档、社区论坛以及Stack Overflow上的相关问题和答案都是深入学习和解决问题的重要资源。 总之...

    asmack的源代码

    **asmack源代码详解** **一、asmack简介** asmack是Smack开源库的一个分支,专门针对Android平台进行了优化,使得在Android设备上能够更好地支持XMPP(Extensible Messaging and Presence Protocol)协议。XMPP是...

    aSmack smack api 英文全版

    smack API文档,aSmack通用,英文版,即时通讯开发值得参考

    asmack源代码

    在Asmack中,如果没有具体说明,通常表示这部分代码可能与主要的XMPP功能有关,但可能具有特定的实现或地域特色。 5. **org.jivesoftware.smackx**: 这个扩展包包含了对XMPP标准扩展(XEPs)的支持,比如文件传输...

    websocket+smack+openfire的的源代码

    开发者可以通过这些源代码学习如何在实际项目中集成WebSocket、Smack和Openfire,实现一个高效且功能丰富的即时通讯系统。 具体到源代码的学习,你可以关注以下几个方面: 1. WebSocket服务器的实现:如何监听...

    asmack源码

    而`de`包可能包含了一些特定的第三方库或者德国开发者贡献的代码。 在开发过程中,理解ASMack的包结构和类关系至关重要。通过深入学习ASMack的源码,开发者可以更好地理解XMPP协议的工作原理,定制自己的解决方案,...

    android IM

    asmack :http://code.google.com/p/asmack/downloads/list 用androidpn来实现推送:http://www.iteye.com/topic/1117043 AndroidPN环境建立 :http://www.cnblogs.com/devxiaobai/archive/2011/07/09/2101794.html...

    Android Smack 注册登陆,单聊,群聊消息监听

    总结,使用Android Smack库开发即时通讯应用,开发者需要理解XMPP协议的基础概念,掌握Smack的初始化、连接、注册登录、消息发送与接收以及监听机制。通过实践和不断优化,可以构建出高效、稳定的IM系统。对于初学者...

    asmack类库

    - **事件驱动**:asmack采用事件驱动的编程模型,允许开发者在特定事件(如接收到新消息)发生时执行相应的处理代码。 - **资源管理**:asmack提供了高效的连接管理和资源分配,确保了在网络不稳定时仍能保持良好的...

    asmack, 在Android上,一个用于XMPP客户端库的构建.zip

    asmack, 在Android上,一个用于XMPP客户端库的构建 aSmack ( 已经过时/已经过时) - Android上的Smack buildsystem不再需要:aSmack不再需要使用 Smack 4.1aSmack已经过时且已经过时。 以版本 4.1 Smack为起点,无需...

    asmack源码(asmack-android-18-source-0.8.9)

    asmack是Android平台上一个流行的XMPP(Extensible Messaging and Presence Protocol)库的开源实现,它基于Smack库并针对Android进行了优化。这个源码包"asmack-android-18-source-0.8.9"是特定于Android API Level...

    asmack-4.0.7源码

    ASMACK是Smack库的一个增强版本,针对Android平台进行了优化,解决了在Android设备上进行文件传输和其他XMPP相关操作时可能遇到的问题。它提供了丰富的API接口,使得开发者能够轻松地集成聊天、群聊、文件传输等功能...

    asmack 4.0.5 帮助文档

    ASMack 4.0.5是该库的一个特定版本,它包含了对Android系统特性的支持和一些特定的bug修复。由于ASMack在后续时间里更新缓慢,开发者可能会遇到一些未被官方解决的bug,因此这份帮助文档就显得尤为重要。通过这份...

Global site tag (gtag.js) - Google Analytics