wxr
2022-08-25 b5444e6e566c2128bcb4fb522bfa636ee2c5b8fb
场景背景图问题修复
7个文件已修改
430 ■■■■ 已修改文件
HDL-ON_Android/Properties/AndroidManifest.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_iOS/Info.plist 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/DriverLayer/Control.cs 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/DAL/DriverLayer/Control_TcpClient.cs 325 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/Function/Scene.cs 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/Entity/FunctionList.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HDL-ON_Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.6.0" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202208151">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.6.0" package="com.hdl.onpro" xmlns:tools="http://schemas.android.com/tools" android:versionCode="202208191">
    <uses-sdk android:minSdkVersion="26" android:targetSdkVersion="29" />
    <!--友盟-->
    <!--<uses-sdk android:minSdkVersion="8"></uses-sdk>-->
HDL-ON_iOS/Info.plist
@@ -100,9 +100,9 @@
    <key>UIStatusBarStyle</key>
    <string>UIStatusBarStyleLightContent</string>
    <key>CFBundleShortVersionString</key>
    <string>1.6.002208151</string>
    <string>1.6.002208191</string>
    <key>CFBundleVersion</key>
    <string>1.6.008151</string>
    <string>1.6.008191</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>Use geographic location to provide services such as weather</string>
    <key>NSAppleMusicUsageDescription</key>
HDL_ON/DAL/DriverLayer/Control.cs
@@ -29,11 +29,27 @@
        /// 记录接收到的消息,方便zb的工程师调试他们的设备
        /// </summary>
        public List<string> MsgInfoList = new List<string>();
        private bool _LocalTcpClientLogin = false;
        /// <summary>
        /// 本地tcp客户端连接是否成功
        /// 是否登录网关成功
        /// </summary>
        public bool LocalTcpClientLogin = false;
        public bool LocalTcpClientLogin
        {
            get
            {
                return _LocalTcpClientLogin;
            }
            set
            {
                _LocalTcpClientLogin = value;
                if (!value)
                {
                    loginGatewayThread?.Abort();
                    loginGatewayThread = null;
                }
            }
        }
        int _msg_id = 1;
        /// <summary>
@@ -222,8 +238,9 @@
            if (myTcpClient == null)
            {
                myTcpClient = new Control_TcpClient(reportIp);
                myTcpClient.Connect();
            }
            myTcpClient.Connect();
        }
        /// <summary>
@@ -294,9 +311,9 @@
            if(loginGatewayThread== null)
            {
                loginGatewayThread = new System.Threading.Thread(() => {
                    while (true)
                    while (!Ins.myTcpClient.isConnected)
                    {
                        if (Ins.GatewayOnline_Local && myTcpClient.isConnected && LocalTcpClientLogin)
                        if (Ins.GatewayOnline_Local && myTcpClient.isConnected)
                        {
                            var sendData = new { clientType = "app", version = "1.0" };
                            var sendJob = new { id = Control.Ins.msg_id.ToString(), time_stamp = Utlis.GetTimestamp(), objects = sendData };
@@ -309,9 +326,28 @@
                        }
                        System.Threading.Thread.Sleep(2000);
                    }
                    //loginGatewayThread?.Abort();
                    //loginGatewayThread = null;
                });
                loginGatewayThread.Start();
            }
            else
            {
                try
                {
                    loginGatewayThread?.Abort();
                }catch (Exception ex)
                {
                    MainPage.Log($"重启登录网关线程异常:{ex.Message}");
                }
                finally
                {
                    loginGatewayThread = null;
                    LoginGateway();
                }
            }
        }
@@ -880,7 +916,6 @@
        {
            LocalCommunicationData receiveObj = new LocalCommunicationData();
            MainPage.Log($"局域网信息: \r\n{receiveString}");
            var res = receiveString.Split("\r\n\r\n");
@@ -912,9 +947,10 @@
                //}
                receiveObj.BodyDataString = res[1];
                if(receiveObj.Topic == CommunicationTopic.ct.HeartBeat)
                if (receiveObj.Topic == CommunicationTopic.ct.HeartBeat + "_reply")
                {
                    Ins.myTcpClient.ClearHeartBeatLog();
                    MainPage.Log("tcp心跳回复");
                    return null;
                }
@@ -924,7 +960,6 @@
                    //判断当前网关是否开启了本地加密
                    if (IsLocalEncryptAndGetAesKey)
                    {
                        MainPage.Log($"局域网信息 开始解密");
                        if (originalReceiveBytes != null)
                        {
                            //拿到原始Bytes数据去解密
@@ -955,6 +990,10 @@
                            //MainPage.Log($"局域网信息: 解密后:" + receiveObj.BodyDataString);
                        }
                    }
                    else
                    {
                        MainPage.Log($"局域网信息: 明文:" + receiveObj.BodyDataString);
                    }
                }
