From 3f41182984d69d7fae703776edd1591f48dff93f Mon Sep 17 00:00:00 2001
From: mac <user@users-MacBook-Pro.local>
Date: 星期三, 22 十一月 2023 17:13:05 +0800
Subject: [PATCH] 2023年11月22日17:12:40

---
 app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java |  228 +++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 197 insertions(+), 31 deletions(-)

diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java
index d858f8c..77ed570 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlOtaLogic.java
@@ -1,5 +1,10 @@
 package com.hdl.photovoltaic.other;
 
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.IBinder;
 import android.text.TextUtils;
 
 
@@ -13,14 +18,35 @@
 import com.hdl.linkpm.sdk.ota.bean.DeviceFirmwareBean;
 import com.hdl.linkpm.sdk.ota.bean.DownloadUrlBean;
 import com.hdl.linkpm.sdk.ota.bean.GatewayDriverBean;
+import com.hdl.photovoltaic.HDLApp;
 import com.hdl.photovoltaic.config.UserConfigManage;
 import com.hdl.photovoltaic.internet.HttpClient;
+import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpServer;
+import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpService;
+import com.hdl.photovoltaic.internet.TcpClient;
 import com.hdl.photovoltaic.internet.api.HttpApi;
+import com.hdl.photovoltaic.internet.api.TopicApi;
 import com.hdl.photovoltaic.listener.CloudCallBeak;
+import com.hdl.photovoltaic.listener.LinkCallBack;
+import com.hdl.photovoltaic.utils.AesUtils;
+import com.hdl.photovoltaic.utils.AppManagerUtils;
+import com.hdl.photovoltaic.utils.Md5Utils;
+import com.hdl.sdk.link.common.exception.HDLLinkException;
+import com.hdl.sdk.link.common.utils.ByteUtils;
+import com.hdl.sdk.link.core.callback.HDLLinkCallBack;
 
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.lang.reflect.Type;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
+import java.util.logging.FileHandler;
+
+import okhttp3.ResponseBody;
 
 
 /**
@@ -45,6 +71,23 @@
         }
         return sHdlOtaLogic;
     }
+
+    /**
+     * Intent涓撻棬鍚姩鏈湴鏈嶅姟
+     *
+     * @return Intent
+     */
+    public Intent getIntent() {
+        return intentServer;
+    }
+
+    public void setIntent(Intent intent) {
+        this.intentServer = intent;
+    }
+
+    private Intent intentServer = null;
+
+    private ServiceConnection mServiceConnection = null;
 
     //region -----鍥轰欢鍗囩骇---------
 
@@ -381,47 +424,27 @@
      *
      * @param driverVersionId 椹卞姩鐗堟湰Id
      */
