Smack Message 扩展属性

Smack Message 扩展属性

   

由于XMPP不支持群聊很多本地化的服务,

针对Openfire开发插件解决问题:

Message 扩展:


[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. Message videoMsg = new Message();  
  2. VideoChatRTP videoXml = new VideoChatRTP();  
  3. //扩展类型  
  4. videoXml.setVideoType(VideoMediaType.REQUEST);  
  5. //请求类型  
  6. videoXml.setAddress(address);  
  7. //地址  
  8. videoMsg.setTo(receive);  
  9. videoMsg.addExtension(videoXml);  
  10. //message扩展  
  11.   
  12. XMPPConnection conn = BaseService.getInstance().getConnection();  
  13. conn.sendPacket(videoMsg);  


扩展类必须继承PacketExtension

以下是段简单的实例:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class VideoChatRTP implements PacketExtension {  
  2.     private VideoMediaType videoType;  
  3.     private String address;  
  4.   
  5.     public String getAddress() {  
  6.         return address;  
  7.     }  
  8.   
  9.     public void setAddress(String address) {  
  10.         this.address = address;  
  11.     }  
  12.   
  13.     public VideoMediaType getVideoType() {  
  14.         return videoType;  
  15.     }  
  16.   
  17.     public void setVideoType(VideoMediaType videoType) {  
  18.         this.videoType = videoType;  
  19.     }  
  20.   
  21.     public static final String NAME = "jingle";  
  22.     public static final String NAME_SPACE = "com:roger:video";  
  23.   
  24.     public VideoChatRTP() {  
  25.         super();  
  26.     }  
  27.   
  28.     @Override  
  29.     public String getElementName() {  
  30.         return NAME;  
  31.     }  
  32.   
  33.     @Override  
  34.     public String getNamespace() {  
  35.         return NAME_SPACE;  
  36.     }  
  37.   
  38.     @Override  
  39.     public String toXML() {  
  40.         StringBuffer sb = new StringBuffer();  
  41.         sb.append("<jingle").append(" xmlns=\"").append(NAME_SPACE).append(  
  42.                 "\">");  
  43.         sb.append("<type>").append(videoType).append("</type>");  
  44.         sb.append("<ipAddress>").append(address).append("</ipAddress>");  
  45.         sb.append("</jingle>");  
  46.         return sb.toString();  
  47.     }  
  48. }  

扩展类型监听方法:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ProviderManager.getInstance().addExtensionProvider(VideoChatRTP.NAME, VideoChatRTP.NAME_SPACE, new VideoChatReceive());  

扩展类型处理类(实现PacketExtensionProvider接口):

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public class VideoChatReceive implements PacketExtensionProvider {  
  2.   
  3.     /** 
  4.      * 处理视频扩展类型message 
  5.      * */  
  6.     @Override  
  7.     public PacketExtension parseExtension(XmlPullParser parser)  
  8.             throws Exception {  
  9.         boolean done = false;  
  10.         String requestType = "asdasd";  
  11.         String ipAddress = "asdasd";  
  12.         while (!done) {  
  13.             int eventType = parser.next();  
  14.   
  15.             String name = parser.getName();  
  16.             // XML Tab标签  
  17.             if (eventType == XmlPullParser.START_TAG) {  
  18.                 if (name.equals("type")) {  
  19.                     requestType = parser.nextText();  
  20.                 }  
  21.                 if (name.equals("ipAddress")) {  
  22.                     ipAddress = parser.nextText();  
  23.                 }  
  24.             }  
  25.             if (eventType == XmlPullParser.END_TAG) {  
  26.                 if (name.equals("jingle")) {  
  27.                     done = true;  
  28.                 }  
  29.             }  
  30.         }  
  31.         VideoChatRTP videoRtp = new VideoChatRTP();  
  32.         videoRtp.setVideoType(VideoMediaType.valueOf(requestType));  
  33.         // 字符串转枚举  
  34.         videoRtp.setAddress(ipAddress);  
  35.         return videoRtp;  
  36.     }  
  37. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值