@@ -1008,7 +1047,6 @@
                        OpenTcpClent();
                        LoginGateway();
                    }
                }
@@ -1058,6 +1096,19 @@
                    if (temp.GetValue("objects").ToString().Contains("success"))
                    {
                        LocalTcpClientLogin = true;
                        try
                        {
                            loginGatewayThread?.Abort();
                        }
                        catch (Exception ex)
                        {
                            MainPage.Log($"终止登录网关tcp异常:{ex.Message}");
                        }
                        finally
                        {
                            loginGatewayThread = null;
                        }
                        MainPage.Log("局域网tcp连接登录网关成功");
                    }
                }
                else
HDL_ON/DAL/DriverLayer/Control_TcpClient.cs
@@ -6,6 +6,7 @@
using System.Threading.Tasks;
using HDL_ON.Entity;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace HDL_ON.DriverLayer
{
@@ -15,7 +16,25 @@
        //声明IP,端口,和一个用来连接的Socket
        public string _ip;
        private TcpClient _tcpClient;
        private TcpClient _clinet;
        private TcpClient _tcpClient {
            get
            {
                return _clinet;
            }
            set
            {
                _clinet = value;
                if (_clinet == null) {
                    if(connectThread!= null)
                    {
                        connectThread.Abort();
                        connectThread = null;
                    }
                }
            }
        }
        //创建一个委托,用来满足其他类调用
        //public delegate void DelegateMessage(string str);
@@ -25,10 +44,47 @@
        /// 连接次数
        /// </summary>
        private int reconnectIndex = 0;
        private bool _isConnected = false;
        /// <summary>
        /// 是否连接成功
        /// </summary>
        public bool isConnected = false;
        public bool isConnected {
            get
            {
                return _isConnected;
            }
            set
            {
                _isConnected = value;
                if (value)
                {
                    Control.Ins.LoginGateway();
                    HeartBeat();
                }
                else
                {
                    try
                    {
                        _tcpClient.Close();
                        _tcpClient = null;
                    }
                    catch (Exception)
                    {
                    }
                }
            }
        }
        private List<string> heartBeatLogIdList = new List<string>();
        /// <summary>
        /// 心跳记录
        /// </summary>
        public void ClearHeartBeatLog()
        {
            heartBeatLogIdList.Clear();
        }
        /// <summary>
@@ -53,14 +109,14 @@
            try
            {
                _tcpClient.Connect(IPAddress.Parse(_ip), 8586);
                Task.Run(new Action(ReceiveMessage));//开启线程,不停接收消息
                ReceiveMessage();//开启线程,不停接收消息
                MainPage.Log($"打开tcp client{_ip}:8586");
                isConnected = true;
            }
            catch (Exception e)
            {
                MainPage.Log(e.Message);
                throw;
                MainPage.Log($"打开tcp异常:"+e.Message);
                return false;
            }
            return true;//返回连接状态
        }
