From c3e1b733fc45bd9f0b88bfb560cfa87a270b079b Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期三, 09 九月 2020 17:33:58 +0800
Subject: [PATCH] 20200909

---
 HDL_ON/DAL/Net/TcpListener.cs |  129 ++++++++++++++++++++++---------------------
 1 files changed, 66 insertions(+), 63 deletions(-)

diff --git a/HDL_ON/DAL/Net/TcpListener.cs b/HDL_ON/DAL/Net/TcpListener.cs
index 17260f4..51f4e2b 100644
--- a/HDL_ON/DAL/Net/TcpListener.cs
+++ b/HDL_ON/DAL/Net/TcpListener.cs
@@ -6,6 +6,8 @@
 using System.Net.Sockets;
 using System.Threading;
 using System.Net;
+using Shared;
+using HDL_ON.Entity;
 
 namespace HDL_ON.DAL.Net
 {
@@ -154,8 +156,12 @@
                     lock (tcpClient.m_Buffer)
                     {
                         //tcpClient.m_Buffer.Add(buf);
-                        var tcpDataString = System.Text.Encoding.UTF8.GetString(buf);
-                        AnalysisTcpData(tcpDataString);
+                        var tcpDataString = System.Text.Encoding.UTF8.GetString(arrMsgRec, 0, length);
+                        if (!string.IsNullOrEmpty(tcpDataString))
+                        {
+                            AnalysisTcpData(socketClient, tcpDataString);
+                        }
+
                         MainPage.Log(tcpDataString);
                     }
                 }
@@ -166,25 +172,26 @@
                 Thread.Sleep(100);
             }
         }
-        List<Entity.FunctionOid> tcpAddFunctionOidObjects = new List<Entity.FunctionOid>();
+        string tcpFunctionOidJsonString = "";
         /// <summary>
         /// 澶勭悊tcp鏁版嵁
         /// </summary>
