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