@@ -74,42 +130,80 @@
        /// </summary>
        public void Connect()
        {
            if(connectThread == null)
            lock (lockObj)
            {
                connectThread = new Thread(() => {
                    while (Control.Ins.GatewayOnline_Local)
                if (isConnected)
                {
                    return;
                }
                if (connectThread == null)
                {
                    connectThread = new Thread(() =>
                    {
                        if (_tcpClient == null)
                        while (Control.Ins.GatewayOnline_Local && !isConnected)
                        {
                            ConnectToTcp();
                        }
                        else
                        {
                            if (!_tcpClient.Connected)
                            if (_tcpClient == null)
                            {
                                try
                                ConnectToTcp();
                            }
                            else
                            {
                                if (!_tcpClient.Connected)
                                {
                                    //_tcpClient.ReceiveTimeout =
                                    _tcpClient.Connect(IPAddress.Parse(_ip), 8586);
                                    Task.Run(new Action(ReceiveMessage));//开启线程,不停接收消息
                                }
                                catch (Exception ex)
                                {
                                    MainPage.Log($"tcp重连异常:{ex.Message}");
                                    _tcpClient.Close();
                                    _tcpClient = null;
                                    try
                                    {
                                        //_tcpClient.ReceiveTimeout =
                                        _tcpClient.Connect(IPAddress.Parse(_ip), 8586);
                                        ReceiveMessage();//开启线程,不停接收消息
                                        isConnected = true;
                                    }
                                    catch (Exception ex)
                                    {
                                        MainPage.Log($"tcp重连异常:{ex.Message}");
                                    }
                                }
                            }
                            Thread.Sleep(1000);
                        }
                        Thread.Sleep(1000);
                    });
                    connectThread.Start();
                }
                else
                {
                    if (!isConnected)
                    {
                        try
                        {
                            connectThread?.Abort();
                        }
                        catch { }
                        finally
                        {
                            connectThread = null;
                        }
                        Connect();
                    }
                });
                connectThread.Start();
                }
            }
        }
        /// <summary>
        /// 重连
        /// </summary>
        public void Reconect()
        {
            if (_tcpClient == null)
            {
                Connect();
            }
            else
            {
                _tcpClient.Close();
                _tcpClient = null;
                Connect();
            }
        }
        /// <summary>
        /// 关闭连接
@@ -130,29 +224,81 @@
        /// <param name="bytes">需要发送的字节</param>
        public void SendMessage(byte[] bytes)
        {
            if (_tcpClient.GetStream().CanWrite)
            if (heartBeatLogIdList.Count > 3)
            {
                _tcpClient.GetStream().Write(bytes, 0, bytes.Length);
                try
                {
                    MainPage.Log("心跳多次未回复,断开tcp连接");
                    heartBeatLogIdList.Clear();
                    isConnected = false;
                    Reconect();
                    return;
                }catch (Exception ex)
                {
                    MainPage.Log($"重连tcp异常:{ex.Message}");
                }
            }
            try
            {
                if (_tcpClient.GetStream().CanWrite&& isConnected)
                {
                    _tcpClient.GetStream().Write(bytes, 0, bytes.Length);
                }
            }catch(Exception ex)
            {
                MainPage.Log($"tcp客户端发送数据异常:{ex.Message}");
                isConnected = false;
            }
        }
        /// <summary>
        /// 心跳包线程
        /// </summary>
        private Thread heartBeatThread;
        private DateTime heartBeatTime;
        public void HeartBeat()
        {
            if(heartBeatThread == null)
            lock (lockObj)
            {
                heartBeatThread = new Thread(() => {
                    if(_tcpClient.Connected&&10 *1000 <(System.DateTime.Now - heartBeatTime).TotalMilliseconds)
                if (heartBeatThread == null)
                {
                    MainPage.Log($"心跳包线程启动");
                    heartBeatThread = new Thread(() =>
                    {
                        var sendBytes = Control.Ins.ConvertSendBodyData(CommunicationTopic.ct.HeartBeat, "");
                        SendMessage(sendBytes);
                        while (isConnected)
                        {
                            if (_tcpClient.Connected && 10 * 1000 < (System.DateTime.Now - heartBeatTime).TotalMilliseconds)
                            {
                                string msgId = Control.Ins.msg_id.ToString();
                                heartBeatLogIdList.Add(msgId);
                                var sendJob = new JObject { { "id", Control.Ins.msg_id.ToString() }, { "time_stamp", Utlis.GetTimestamp() } };
                                var bodyString = JsonConvert.SerializeObject(sendJob);
                                var sendBytes = Control.Ins.ConvertSendBodyData(CommunicationTopic.ct.HeartBeat, bodyString, false);
                                SendMessage(sendBytes);
                                heartBeatTime = DateTime.Now;
                            }
                            Thread.Sleep(100);
                        }
                    });
                    heartBeatThread.Start();
                }
                else
                {
                    try
                    {
                        heartBeatThread?.Abort();
                    }
                    Thread.Sleep(100);
                });
                heartBeatThread.Start();
                    catch (Exception ex)
                    {
                        MainPage.Log($"启动心跳线程,重启线程异常:{ex.Message}");
                    }
                    finally
                    {
                        heartBeatThread = null;
                        HeartBeat();
                    }
                }
            }
        }
        /// <summary>