-        void AnalysisTcpData(string tcpDataString)
+        void AnalysisTcpData(Socket socket, string tcpDataString)
         {
+            MainPage.Log($"tcpDataString: {tcpDataString}");
             var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(tcpDataString);
-            if(obj == null)
+            if (obj == null)
             {
                 return;
             }
             var tcpCommand = obj.GetValue("command").ToString();
             var tcpType = obj.GetValue("type").ToString();
-          
+
             switch (tcpCommand)
             {
                 /*
                 case "search":// 閫傜敤浜庢悳绱�
-                case "get_list"://鑾峰彇鍒楄〃
+                case "read":// 鐢ㄤ簬渚濇璇诲彇鐩稿叧绫诲瀷淇℃伅鐘舵��
                 case "set_list":// 淇敼鍒楄〃
                 case "write":// 鐢ㄤ簬渚濇鎺у埗鐩稿叧绫诲瀷淇℃伅
                 case "delete":// 鐢ㄤ簬鍒犻櫎鐩稿叧鎿嶄綔
@@ -192,24 +199,25 @@
                 case "find":// 璁惧瀹氫綅
                 case "get":// 鐢ㄤ簬鑾峰彇sid褰撳墠鐘舵��
                 case "set":// 鐢ㄤ簬鎺у埗sid鐩稿叧鍙傛暟
-                    */
+                */
                 case "add":// 鐢ㄤ簬澧炲姞鍔熻兘
                     switch (tcpType)
                     {
                         case "device_oid":// 鐢ㄤ簬鍘熺敓鎬佽澶囪鍐欑浉鍏虫搷浣�
-                            tcpAddFunctionOidObjects = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Entity.FunctionOid>>(obj.GetValue("objects").ToString());
-
+                            tcpFunctionOidJsonString = tcpDataString;
                             break;
                         case "device_sid":
                             var addSidFunction = Newtonsoft.Json.JsonConvert.DeserializeObject<TcpAddFunctionSidObject>(tcpDataString);
-                            Shared.Application.RunOnMainThread(() => {
-                                var tipDialog = new HDL_ON.UI.UpdataTcpResidenceDataDialog();
-                                tipDialog.ShowDialog(addSidFunction.objects, tcpAddFunctionOidObjects);
+                            Application.RunOnMainThread(() =>
+                            {
+                                var tipDialog = new UI.UpdataTcpResidenceDataDialog();
+                                var tcpLocalFunction = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Function>>(Newtonsoft.Json.JsonConvert.SerializeObject(addSidFunction.objects));
+                                tipDialog.ShowDialog(tcpLocalFunction, tcpFunctionOidJsonString);
                             });
                             break;
                     }
                     break;
-                case "read":// 鐢ㄤ簬渚濇璇诲彇鐩稿叧绫诲瀷淇℃伅鐘舵��
+                case "get_list"://鑾峰彇鍒楄〃
                     switch (tcpType)
                     {
                         /*
@@ -223,48 +231,32 @@
                         case "global":// 鐢ㄤ簬缁勬挱鎼滅储A璁惧
                             */
                         case "device_oid":// 鐢ㄤ簬鍘熺敓鎬佽澶囪鍐欑浉鍏虫搷浣�
-                            Dictionary<string, object> dic_oid = new Dictionary<string, object>();
-                            dic_oid.Add("from_oid", null);
-                            dic_oid.Add("to_oid", null);
-                            dic_oid.Add("time_stamp", null);
-                            dic_oid.Add("type", "device_oid");
-                            dic_oid.Add("command", "get_list_response");
-
-                            List<object> oidObjList = new List<object>();
-                            foreach (var d01 in Entity.DB_ResidenceData.functionList.GetAllDeviceFunctionList())
+                            var bytes = FileUtils.ReadFile("AProtocolData_FunctionOid");
+                            //var jsonString = System.Text.Encoding.UTF8.GetString(bytes);
+                            //if (!string.IsNullOrEmpty(jsonString))
+                            if (bytes.Length > 0)
                             {
-                                Dictionary<string, object> d0 = new Dictionary<string, object>();
-                                d0.Add("oid", d01.sid);
-                                d0.Add("status", "online");
-                                d0.Add("device_name", d01.name);
-                                d0.Add("device_model","HDL MD0602.523");
-                                d0.Add("device_mac", "123456789067890");
-                                d0.Add("hw_info", "STM32F104");
-                                d0.Add("fw_version","HDL_V04.01U");
-                                oidObjList.Add(d0);
+                                socket.Send(bytes);
+                                MainPage.Log($"send oid list to 8586 prot :{ System.Text.Encoding.UTF8.GetString(bytes)}");
                             }
-                            dic_oid.Add("objects", oidObjList);
-                            Newtonsoft.Json.JsonConvert.SerializeObject(dic_oid);
                             break;
                         case "device_sid":// 鐢ㄤ簬鍔熻兘妯″瀷璇诲啓鎿嶄綔
-                            Dictionary<string, object> dic_sid = new Dictionary<string, object>();
-                            dic_sid.Add("from_oid", null);
-                            dic_sid.Add("to_oid", null);
-                            dic_sid.Add("time_stamp", null);
-                            dic_sid.Add("type", "device_sid");
-                            dic_sid.Add("command", "get_list_response");
+                            var sendSidObj = new TcpAddFunctionSidObject();
+                            sendSidObj.from_oid = "";
+                            sendSidObj.to_oid = "";
+                            sendSidObj.time_stamp = "";
+                            sendSidObj.type = "device_sid";
+                            sendSidObj.command = "get_list_response";
+                            //杞崲鎴恇us闇�瑕佺殑鏁版嵁鏍煎紡
+                            var localFunction = DB_ResidenceData.functionList.GetAllFunction();
+                            var localFunctionString = Newtonsoft.Json.JsonConvert.SerializeObject(localFunction);
+                            var tcpFunction = Newtonsoft.Json.JsonConvert.DeserializeObject<List<TcpObject>>(localFunctionString);
 
-                            List<object> sidObjList = new List<object>();
-                            foreach (var d01 in Entity.DB_ResidenceData.functionList.GetAllDeviceFunctionList())
-                            {
-                                Dictionary<string, object> d0 = new Dictionary<string, object>();
-                                d0.Add("sid", d01.sid);
-                                d0.Add("name", d01.name);
-                                d0.Add("type", d01.functionType);
-                                sidObjList.Add(d0);
-                            }
-                            dic_sid.Add("objects", sidObjList);
-                            Newtonsoft.Json.JsonConvert.SerializeObject(dic_sid);
+                            sendSidObj.objects.AddRange(tcpFunction);
+                            var sendSidJson = Newtonsoft.Json.JsonConvert.SerializeObject(sendSidObj);
+                            var sendSidBytes = System.Text.Encoding.UTF8.GetBytes(sendSidJson);
+                            socket.Send(sendSidBytes, sendSidBytes.Length, SocketFlags.OutOfBand);
+                            MainPage.Log($"send sid list to 8586 prot :{sendSidJson}");
                             break;
                     }
                     break;
@@ -365,20 +357,31 @@
 
     public class TcpAddFunctionSidObject
     {
-        public List<Entity.Function> objects;
+        public List<TcpObject> objects = new List<TcpObject>();
 
-        public string type;//device_sid
-        public string from_oid;//": null,
-        public string to_oid;//": null,
-        public string time_stamp;//": null,
-        public string command;//": "add"
+        public string from_oid = "";
+        public string to_oid = "";
+        public string time_stamp = "";
+        public string type = "";
+        public string command = "";
     }
 
-    //public class SidObject
-    //{
-    //    public List<Entity.Trait> function = new List<Entity.Trait>();
-    //    public string sid;//": "000101E10FEB7212040100010700",
-    //    public string name;//": "HVAC-1"
-    //}
+
+    public class TcpObject
+    {
+        public string sid = "0301011234567801012301230123";
+
+        /// <summary>
+        /// A鍗忚鍔熻兘鐨勭壒鎬�
+        /// 濡傦細鏄疉C鍔熻兘锛氱壒鎬э細on_off,mode,fan,temperature
+        /// attri
+        /// </summary>
+        public List<Trait> function = new List<Trait>();
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public string name;
+    }
 
 }
\ No newline at end of file

--
Gitblit v1.8.0