| | |
| | | Thread.Sleep(100); |
| | | } |
| | | } |
| | | string tcpFunctionOidJsonString = ""; |
| | | /// <summary> |
| | | /// 获取列表数据回调方法 |
| | | /// </summary> |
| | | public Action<string> GetListResponseAction; |
| | | string tcpFunctionOidJsonString = ""; |
| | | /// <summary> |
| | | /// 处理tcp数据 |
| | | /// </summary> |
| | | void AnalysisTcpData(Socket socket, string tcpDataString) |
| | | void AnalysisTcpData(Socket socket, string tcpBodyDataString) |
| | | { |
| | | MainPage.Log($"tcpDataString: {tcpDataString}"); |
| | | var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(tcpDataString); |
| | | if (obj == null) |
| | | MainPage.Log($"0001 tcpDataString:\r\n {tcpBodyDataString}"); |
| | | var tcpDataObj = Control.Ins.AnalysisReceiveData(tcpBodyDataString); |
| | | if (tcpDataObj.BodyDataString == null) |
| | | { |
| | | return; |
| | | } |
| | | var tcpCommand = obj.GetValue("command").ToString(); |
| | | var tcpType = obj.GetValue("type").ToString(); |
| | | |
| | | switch (tcpCommand) |
| | | switch (tcpDataObj.Topic) |
| | | { |
| | | //获取数据返回 |
| | | case "get_list_response": |
| | | GetListResponseAction?.Invoke(tcpDataString); |
| | | case CommunicationTopic.AddDeviceOids: |
| | | tcpFunctionOidJsonString = tcpDataObj.BodyDataString; |
| | | break; |
| | | /* |
| | | case "search":// 适用于搜索 |
| | | case "read":// 用于依次读取相关类型信息状态 |
| | | case "set_list":// 修改列表 |
| | | case "write":// 用于依次控制相关类型信息 |
| | | case "delete":// 用于删除相关操作 |
| | | case "initialize":// 初始化 |
| | | case "find":// 设备定位 |
| | | case "get":// 用于获取sid当前状态 |
| | | case "set":// 用于控制sid相关参数 |
| | | */ |
| | | case "add":// 用于增加功能 |
| | | switch (tcpType) |
| | | case CommunicationTopic.AddFunctions: |
| | | var addSidFunction = Newtonsoft.Json.JsonConvert.DeserializeObject<TcpTransmissionSidsObj>(tcpDataObj.BodyDataString); |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | case "device_oid":// 用于原生态设备读写相关操作 |
| | | tcpFunctionOidJsonString = tcpDataString; |
| | | break; |
| | | case "device_sid": |
| | | var addSidFunction = Newtonsoft.Json.JsonConvert.DeserializeObject<TcpTransmissionObject>(tcpDataString); |
| | | 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; |
| | | } |
| | | var tipDialog = new UI.UpdataTcpResidenceDataDialog(); |
| | | var tcpLocalFunction = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Function>>(Newtonsoft.Json.JsonConvert.SerializeObject(addSidFunction.objects)); |
| | | tipDialog.ShowDialog(tcpLocalFunction, tcpFunctionOidJsonString); |
| | | }); |
| | | break; |
| | | case "get_list"://获取列表 |
| | | switch (tcpType) |
| | | { |
| | | /* |
| | | case "space":// 适用于全部设备, 获取空间信息 |
| | | case "device":// 网关或者其他A设备 |
| | | case "device_mac":// 用于设备机身号码相关操作 |
| | | case "scene":// 用于场景功能读写 |
| | | case "security":// 用于安防功能读写 |
| | | case "remote":// 用于远程信息读写操作 |
| | | case "logic":// 用于逻辑自动化读写操作 |
| | | case "global":// 用于组播搜索A设备 |
| | | */ |
| | | case "device_oid":// 用于原生态设备读写相关操作 |
| | | var bytes = FileUtils.ReadFile("AProtocolData_FunctionOid"); |
| | | //var jsonString = System.Text.Encoding.UTF8.GetString(bytes); |
| | | //if (!string.IsNullOrEmpty(jsonString)) |
| | | if (bytes.Length > 0) |
| | | { |
| | | socket.Send(bytes); |
| | | MainPage.Log($"send oid list to 8586 prot :{ System.Text.Encoding.UTF8.GetString(bytes)}"); |
| | | } |
| | | break; |
| | | case "device_sid":// 用于功能模型读写操作 |
| | | var sendSidObj = new TcpTransmissionObject(); |
| | | sendSidObj.from_oid = ""; |
| | | sendSidObj.to_oid = ""; |
| | | sendSidObj.time_stamp = ""; |
| | | sendSidObj.type = "device_sid"; |
| | | sendSidObj.command = "get_list_response"; |
| | | //转换成bus需要的数据格式 |
| | | var localFunction = DB_ResidenceData.functionList.GetAllFunction(); |
| | | var localFunctionString = Newtonsoft.Json.JsonConvert.SerializeObject(localFunction); |
| | | var tcpFunction = Newtonsoft.Json.JsonConvert.DeserializeObject<List<TcpObject>>(localFunctionString); |
| | | case CommunicationTopic.BusPcGetAppOids: |
| | | |
| | | 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; |
| | | var bytes = FileUtils.ReadFile(DB_ResidenceData.OidSavePathName); |
| | | if (bytes.Length > 0) |
| | | { |
| | | socket.Send(bytes); |
| | | MainPage.Log($"send oid list to 8586 prot :{ System.Text.Encoding.UTF8.GetString(bytes)}"); |
| | | } |
| | | break; |
| | | case CommunicationTopic.BusPcGetAppSids: |
| | | var sendSidObj = new TcpTransmissionSidsObj(); |
| | | sendSidObj.id = Control.Ins.msg_id.ToString(); |
| | | sendSidObj.time_stamp = ""; |
| | | //转换成bus需要的数据格式 |
| | | var localFunction = DB_ResidenceData.functionList.GetAllFunction(); |
| | | var localFunctionString = Newtonsoft.Json.JsonConvert.SerializeObject(localFunction); |
| | | var tcpFunction = Newtonsoft.Json.JsonConvert.DeserializeObject<List<BusSidObj>>(localFunctionString); |
| | | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// bus软件传输功能的对象 |
| | | /// bus软件传输功能的sid列表对象 |
| | | /// </summary> |
| | | public class TcpTransmissionObject |
| | | public class TcpTransmissionSidsObj |
| | | { |
| | | public List<TcpObject> objects = new List<TcpObject>(); |
| | | public List<BusSidObj> objects = new List<BusSidObj>(); |
| | | |
| | | public string from_oid = ""; |
| | | public string to_oid = ""; |
| | | public string id = ""; |
| | | public string time_stamp = ""; |
| | | public string type = ""; |
| | | public string command = ""; |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// Function对象包含了该对象的所有内容, |
| | | /// 此对象为了减少传输数据使用 |
| | | /// </summary> |
| | | public class TcpObject |
| | | public class BusSidObj |
| | | { |
| | | public string sid = "";// "0301011234567801012301230123"; |
| | | |
| | | /// <summary> |
| | | /// A协议功能的特性 |
| | | /// 如:是AC功能:特性:on_off,mode,fan,temperature |
| | | /// attri |
| | | /// A协议功能的属性 |
| | | /// 如:是AC功能:属性:on_off,mode,fan,temperature |
| | | /// </summary> |
| | | public List<Trait> function = new List<Trait>(); |
| | | public List<FunctionAttributes> attributes = new List<FunctionAttributes>(); |
| | | |
| | | /// <summary> |
| | | /// 备注 |
| | | /// </summary> |
| | | public string name; |
| | | |
| | | public string omodel; |
| | | |
| | | } |
| | | |
| | | } |