JLChen
2021-01-11 5a5a2b696866f947b6025d26c3302e8ffef46435
Crabtree/SmartHome/HDL/Operation/Packet.cs
old mode 100755 new mode 100644
@@ -3,7 +3,6 @@
using System.Linq;
using System.Text;
namespace Shared
{
   public class Packet
@@ -58,14 +57,19 @@
      /// </summary>
      public virtual void Manager ()
      {
         //对于操作数据库的时间比较长的,可以创建另一个线程处理
         if (!"HDLMIRACLE".Equals (System.Text.Encoding.ASCII.GetString (Bytes, 4, 10))) {
            //加密检测
            EncryptionDetection ();
            //var mes2 = System.Text.Encoding.ASCII.GetString (Bytes, 0, Bytes.Length);
            //Utlis.WriteLine ($"============>GetBytes :{mes2}");
            //对于操作数据库的时间比较长的,可以创建另一个线程处理
            if (!"HDLMIRACLE".Equals (System.Text.Encoding.ASCII.GetString (Bytes, 4, 10))) {
            return;
         }
         byte subnetID = this.Bytes [17]; //源子网号
         byte deviceID = this.Bytes [18]; //源设备号
         //源设备类型
         int deviceType = this.Bytes [19] * 256 + this.Bytes [20];
@@ -77,7 +81,8 @@
         //不是要接收的指令就返回
         if (!((targetSubnetID == Global.LocalSubnetID && targetDeviceID == Global.LocalDeviceID) || (targetSubnetID == 0xff && targetDeviceID == 0xff))) {
            return;
                //Utlis.WriteLine ($"============>targetSubnetID return");
                return;
         }
            byte [] usefulBytes = null;
            if (this.Bytes [16] == 0xFF) {
@@ -93,7 +98,7 @@
                try {
                    ReceiveEvent (subnetID, deviceID, command, usefulBytes);
                } catch (Exception ex) {
                    Console.WriteLine (ex.Message);
                    Utlis.WriteLine (ex.Message);
                }
            }
@@ -113,5 +118,44 @@
            }
            return s;//
        }
        /// <summary>
        /// 是否本地
        /// </summary>
        public bool IsLocal = true;
        /// <summary>
        /// 本地通讯时 加密检测
        /// </summary>
        void EncryptionDetection () {
            if (IsLocal) {//本地通讯
                if (UserConfig.Instance.IsLocalEncrypt) {
                    if (Bytes.Length == 28) {
                        var mes = System.Text.Encoding.ASCII.GetString (Bytes, 14, 14);
                        if ("Password error" == mes) {
                            //网关返回,加密密码key不对
                            UserConfig.Instance.EncryptedPasswordCorrect = false;
                            return;
                        }
                    }
                    var messageGet = Shared.Securitys.EncryptionService.AesDecryptPayload (Bytes, UserConfig.Instance.LocalEncryptKey);
                    Bytes = messageGet;
                } else {
                    if (Bytes.Length == 20) {
                        var mes = System.Text.Encoding.ASCII.GetString (Bytes, 14, 6);
                        if ("Locked" == mes) {
                            //网关已加密,自动切换为加密
                            UserConfig.Instance.IsLocalEncrypt = true;
                        }
                    }
                }
            }
        }
    }
}
}