XMPP 工具类

继上次发文章又过了好久。程序出了问题,

发现XMPP的断线重连真的是个坑,在内网环境下随便自动重连,都没问题。

布到现网上问题就出现了,我了个日,目前还没有想到什么好的解决办法!

今天把我项目中XMPP的工具类贴出来,大家可以参考和点评一下。

没有很深入的研究过,也是从网上找了一些DEMO,弄下来自己看看代码,看看逻辑!

 

  1 public class XmppConnectionManager {
  2 
  3     private XMPPConnection connection;
  4     private static ConnectionConfiguration connectionConfig;
  5     private static XmppConnectionManager xmppConnectionManager;
  6     
  7     public static String host = "192.168.1.169";
  8     
  9     public static String name = "@test.com";
 10 
 11     static{
 12         try {
 13             Class.forName("org.jivesoftware.smack.ReconnectionManager");
 14         } catch (Exception e) {
 15             e.printStackTrace();
 16         }
 17     }
 18     synchronized public static XmppConnectionManager  getInstance(){
 19         if(xmppConnectionManager==null){
 20             xmppConnectionManager = new XmppConnectionManager();
 21         }
 22         return xmppConnectionManager;
 23     }
 24     
 25     public XMPPConnection init(Context context){
 26         Connection.DEBUG_ENABLED = false;
 27         ProviderManager pm = ProviderManager.getInstance();
 28         configureConnection(pm);
 29         
 30         connectionConfig = new ConnectionConfiguration(host,5222);
 31         connectionConfig.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
 32         connectionConfig.setReconnectionAllowed(true);
 33         connectionConfig.setSASLAuthenticationEnabled(false); // 是否启用安全验证
 34         
 35         connectionConfig.setSendPresence(false);
 36         
 37         connection = new XMPPConnection(connectionConfig);
 38         DeliveryReceiptManager.getInstanceFor(connection).enableAutoReceipts();
 39         connection.addConnectionListener(new ConnectionManager(context));
 40     
 41         return connection;
 42     }
 43     
 44     
 45     public XMPPConnection getConnection(){    
 46         return connection;
 47     }
 48     
 49     public void disconnect(){
 50         if(connection!=null){
 51             connection.disconnect();
 52         }
 53     }
 54 //    /**
 55 //     * 打开心跳
 56 //    public void initXmppSmack(Context context){
 57 //        SmackAndroid.init(context);
 58 //        final ClassLoader appClsLoader = context.getClassLoader();
 59 //        try {
 60 //            Class.forName(org.jivesoftware.smackx.ping.PingManager.class.getName(),true,appClsLoader);
 61 //            SmackConfiguration.setDefaultPingInterval(1);
 62 //        } catch (ClassNotFoundException e) {
 63 //            e.printStackTrace();
 64 //        }
 65 //    }
 66     
 67     
 68     
 69     
 70     
 71     
 72     
 73     /**
 74      * 加入providers的函数 ASmack在/META-INF缺少一个smack.providers 文件
 75      * 
 76      * @param pm
 77      */
 78     public void configureConnection(ProviderManager pm) {
 79 
 80         // Private Data Storage
 81         pm.addIQProvider("query", "jabber:iq:private",new PrivateDataManager.PrivateDataIQProvider());
 82 
 83         // Time
 84         try {
 85             pm.addIQProvider("query", "jabber:iq:time",    Class.forName("org.jivesoftware.smackx.packet.Time"));
 86         } catch (ClassNotFoundException e) {
 87             Log.w("TestClient","Can't load class for org.jivesoftware.smackx.packet.Time");
 88         }
 89 
 90         // Roster Exchange
 91         pm.addExtensionProvider("x", "jabber:x:roster",new RosterExchangeProvider());
 92 
 93         // Message Events
 94         pm.addExtensionProvider("x", "jabber:x:event",new MessageEventProvider());
 95 
 96         // Chat State
 97         pm.addExtensionProvider("active","http://jabber.org/protocol/chatstates",new ChatStateExtension.Provider());
 98         pm.addExtensionProvider("composing","http://jabber.org/protocol/chatstates",new ChatStateExtension.Provider());
 99         pm.addExtensionProvider("paused","http://jabber.org/protocol/chatstates",new ChatStateExtension.Provider());
100         pm.addExtensionProvider("inactive","http://jabber.org/protocol/chatstates",new ChatStateExtension.Provider());
101         pm.addExtensionProvider("gone","http://jabber.org/protocol/chatstates",new ChatStateExtension.Provider());
102 
103         // XHTML
104         pm.addExtensionProvider("html", "http://jabber.org/protocol/xhtml-im",new XHTMLExtensionProvider());
105 
106         // Group Chat Invitations
107         pm.addExtensionProvider("x", "jabber:x:conference",new GroupChatInvitation.Provider());
108 
109         // Service Discovery # Items
110         pm.addIQProvider("query", "http://jabber.org/protocol/disco#items",new DiscoverItemsProvider());
111 
112         // Service Discovery # Info
113         pm.addIQProvider("query", "http://jabber.org/protocol/disco#info",new DiscoverInfoProvider());
114 
115         // Data Forms
116         pm.addExtensionProvider("x", "jabber:x:data", new DataFormProvider());
117 
118         // MUC User
119         pm.addExtensionProvider("x", "http://jabber.org/protocol/muc#user",new MUCUserProvider());
120 
121         // MUC Admin
122         pm.addIQProvider("query", "http://jabber.org/protocol/muc#admin",new MUCAdminProvider());
123 
124         // MUC Owner
125         pm.addIQProvider("query", "http://jabber.org/protocol/muc#owner",new MUCOwnerProvider());
126 
127         // Delayed Delivery
128         pm.addExtensionProvider("x", "jabber:x:delay",new DelayInformationProvider());
129 
130         // Version
131         try {
132             pm.addIQProvider("query", "jabber:iq:version",Class.forName("org.jivesoftware.smackx.packet.Version"));
133         } catch (ClassNotFoundException e) {
134             // Not sure what's happening here.
135         }
136 
137         // VCard
138         pm.addIQProvider("vCard", "vcard-temp", new VCardProvider());
139 
140         // Offline Message Requests
141         pm.addIQProvider("offline", "http://jabber.org/protocol/offline",
142                 new OfflineMessageRequest.Provider());
143 
144         // Offline Message Indicator
145         pm.addExtensionProvider("offline",
146                 "http://jabber.org/protocol/offline",
147                 new OfflineMessageInfo.Provider());
148 
149         // Last Activity
150         pm.addIQProvider("query", "jabber:iq:last", new LastActivity.Provider());
151 
152         // User Search
153         pm.addIQProvider("query", "jabber:iq:search", new UserSearch.Provider());
154 
155         // SharedGroupsInfo
156         pm.addIQProvider("sharedgroup","http://www.jivesoftware.org/protocol/sharedgroup",new SharedGroupsInfo.Provider());
157 
158         // JEP-33: Extended Stanza Addressing
159         pm.addExtensionProvider("addresses","http://jabber.org/protocol/address",new MultipleAddressesProvider());
160 
161         // FileTransfer
162         pm.addIQProvider("si", "http://jabber.org/protocol/si",new StreamInitiationProvider());
163 
164         pm.addIQProvider("query", "http://jabber.org/protocol/bytestreams",new BytestreamsProvider());
165 
166         // Privacy
167         pm.addIQProvider("query", "jabber:iq:privacy", new PrivacyProvider());
168         pm.addIQProvider("command", "http://jabber.org/protocol/commands",new AdHocCommandDataProvider());
169         
170         
171         pm.addExtensionProvider(DeliveryReceipt.ELEMENT, DeliveryReceipt.NAMESPACE, new DeliveryReceipt.Provider()); 
172         pm.addExtensionProvider(DeliveryReceiptRequest.ELEMENT, DeliveryReceipt.NAMESPACE, new DeliveryReceiptRequest.Provider());
173 //       
174 
175         pm.addExtensionProvider("malformed-action","http://jabber.org/protocol/commands",    new AdHocCommandDataProvider.MalformedActionError());
176         pm.addExtensionProvider("bad-locale","http://jabber.org/protocol/commands",new AdHocCommandDataProvider.BadLocaleError());
177         pm.addExtensionProvider("bad-payload","http://jabber.org/protocol/commands",new AdHocCommandDataProvider.BadPayloadError());
178         pm.addExtensionProvider("bad-sessionid","http://jabber.org/protocol/commands",new AdHocCommandDataProvider.BadSessionIDError());
179         pm.addExtensionProvider("session-expired","http://jabber.org/protocol/commands",new AdHocCommandDataProvider.SessionExpiredError());
180     }
181     
182 }

 

posted on 2015-07-17 11:17  _此名没人用  阅读(339)  评论(0编辑  收藏  举报

导航