From dc8ae12444d1d887394eb525e2b80dd120dc4c87 Mon Sep 17 00:00:00 2001 From: mac <user@users-MacBook-Pro.local> Date: 星期二, 20 二月 2024 13:43:56 +0800 Subject: [PATCH] Merge branch 'wjc' into dev-hxb --- app/src/main/java/com/hdl/photovoltaic/ui/test/UniAppMqtt.java | 274 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 274 insertions(+), 0 deletions(-) diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/test/UniAppMqtt.java b/app/src/main/java/com/hdl/photovoltaic/ui/test/UniAppMqtt.java new file mode 100644 index 0000000..ffc2f8d --- /dev/null +++ b/app/src/main/java/com/hdl/photovoltaic/ui/test/UniAppMqtt.java @@ -0,0 +1,274 @@ +package com.hdl.photovoltaic.ui.test; + +import android.content.Context; +import android.os.Build; + +import androidx.annotation.RequiresApi; + +import com.alibaba.fastjson.JSON; +import com.hdl.photovoltaic.other.HdlUniLogic; +import com.hdl.photovoltaic.uni.HDLUniMP; +import com.hdl.sdk.link.common.utils.LogUtils; +import com.hdl.sdk.link.core.config.HDLLinkConfig; + +import org.eclipse.paho.android.service.MqttAndroidClient; +import org.eclipse.paho.client.mqttv3.IMqttActionListener; +import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; +import org.eclipse.paho.client.mqttv3.IMqttToken; +import org.eclipse.paho.client.mqttv3.MqttCallbackExtended; +import org.eclipse.paho.client.mqttv3.MqttConnectOptions; +import org.eclipse.paho.client.mqttv3.MqttException; +import org.eclipse.paho.client.mqttv3.MqttMessage; + + +/** + * Created by hxb on 2022/1/6. + */ +public class UniAppMqtt { + + private String clientId; + + /** + * 鑾峰彇鏍囪瘑mqtt鐨則ag鍊� + * + * @return - + */ + public String getClientId() { + return clientId; + } + + final String tag = "uniToAndroid->>>MqttRecvClient--->"; + /** + * 褰撳墠 mqtt client + */ + MqttAndroidClient mClient; + + /** + * instance + */ + private volatile static UniAppMqtt instance; + + /** + * getInstance + * + * @return UniAppMqtt + */ + public static synchronized UniAppMqtt getInstance() { + if (instance == null) { + synchronized (HDLLinkConfig.class) { + if (instance == null) { + instance = new UniAppMqtt(); + } + } + } + return instance; + } + + /** + * 鍒濆鍖栧綋鍓峬qtt + * + * @param context 涓婁笅鏂� + * @param serverURI 鍦板潃锛屾牸寮弔cp://127.0.0.1:1883 + * @param clientId 瀹㈡埛绔疘d + * @param topics 涓婚 + */ + public void initMqtt(Context context, String serverURI, String clientId, String[] topics) throws MqttException { + if (null != mClient) { + return; + } + this.clientId = clientId; + mClient = new MqttAndroidClient(context, serverURI, clientId); + + mClient.setCallback(new MqttCallbackExtended() { + + @Override + public void connectComplete(boolean reconnect, String serverURI) { + for (String topic : topics) { + try { + subscribe(topic); + } catch (MqttException e) { + LogUtils.e(tag, "璁㈤槄涓婚澶辫触" + topic); + } + } + } + + @Override + public void connectionLost(Throwable cause) { + LogUtils.e(tag, "娴嬭瘯mqtt鏂紑"); + } + + @Override + public void messageArrived(String topic, MqttMessage message) { + //Topic鏍煎紡 PCToAndroid(鎴朅ndroidToPC)/#guid鍞竴鍊�/uni_event + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + sendMqttToUni(topic, new String(message.getPayload())); + } + } + + @Override + public void deliveryComplete(IMqttDeliveryToken token) { +// LogUtils.i(tag,"鍙戝竷娑堟伅鎴愬姛"); + } + }); + //閰嶇疆杩炴帴 + MqttConnectOptions options = new MqttConnectOptions(); + options.setCleanSession(true); + //鏈嶅姟绔厑璁稿尶鍚� +// options.setUserName("username"); +// options.setPassword("password".toCharArray()); + options.setAutomaticReconnect(true); + +// //閰嶇疆瀹㈡埛绔绾挎垨鑰呮柇寮�杩炴帴鐨勯�夐」 +// DisconnectedBufferOptions disconnectedBufferOptions = new DisconnectedBufferOptions(); +// disconnectedBufferOptions.setBufferEnabled(true); +// disconnectedBufferOptions.setBufferSize(5000); +// disconnectedBufferOptions.setDeleteOldestMessages(true); +// disconnectedBufferOptions.setPersistBuffer(true); +// mClient.setBufferOpts(disconnectedBufferOptions); + connect(options); + } + + + /** + * 杩炴帴mqtt + * + * @param options - + */ + private void connect(MqttConnectOptions options) throws MqttException { + try { + mClient.connect(options, new IMqttActionListener() { + @Override + public void onSuccess(IMqttToken asyncActionToken) { + LogUtils.i(tag, "mqtt杩炴帴鎴愬姛"); + } + + @Override + public void onFailure(IMqttToken asyncActionToken, Throwable exception) { + LogUtils.e(tag, "mqtt杩炴帴澶辫触" + JSON.toJSONString(asyncActionToken.getException().getMessage()) + " exception=" + JSON.toJSONString(exception.getMessage())); + } + }); + } catch (MqttException e) { + LogUtils.e(tag, e.getMessage()); + } + } + + /** + * 璁㈤槄涓婚 + * + * @param topic 涓婚 + */ + public void subscribe(String topic) throws MqttException { + mClient.subscribe(topic, 2, null, new IMqttActionListener() { + @Override + public void onSuccess(IMqttToken asyncActionToken) { + LogUtils.i(tag, "璁㈤槄涓婚" + topic); + } + + @Override + public void onFailure(IMqttToken asyncActionToken, Throwable exception) { + LogUtils.e(tag, "璁㈤槄涓婚澶辫触" + topic); + } + }); + } + + /** + * 鍙戝竷鏁版嵁鍑哄幓 + * + * @param topic 涓婚 + * @param payload 鍐呭 + */ + public void publish(String topic, String payload) throws MqttException { + + //鍥炲鏃讹紝mqtt涓婚涓殑鏂瑰悜瑕佸彉鍖栵紝瑕佸仛鏂瑰悜鏇挎崲 + topic = topic.replace("PCToAndroid", "AndroidToPC"); + String finalTopic = topic; + mClient.publish(topic, payload.getBytes(), 1, false, null, new IMqttActionListener() { + @Override + public void onSuccess(IMqttToken asyncActionToken) { + LogUtils.e(tag, "鍥炲涓婚--->" + finalTopic + "\r\n" + payload); + } + + @Override + public void onFailure(IMqttToken asyncActionToken, Throwable exception) { + LogUtils.e(tag, "鍥炲澶辫触--->" + finalTopic + "\r\n" + exception.getMessage()); + } + }); + } + + /** + * 鍙栨秷璁㈤槄 + */ + public void unsubscribe(String topic) throws MqttException { + mClient.unsubscribe(topic, null, new IMqttActionListener() { + @Override + public void onSuccess(IMqttToken asyncActionToken) { + + } + + @Override + public void onFailure(IMqttToken asyncActionToken, Throwable exception) { + + } + }); + } + + /** + * 鏂紑杩炴帴 + */ + public void disconnect() throws MqttException { + mClient.disconnect(null, new IMqttActionListener() { + @Override + public void onSuccess(IMqttToken asyncActionToken) { + LogUtils.e(tag, "鏂紑杩炴帴"); + } + + @Override + public void onFailure(IMqttToken asyncActionToken, Throwable exception) { + + } + }); + } + + /** + * uni閫氳繃qtt浼犺繃鏉ョ殑鏁版嵁澶勭悊 + * + * @param topic 涓婚 + * @param payload 璐熻浇鍐呭 + */ + @RequiresApi(api = Build.VERSION_CODES.O) + void sendMqttToUni(final String topic, String payload) { + if (null == topic || null == payload) { + return; + } + String[] split = topic.split("/"); + if (split.length < 3) { + return; + } + //琛ㄧず澶х被 + String request_module_topic = split[2]; + MqttDCUniMPJSCallback mqttDCUniMPJSCallback = new MqttDCUniMPJSCallback(); + mqttDCUniMPJSCallback.setMqttCallBack(new MqttCallBack() { + @Override + public void onResult(Object data) { + if (null != data) + try { + //杩斿洖鏁版嵁缁檜ni + publish(topic, data.toString()); + } catch (Exception ignored) { + } + } + }); + // JSON.parse(payload) + HdlUniLogic.getInstance().onOtherUniMPEventReceive(HDLUniMP.UNI_APP_ID, request_module_topic, payload, mqttDCUniMPJSCallback); + } + + private boolean mIsUni = false; + + public void setUni(boolean isUni) { + mIsUni = isUni; + } + + public boolean getUni() { + return mIsUni; + } +} -- Gitblit v1.8.0