@@ -160,49 +306,84 @@
        /// </summary>
        private Thread receiveThread;
        private object lockObj = new object();
        //接收消息
        public void ReceiveMessage()
        {
            if(receiveThread == null)
            lock (lockObj)
            {
                receiveThread = new Thread(() => {
                    while (true)
                if (receiveThread == null)
                {
                    receiveThread = new Thread(() =>
                    {
                        if(_tcpClient == null)
                        while (isConnected)
                        {
                            receiveThread.Abort();
                            receiveThread = null;
                            return;
                        }
                        if (!_tcpClient.Connected)
                        {
                            MainPage.Log("tcp客户端断开了连接...");
                            receiveThread.Abort();
                            receiveThread = null;
                            isConnected = false;
                            return;
                            if (_tcpClient == null)
                            {
                                try
                                {
                                    receiveThread?.Abort();
                                }
                                catch { }
                                finally
                                {
                                    receiveThread = null;
                                }
                                return;
                            }
                            if (!_tcpClient.Connected)
                            {
                                MainPage.Log("tcp客户端断开了连接...");
                                isConnected = false;
                                return;
                            }
                            try
                            {
                                // 定义一个2M的缓存区;
                                byte[] arrMsgRec = new byte[1024 * 1024 * 2];
                                try
                                {
                                    int size = _tcpClient.GetStream().Read(arrMsgRec, 0, arrMsgRec.Length);
                                }
                                catch (Exception ex)
                                {
                                    isConnected = false;
                                    MainPage.Log($"局域网tcp数据接收异常:{ex.Message}");
                                    return;
                                }
                                var tcpDataString = System.Text.Encoding.UTF8.GetString(arrMsgRec, 0, arrMsgRec.Length);
                                if (!string.IsNullOrEmpty(tcpDataString))
                                {
                                    MainPage.Log($"局域网tcp数据接收");
                                    Control.Ins.ConvertReceiveData(arrMsgRec, null);
                                }
                            }
                            catch (Exception) { }
                        }
                        // 定义一个2M的缓存区;
                        byte[] arrMsgRec = new byte[1024 * 1024 * 2];
                        int size = _tcpClient.GetStream().Read(arrMsgRec, 0, arrMsgRec.Length);
                        var tcpDataString = System.Text.Encoding.UTF8.GetString(arrMsgRec, 0, arrMsgRec.Length);
                        if (!string.IsNullOrEmpty(tcpDataString))
                        {
                            MainPage.Log($"局域网tcp数据接收");
                            Control.Ins.ConvertReceiveData(arrMsgRec, null);
                        }
                    });
                    //receiveThread.IsBackground = true;
                    receiveThread.Start();
                }
                else
                {
                    try
                    {
                        receiveThread?.Abort();
                    }
                });
                //receiveThread.IsBackground = true;
                receiveThread.Start();
                    catch { }
                    finally
                    {
                        receiveThread = null;
                        ReceiveMessage();
                    }
                }
            }
        }
    }
}
HDL_ON/Entity/Function/Scene.cs
@@ -95,7 +95,7 @@
        /// <summary>
        /// 云端oss存储图片的路径
        /// </summary>
        public string image = "";
        public string image = "Intelligence/Gallery/scenebg1.png";
        ///// <summary>
        ///// 场景背景
@@ -119,10 +119,10 @@
                }
                else
                {
                    var sceneImageInfo = OssSceneImages.Find((obj) => obj.defaultIconName == image);
                    var sceneImageInfo = OssSceneImages.Find((obj) => obj.defaultIconUrl == image);
                    if (sceneImageInfo != null)
                    {
                        return sceneImageInfo.defaultIconName;
                        return sceneImageInfo.localUrl;
                    }
                    return image;
                }
