From dfb62af125bcb4eed4eadbcfc5a49a1232501c0c Mon Sep 17 00:00:00 2001 From: JLChen <551775569@qq.com> Date: 星期五, 10 十二月 2021 16:23:41 +0800 Subject: [PATCH] 2021-12-10 1.增加tcp和UDP 单次发送,不监听回复 --- HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java | 20 +++++ HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java | 85 ++++++++++++++------- HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java | 18 ++++ HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java | 48 ++++++++++- HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java | 42 ++++++++++ 5 files changed, 179 insertions(+), 34 deletions(-) diff --git a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java index 5f9fcfd..d03f334 100644 --- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java +++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/MainActivity.java @@ -19,14 +19,17 @@ import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.listener.OnItemClickListener; +import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import com.hdl.hdlsdk.device.DevicesListActivity; +import com.hdl.sdk.common.config.TopicConstant; import com.hdl.sdk.common.event.EventListener; import com.hdl.sdk.common.exception.HDLLinkException; import com.hdl.sdk.common.utils.IdUtils; import com.hdl.sdk.common.utils.IpUtils; import com.hdl.sdk.common.utils.gson.GsonConvert; import com.hdl.sdk.connect.HDLLink; +import com.hdl.sdk.connect.bean.LinkRequest; import com.hdl.sdk.connect.bean.LinkResponse; import com.hdl.sdk.connect.bean.request.AuthenticateRequest; import com.hdl.sdk.connect.bean.request.PropertyReadRequest; @@ -100,6 +103,8 @@ beans.add(new DemoBean("鑾峰彇鍦烘櫙鍒楄〃")); beans.add(new DemoBean("鍦烘櫙鎺у埗")); beans.add(new DemoBean("璁惧鍔熻兘鍒楄〃")); + beans.add(new DemoBean("UDP鍙戦��")); + beans.add(new DemoBean("TCP鍙戦��")); demoAdapter = new DemoAdapter(beans); rv.setAdapter(demoAdapter); @@ -150,10 +155,21 @@ //鍔熻兘鍒楄〃 startDevicesListActivity(); break; + case 9: + //UDP鍙戦�� + udpSend(); + break; + case 10: + //TCP鍙戦�� + tcpSend(); + break; } } }); } + + + public void showToast(String text) { Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); } @@ -231,9 +247,9 @@ tv.setText("寮�濮嬪叆缃戣璇�..."); //璁よ瘉鎻愪氦鍙傛暟鍑嗗 - String spkStr = "ir.module";//浜у搧spk - String macStr = "AA000000000000BB";//璁惧鍞竴MAC鍦板潃 - String secret = "87ae414b7a853f65";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret + String spkStr = "screen.mirror";//浜у搧spk + String macStr = "AA000000000000AC";//璁惧鍞竴MAC鍦板潃 + String secret = "ee62124c151b737c";//閫氳繃spk鍜宮ac鎻愪氦浜戠璁よ瘉鍚庡垎閰嶇殑secret String mac_key = stringToMD5(stringToMD5(macStr + secret)); String versionString = "HDL_V1.0.1";// String time = String.valueOf(System.currentTimeMillis()); @@ -241,7 +257,7 @@ //1.璁剧疆璁よ瘉淇℃伅 AuthenticateRequest.RequestBean requestBean = new AuthenticateRequest.RequestBean(); requestBean.setMAC(macStr); - requestBean.setSupplier("HDL"); + requestBean.setSupplier("raysgem"); requestBean.setFirmwareVersion(versionString); requestBean.setHardwareModel("1956F"); AuthenticateRequest.AuthBean authbean = new AuthenticateRequest.AuthBean(); @@ -256,7 +272,7 @@ infoBean.setDeviceName("绾㈠瀹�");//璁惧鍚嶅瓧 infoBean.setDeviceModel("HDL");// infoBean.setAccessMode("WIFI"); - infoBean.setIPGateway("192.168.12.1"); + infoBean.setIPGateway("192.168.88.1"); infoBean.setIPAddress(IpUtils.getIP(this)); infoBean.setOID("010105000000FE08"); @@ -469,4 +485,26 @@ Intent intent = new Intent(this, DevicesListActivity.class); startActivity(intent); } + + /** + * TCP鍙戦�� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙� + */ + private void tcpSend() { + String time = String.valueOf(System.currentTimeMillis()); + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("id", IdUtils.getUUId()); + jsonObject.addProperty("time_stamp", time); + HDLLink.getInstance().tcpSendMsg(TopicConstant.GATEWAY_SEARCH, jsonObject.toString()); + } + + /** + * 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙� + */ + private void udpSend() { + String time = String.valueOf(System.currentTimeMillis()); + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("id", IdUtils.getUUId()); + jsonObject.addProperty("time_stamp", time); + HDLLink.getInstance().udpSendMsg(TopicConstant.GATEWAY_SEARCH, jsonObject.toString()); + } } \ No newline at end of file diff --git a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java index 33770ed..0acf9f9 100644 --- a/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java +++ b/HDLSDK/app/src/main/java/com/hdl/hdlsdk/device/DevicesListAdapter.java @@ -4,6 +4,8 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.CompoundButton; +import android.widget.Switch; import android.widget.TextView; import androidx.annotation.NonNull; @@ -14,7 +16,13 @@ import com.chad.library.adapter.base.viewholder.BaseViewHolder; import com.hdl.hdlsdk.DemoBean; import com.hdl.hdlsdk.R; +import com.hdl.sdk.common.exception.HDLLinkException; +import com.hdl.sdk.common.utils.LogUtils; +import com.hdl.sdk.connect.HDLLink; +import com.hdl.sdk.connect.bean.request.DeviceControlRequest; +import com.hdl.sdk.connect.callback.HDLLinkCallBack; +import java.util.ArrayList; import java.util.List; public class DevicesListAdapter extends RecyclerView.Adapter<DevicesListAdapter.ViewHolder> { @@ -50,6 +58,12 @@ @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.item_tv.setText(mList.get(position).getName()); + holder.device_on_off_switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { + propertyDown(mList.get(position), isChecked); + } + }); } @Override @@ -60,10 +74,38 @@ //鑷畾涔夌殑ViewHolder锛屾寔鏈夋瘡涓狪tem鐨勭殑鎵�鏈夌晫闈㈠厓绱� public static class ViewHolder extends RecyclerView.ViewHolder { public TextView item_tv; + public Switch device_on_off_switch; public ViewHolder(View view) { super(view); item_tv = (TextView) view.findViewById(R.id.device_title_tv); + device_on_off_switch = view.findViewById(R.id.device_on_off_switch); } } + + private void propertyDown(FunctionBean functionBean, Boolean isOn){ + List<DeviceControlRequest> requestList = new ArrayList<>(); + DeviceControlRequest request = new DeviceControlRequest(); + request.setSid(functionBean.getSid()); + List<DeviceControlRequest.StatusBean> statusBeanList= new ArrayList<>(); + DeviceControlRequest.StatusBean bean = new DeviceControlRequest.StatusBean(); + bean.setKey("on_off"); + bean.setValue(isOn ? "on" : "off"); + statusBeanList.add(bean); + request.setStatus(statusBeanList); + requestList.add(request); + HDLLink.getInstance().propertyDown(requestList, new HDLLinkCallBack() { + @Override + public void onSuccess(String data) { + LogUtils.i(data); +// responseTv.setText(data); + } + + @Override + public void onError(HDLLinkException e) { +// responseTv.setText(e.getMsg()); + LogUtils.i("code:"+e.getCode() + " " + e.getMsg()); + } + }); + } } \ No newline at end of file diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java index 7458c14..fc815f4 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/HDLLink.java @@ -198,4 +198,24 @@ public void tcpSendMsg(String topic, String bodyStr, HDLLinkCallBack callBack) { HDLSocket.getInstance().tcpSendMsg(topic, bodyStr, callBack); } + + /** + * 閫氱敤鍙戦�佹寚浠� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙� + * + * @param topic 鍙戦�佹暟鎹� + * @param bodyStr 鍥炲鐨勪富棰� + */ + public void udpSendMsg(String topic, String bodyStr) { + HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr); + } + + /** + * 閫氱敤TCP鍙戦�佹寚浠� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙� + * + * @param topic 鍙戦�佹暟鎹� + * @param bodyStr 鍥炲鐨勪富棰� + */ + public void tcpSendMsg(String topic, String bodyStr) { + HDLSocket.getInstance().tcpSendMsg(topic, bodyStr); + } } diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java index 95ac400..1e5988f 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java @@ -170,20 +170,31 @@ @Override public void onSucceed(Object msg) { if (callBack == null) return; - AuthenticateResponse bean = getAuthenticateResponseBean(msg); - if (bean != null) { - String localSecret = bean.getAuth().getLocalSecret(); - String gatewayId = bean.getObjects().getGatewayID(); - String ipAddress = bean.getObjects().getIPAddress(); - //鍒ゆ柇缃戝叧鏄惁宸茬粡娉ㄥ唽鍒颁簯绔� - if (TextUtils.isEmpty(localSecret) || TextUtils.isEmpty(gatewayId)) { - //璁よ瘉澶辫触锛岀綉鍏虫湭娉ㄥ唽鍒颁簯绔� - callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_ERROR_GATEWAY_NOT_REGISTERED)); + try { + AuthenticateResponse bean = getAuthenticateResponseBean(msg); + if (bean != null) { + String localSecret = ""; + String gatewayId = ""; + String ipAddress = ""; + if(bean.getAuth() != null) { + localSecret = bean.getAuth().getLocalSecret(); + } + if(bean.getObjects() != null){ + gatewayId = bean.getObjects().getGatewayID(); + ipAddress = bean.getObjects().getIPAddress(); + } + //鍒ゆ柇缃戝叧鏄惁宸茬粡娉ㄥ唽鍒颁簯绔� + if (TextUtils.isEmpty(localSecret) || TextUtils.isEmpty(gatewayId)) { + //璁よ瘉澶辫触锛岀綉鍏虫湭娉ㄥ唽鍒颁簯绔� + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_ERROR_GATEWAY_NOT_REGISTERED)); + } else { + HDLLinkConfig.getInstance().saveConfig(localSecret, gatewayId, ipAddress); + callBack.onSuccess("璁よ瘉鎴愬姛"); + } } else { - HDLLinkConfig.getInstance().saveConfig(localSecret, gatewayId, ipAddress); - callBack.onSuccess("璁よ瘉鎴愬姛"); + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR)); } - } else { + } catch (Exception e) { callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR)); } } @@ -285,8 +296,6 @@ } - - /** * 璁惧鎺у埗 */ @@ -350,6 +359,21 @@ ); } + /** + * 閫氱敤鍙戦�佹寚浠� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙� + * + * @param topic 鍙戦�佹暟鎹� + * @param bodyStr 鍥炲鐨勪富棰� + */ + public void udpSendMsg(String topic, String bodyStr) { + if (TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) { + LogUtils.e("udpSendMsg", "鍙傛暟涓嶈兘涓虹┖"); + return; + } + LinkRequest message = new LinkRequest(topic, bodyStr); + String ip = IpUtils.getBroadcastAddress(); + getUdpBoot(ip).sendMsg(message.getSendBytes()); + } private GatewaySearchBean getGatewaySearchBean(Object msg) { GatewaySearchBean searchBean = null; @@ -399,13 +423,15 @@ /** * 缃戝叧鎼滅储鐩稿叧 */ - private static final int MAX_SEARCH_COUNT = 10;//鎬诲叡鎼滅储娴嬭瘯 - private final AtomicInteger searchGatewayCount = new AtomicInteger(0);; + private static final int MAX_SEARCH_COUNT = 10;//鎬诲叡鎼滅储娴嬭瘯 + private final AtomicInteger searchGatewayCount = new AtomicInteger(0); + ; private final AtomicBoolean isSearchGatewaySuccess = new AtomicBoolean(true); private String searchGatewayId = ""; private SearchGatewayCallBack mSearchGatewayCallBack; - private void initSearchGatewayEvent(){ - LogUtils.i("鎼滅储缃戝叧--","initSearchGatewayEvent"); + + private void initSearchGatewayEvent() { + LogUtils.i("鎼滅储缃戝叧--", "initSearchGatewayEvent"); searchGatewayEvent = new EventListener() { @Override public void onMessage(Object msg) { @@ -425,7 +451,7 @@ searchGatewayCount.set(11);//娆℃暟鏍囪 HDLLinkConfig.getInstance().setCurrentGateway(searchBean);//璁剧疆褰撳墠缃戝叧 HDLLinkConfig.getInstance().setLocalEncrypt(searchBean.isLocalEncrypt());//璁剧疆鏄惁鍔犲瘑 - if(mSearchGatewayCallBack != null){ + if (mSearchGatewayCallBack != null) { mSearchGatewayCallBack.onSuccess(searchBean); } } @@ -463,11 +489,11 @@ new Thread(new Runnable() { @Override public void run() { - while (searchGatewayCount.get() < 10 && (!isSearchGatewaySuccess.get()) ) { + while (searchGatewayCount.get() < 10 && (!isSearchGatewaySuccess.get())) { try { //鎼滅储缃戝叧 searchGatewayCount.set(searchGatewayCount.get() + 1); - LogUtils.i("鎼滅储缃戝叧--","鎼滅储缃戝叧绗�"+searchGatewayCount.get()+"娆�"); + LogUtils.i("鎼滅储缃戝叧--", "鎼滅储缃戝叧绗�" + searchGatewayCount.get() + "娆�"); getUdpBoot(ip).sendMsg(message.getSendBytes()); Thread.sleep(1000L); } catch (InterruptedException e) { @@ -475,10 +501,10 @@ } } - if(!isSearchGatewaySuccess.get()){ + if (!isSearchGatewaySuccess.get()) { //鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃� callBackSearchGatewayTimeout(); - LogUtils.e("鎼滅储缃戝叧--","鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�"); + LogUtils.e("鎼滅储缃戝叧--", "鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�"); } } }).start(); @@ -488,27 +514,28 @@ /** * 娉ㄥ唽鎼滅储缃戝叧鐩戝惉 */ - private void registerSearchGatewayEvent(){ - LogUtils.i("鎼滅储缃戝叧--","娉ㄥ唽鎼滅储缃戝叧鐩戝惉"); + private void registerSearchGatewayEvent() { + LogUtils.i("鎼滅储缃戝叧--", "娉ㄥ唽鎼滅储缃戝叧鐩戝惉"); EventDispatcher.getInstance().registerIo(TopicConstant.GATEWAY_SEARCH_REPLY, searchGatewayEvent); } + /** * 绉婚櫎鎼滅储缃戝叧鐩戝惉 */ - private void removeSearchGatewayEvent(){ - LogUtils.i("鎼滅储缃戝叧--","绉婚櫎鎼滅储缃戝叧鐩戝惉"); + private void removeSearchGatewayEvent() { + LogUtils.i("鎼滅储缃戝叧--", "绉婚櫎鎼滅储缃戝叧鐩戝惉"); EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_SEARCH_REPLY, searchGatewayEvent); } /** * 鍥炶皟鎼滅储缃戝叧瓒呮椂 */ - private void callBackSearchGatewayTimeout(){ + private void callBackSearchGatewayTimeout() { removeSearchGatewayEvent(); ThreadToolUtils.getInstance().runOnUiThread(new Runnable() { @Override public void run() { - if(mSearchGatewayCallBack != null){ + if (mSearchGatewayCallBack != null) { mSearchGatewayCallBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEARCH_GATEWAY_TIMEOUT_ERROR)); } } diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java index 8e1c7d8..749cdc9 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java @@ -682,6 +682,24 @@ } } + /** + * 閫氱敤TCP鍙戦�佹寚浠� 鍙彂涓�娆★紝涓嶇洃鍚洖澶嶏紝涓嶉噸鍙� + * + * @param topic 鍙戦�佹暟鎹� + * @param bodyStr 鍥炲鐨勪富棰� + */ + public void tcpSendMsg(String topic, String bodyStr) { + try { + if (TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) { + LogUtils.e("udpSendMsg", "鍙傛暟涓嶈兘涓虹┖"); + return; + } + LinkRequest message = new LinkRequest(topic, bodyStr); + getTcp().sendMsg(message.getSendBytes()); + } catch (Exception e) { + LogUtils.e("tcpSendMsg", "鍙戦�佸け璐� :"+e.getMessage()); + } + } /** * 鍙戦�佹寚浠� -- Gitblit v1.8.0