-    public void getDeviceDriverDownloadUrl(String driverVersionId, CloudCallBeak<String> callBack) {
-//        "driverCode":"029B9988",
-//                "driverName":"鏍稿績灞�",
-//                "imageId":"12345678",
-//                "version":"V01.02.20"
+    public void getDeviceDriverDownloadUrl(String driverVersionId, CloudCallBeak<DownloadUrlBean> callBack) {
+
         String requestUrl = HttpApi.POST_OTA_GET_LinkDeviceDriverDownloadUrl;
         JsonObject json = new JsonObject();
         json.addProperty("driverVersionId", driverVersionId);
         HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak<String>() {
             @Override
-            public void onSuccess(String json) {
-
-                if (TextUtils.isEmpty(json)) {
+            public void onSuccess(String s) {
+                if (TextUtils.isEmpty(s)) {
                     if (callBack != null) {
-                        callBack.onSuccess("-2");
+                        callBack.onSuccess(new DownloadUrlBean());
                     }
                     return;
                 }
                 Gson gson = new Gson();
                 Type typeOfT = new TypeToken<DownloadUrlBean>() {
                 }.getType();
-                DownloadUrlBean downloadUrlBean = gson.fromJson(json, typeOfT);
-                if (downloadUrlBean == null) {
-                    if (callBack != null) {
-                        callBack.onSuccess("-2");
-                    }
-                    return;
+                DownloadUrlBean downloadUrlBean = gson.fromJson(s, typeOfT);
+                if (callBack != null) {
+                    callBack.onSuccess(downloadUrlBean);
                 }
-                getDeviceDriverDownloadFile(downloadUrlBean.getDownloadUrl(), new CloudCallBeak<DownloadUrlBean>() {
-                    @Override
-                    public void onSuccess(DownloadUrlBean obj) {
-                        String full = HdlFileLogic.getInstance().getDriveRootPath() + "/" + driverVersionId;
-                        HdlFileLogic.getInstance().writeFile(full, obj.toString());
-                    }
-
-                    @Override
-                    public void onFailure(HDLException e) {
-
-                    }
-                });
-
             }
 
             @Override
@@ -438,12 +461,155 @@
      *
      * @param downloadUrl 浜戠鍥轰欢鍦板潃
      */
-    public void getDeviceDriverDownloadFile(String downloadUrl, CloudCallBeak<DownloadUrlBean> callBack) {
-        String requestUrl = HttpApi.POST_OTA_GET_LinkDeviceFirmwareDownloadUrl;
-        JsonObject json = new JsonObject();
+    public void getDeviceDriverDownloadFile(String downloadUrl, CloudCallBeak<ResponseBody> callBack) {
+        HttpClient.getInstance().downLoadFile(downloadUrl, new CloudCallBeak<ResponseBody>() {
+            @Override
+            public void onSuccess(ResponseBody s) {
+
+                if (callBack != null) {
+                    callBack.onSuccess(s);
+                }
+            }
+
+            @Override
+            public void onFailure(HDLException e) {
+                if (callBack != null) {
+                    callBack.onFailure(e);
+                }
+            }
+        });
+
 
     }
 
 
     //endregion
+
+    /**
+     * 鏈湴鍗囩骇鍖呮帹閫�(鍛婅瘔缃戝叧涓嬭浇鍗囩骇鍖呭湴鍧�绛変俊鎭�)
+     *
+     * @param mac          鐗╃悊璁惧mac
+     * @param oid          鐗╃悊璁惧oid
+     * @param module       妯″潡淇℃伅
+     * @param version      鐗堟湰鍙�
+     * @param size         鍗囩骇鍖呭ぇ灏�
+     * @param url          鍗囩骇鍖呬笅杞藉湴鍧�(瀛樺偍鍦ㄦ湰鍦�)
+     * @param sign_method  md5鍔犲瘑瀛楃涓�
+     * @param linkCallBack -
+     */
+    public void pushUpgradePacketInfo(String mac, String oid, String module, String version, String size, String url, String sign_method, LinkCallBack<String> linkCallBack) {
+        String requestUrl = TopicApi.SET_GATEWAY_UPGRADE_INFO;
+        JsonObject json = new JsonObject();
+        json.addProperty("oid", oid);// 鐗╃悊璁惧oid
+        json.addProperty("module", module);//妯″潡淇℃伅
+        json.addProperty("version", version);//鐗堟湰鍙�
+//        json.addProperty("is_diff", is_diff);//true=澧為噺鍖咃紝false=鍏ㄩ噺鍖�
+        json.addProperty("size", size);//鍗囩骇鍖呭ぇ灏�
+        json.addProperty("url", url);//鍗囩骇鍖呬笅杞藉湴鍧�
+        json.addProperty("sign_method", sign_method);//鍗囩骇鍖呯鍚嶇被鍨�:md5
+        TcpClient.getInstance().sendDataToLinkGateway(mac, requestUrl, json, "", new HDLLinkCallBack() {
+            @Override
+            public void onSuccess(String msg) {
+                if (linkCallBack != null) {
+                    linkCallBack.onSuccess(msg);
+                }
+
+            }
+
+            @Override
+            public void onError(HDLLinkException e) {
+                if (linkCallBack != null) {
+                    linkCallBack.onError(e);
+                }
+            }
+        });
+    }
+
+
+    /**
+     * 鍚姩鏈湴鏈嶅姟
+     */
+    public void startLocalService(ServiceConnection serviceConnection) {
+        //鏈湴
+        //1,寤虹珛鏈湴鏈嶅姟锛�
+        //2锛屽憡璇夌綉鍏虫墜鏈篿p鍜岀鍙o紱
+        //瀹炰緥鍖� 鑾峰彇ip 鍦板潃
+        MyNanoHttpServer.getInstance(AppManagerUtils.getAppManager().getIPAddress(HDLApp.getInstance()));
+        //MyNanoHttpServer.getInstance("127.0.0.1");
+        intentServer = new Intent();
+        intentServer.setClass(HDLApp.getInstance(), MyNanoHttpService.class);
+        this.mServiceConnection = serviceConnection;
+        //鍚姩鏈嶅姟鐩戝惉
+        HDLApp.getInstance().bindService(intentServer, serviceConnection, Context.BIND_AUTO_CREATE);
+    }
+
+    /**
+     * 鍏抽棴鏈湴鏈嶅姟
+     */
+    public void unLocalService() {
+        if (intentServer != null && this.mServiceConnection != null) {
+            HDLApp.getInstance().unbindService(this.mServiceConnection);
+        }
+    }
+
+    /**
+     * 澶勭悊涓嬭浇鏂囦欢鏁版嵁
+     *
+     * @param zipData 鏂囦欢鏁版嵁娴佸璞�
+     * @param md5     妫�楠屾枃浠禡D5鍊�
+     * @return 杩斿洖瑙e瘑鐨刡yte[]
+     */
+    public byte[] disposeDownLoadFile(ResponseBody zipData, String md5) {
+        if (zipData == null) {
+            return null;
+        }
+        if (TextUtils.isEmpty(md5)) {
+            return null;
+        }
+        InputStream is = null;
+        List<Byte> byteList = new ArrayList<>();
+        byte[] decrypt = null;
+        try {
+            is = zipData.byteStream();
+            int total = (int) zipData.contentLength();
+            byte[] buf = new byte[1024*4];
+            long sum = 0;
+            int len = 0;
+            while ((len = is.read(buf)) != -1) {
+                sum += len;
+                //todo 涓嬭浇涓紝鍙互鑷鍔犲叆杩涘害鏉�(鍙互骞挎挱鍑哄幓)
+                int progress = (int) (sum * 1.0f / total * 100);
+                for (int i = 0; i < len; i++) {
+                    byteList.add(buf[i]);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (is != null) {
+                    is.close();
+                }
+                Byte[] sourceByte = byteList.toArray(new Byte[0]);
+                byte[] bytes = new byte[sourceByte.length];
+                for (int i = 0; i < sourceByte.length; i++) {
+                    bytes[i] = sourceByte[i];
+                }
+                //涓嬭浇鏂囦欢闇�瑕佽В瀵嗕箣鍚庡啀杩涜md5鍘诲仛姣斿
+                decrypt = AesUtils.decrypt(bytes);
+                if (decrypt != null) {
+                    String fileMD5 = Md5Utils.encodeMD5(decrypt);
+                    if (TextUtils.isEmpty(fileMD5) || !Objects.equals(fileMD5, md5)) {
+                        //鏍¢獙澶辫触,缃┖
+                        decrypt = null;
+                    }
+                }
+            } catch (IOException ignored) {
+
+            }
+        }
+        return decrypt;
+    }
+
+
 }

--
Gitblit v1.8.0