@@ -152,51 +152,61 @@
            new SceneImageInfo
            {
                defaultIconName = "scenebg1",
                defaultIconUrl = "http://hdl-hz-prod.oss-cn-hangzhou.aliyuncs.com/20/2022/07/781c397f-611a-48a2-a3ed-2520ffb971bb.png"
                defaultIconUrl = "http://hdl-hz-prod.oss-cn-hangzhou.aliyuncs.com/20/2022/07/781c397f-611a-48a2-a3ed-2520ffb971bb.png",
                localUrl = "Intelligence/Gallery/scenebg1.png",
            },
            new SceneImageInfo
            {
                defaultIconName = "scenebg2",
                localUrl = "Intelligence/Gallery/scenebg2.png",
                defaultIconUrl = "http://hdl-hz-prod.oss-cn-hangzhou.aliyuncs.com/20/2022/07/be2a7c63-a6c0-427a-bb6d-f5c06f5b2f05.png"
            },
            new SceneImageInfo
            {
                defaultIconName = "scenebg3",
                localUrl = "Intelligence/Gallery/scenebg3.png",
                defaultIconUrl = "http://hdl-hz-prod.oss-cn-hangzhou.aliyuncs.com/20/2022/07/5d801aca-03fb-4ef3-88ec-75ade3aa1c94.png"
            },
            new SceneImageInfo
            {
                defaultIconName = "scenebg4",
                localUrl = "Intelligence/Gallery/scenebg4.png",
                defaultIconUrl = "http://hdl-hz-prod.oss-cn-hangzhou.aliyuncs.com/20/2022/07/a205306c-4fcd-4ea1-8e88-e84282dc0d54.png"
            },
            new SceneImageInfo
            {
                defaultIconName = "scenebg5",
                localUrl = "Intelligence/Gallery/scenebg5.png",
                defaultIconUrl = "http://hdl-hz-prod.oss-cn-hangzhou.aliyuncs.com/20/2022/07/93a0acdc-14be-4776-a9fd-e0fc6f13c909.png"
            },
            new SceneImageInfo
            {
                defaultIconName = "scenebg6",
                localUrl = "Intelligence/Gallery/scenebg6.png",
                defaultIconUrl = "http://hdl-hz-prod.oss-cn-hangzhou.aliyuncs.com/20/2022/07/45074923-2227-422a-be33-e37e6c3f9d23.png"
            },
            new SceneImageInfo
            {
                defaultIconName = "scenebg7",
                localUrl = "Intelligence/Gallery/scenebg7.png",
                defaultIconUrl = "http://hdl-hz-prod.oss-cn-hangzhou.aliyuncs.com/20/2022/07/28b3e459-041e-4ea1-9ff9-57053c5357f4.png"
            },
            new SceneImageInfo
            {
                defaultIconName = "scenebg8",
                localUrl = "Intelligence/Gallery/scenebg8.png",
                defaultIconUrl = "http://hdl-hz-prod.oss-cn-hangzhou.aliyuncs.com/20/2022/07/d470b979-cc06-4701-a2bd-7301856c9195.png"
            },
            new SceneImageInfo
            {
                defaultIconName = "scenebg9",
                localUrl = "Intelligence/Gallery/scenebg9.png",
                defaultIconUrl = "http://hdl-hz-prod.oss-cn-hangzhou.aliyuncs.com/20/2022/07/1a130d03-86b2-4174-b986-6f6c312a959f.png"
            },
            new SceneImageInfo
            {
                defaultIconName = "scenebg10",
                localUrl = "Intelligence/Gallery/scenebg10.png",
                defaultIconUrl = "http://hdl-hz-prod.oss-cn-hangzhou.aliyuncs.com/20/2022/07/54c1c7ab-9b63-4487-a77d-d5d3dadd9801.png"
            }
        };
@@ -862,6 +872,7 @@
    {
        public string defaultIconName;
        public string defaultIconUrl;
        public string localUrl;
    }
HDL_ON/Entity/FunctionList.cs
@@ -24,7 +24,11 @@
                    var filePathList = FileUtlis.Files.ReadFiles();
                    foreach (var filePath in filePathList)
                    {
                        _FunctionList.IniFunctionList(filePath);
                        try
                        {
                            _FunctionList.IniFunctionList(filePath);
                        }
                        catch { }
                    }
                    #endregion
                }
HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs
@@ -170,10 +170,11 @@
                TextColor = CSS_Color.FirstLevelTitleColor,
                TextSize = 50,
                IsBold = true,
                Text = Convert.ToDouble(temp).ToString(),
                Text = "28",
                TextAlignment = TextAlignment.Center,
            };
            btnTemp.Width = btnTemp.GetTextWidth() + Application.GetRealWidth(5);
            btnTemp.Text = Convert.ToDouble(temp).ToString();
            FrameWhiteCentet1.AddChidren(btnTemp);
@@ -959,7 +960,7 @@
                    device.SetAttrState(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString());
                    btnTemp.Text = arcBar.Progress.ToString();
                    controlTime = DateTime.Now;
                    System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                    Dictionary<string, string> d = new Dictionary<string, string>();
                    d.Add(FunctionAttributeKey.SetTemp, arcBar.Progress.ToString());
                    Control.Ins.SendWriteCommand(device, d);
                };