|
@@ -0,0 +1,135 @@
|
|
|
+package cn.org.bjca.trust.android.lib.im.im.manager;
|
|
|
+
|
|
|
+import android.util.Log;
|
|
|
+
|
|
|
+import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
|
|
|
+import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
|
|
|
+import org.eclipse.paho.client.mqttv3.MqttClient;
|
|
|
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
|
|
|
+import org.eclipse.paho.client.mqttv3.MqttException;
|
|
|
+import org.eclipse.paho.client.mqttv3.MqttMessage;
|
|
|
+import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
|
|
|
+
|
|
|
+import cn.org.bjca.trust.android.lib.im.cfg.Constant;
|
|
|
+import cn.org.bjca.trust.android.lib.im.im.kit.IMInterface;
|
|
|
+import cn.org.bjca.trust.android.lib.im.im.opt.ImConnectOptions;
|
|
|
+import cn.org.bjca.trust.android.lib.im.kit.IMSDKListener;
|
|
|
+import cn.org.bjca.trust.android.lib.im.kit.MsgListener;
|
|
|
+
|
|
|
+public class ImManager implements IMInterface {
|
|
|
+ private final String TAG = "ImManager";
|
|
|
+
|
|
|
+ private MqttClient mqttClient;
|
|
|
+ private MqttConnectOptions connectOptions;
|
|
|
+
|
|
|
+ private int status = -1; // -1未连接|0连接成功|1连接中
|
|
|
+
|
|
|
+ private IMSDKListener statusListener;
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void addMsgListener(MsgListener listener) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void removeMsgListener(MsgListener listener) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void setStatusListener(IMSDKListener listener) {
|
|
|
+ this.statusListener = listener;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void removeStatusListener(IMSDKListener listener) {
|
|
|
+ this.statusListener = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void login(ImConnectOptions imConnectOptions) {
|
|
|
+ if (this.isConnect()) this.logout();
|
|
|
+
|
|
|
+ if (null == connectOptions) connectOptions = new MqttConnectOptions();
|
|
|
+ connectOptions.setCleanSession(false);
|
|
|
+ connectOptions.setUserName(imConnectOptions.getClientId());
|
|
|
+ connectOptions.setPassword(imConnectOptions.getToken().toCharArray());
|
|
|
+ connectOptions.setConnectionTimeout(30);
|
|
|
+ connectOptions.setKeepAliveInterval(20);
|
|
|
+ connectOptions.setAutomaticReconnect(true);
|
|
|
+
|
|
|
+ try {
|
|
|
+ mqttClient = new MqttClient("tcp://" + imConnectOptions.getHost() + ":" + imConnectOptions.getPort(),
|
|
|
+ Constant.getSdkAppID() + imConnectOptions.getClientId() + System.currentTimeMillis(), new MemoryPersistence());
|
|
|
+ mqttClient.setCallback(new MqttCallbackExtended() {
|
|
|
+ @Override
|
|
|
+ public void connectComplete(boolean reconnect, String serverURI) {
|
|
|
+ Log.e("======>connectComplete", reconnect + "::" + serverURI);
|
|
|
+ try {
|
|
|
+ mqttClient.subscribe(Constant.getSdkAppID() + "/message" + Constant.getUserId(), 2);
|
|
|
+ mqttClient.subscribe(Constant.getSdkAppID() + "/pang" + Constant.getUserId(), 2);
|
|
|
+ mqttClient.subscribe(Constant.getSdkAppID() + "/login" + Constant.getUserId(), 2);
|
|
|
+ mqttClient.subscribe(Constant.getSdkAppID() + "/data" + Constant.getUserId(), 2);
|
|
|
+ } catch (MqttException e) {
|
|
|
+ Log.e(TAG, "=====>connectComplete", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void connectionLost(Throwable cause) {
|
|
|
+ Log.e("======>connectionLost", "", cause);
|
|
|
+ status = -1;
|
|
|
+ if (null != statusListener) statusListener.onConnectionLost();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void messageArrived(String topic, MqttMessage message) throws Exception {
|
|
|
+ Log.e("======>messageArrived", topic + "::" + message.getPayload().toString());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void deliveryComplete(IMqttDeliveryToken token) {
|
|
|
+ Log.e("======>deliveryComplete", "token.getMessage().toString()");
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+ } catch (MqttException e) {
|
|
|
+ Log.e(TAG, "login: ", e);
|
|
|
+ }
|
|
|
+
|
|
|
+ connect();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void connect() {
|
|
|
+ this.status = 1;
|
|
|
+ new Thread(() -> {
|
|
|
+ try {
|
|
|
+ if (!mqttClient.isConnected()) {
|
|
|
+ mqttClient.connect(connectOptions);
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (MqttException e) {
|
|
|
+ Log.e(TAG, "connect: ", e);
|
|
|
+ if (statusListener != null) statusListener.onConnectFailed(3001, e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ).start();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void logout() {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean isConnect() {
|
|
|
+ return this.mqttClient != null && this.mqttClient.isConnected();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean isConnecting() {
|
|
|
+ return this.status == 1;
|
|
|
+ }
|
|
|
+}
|