wei
2020-11-27 e53a1951d6aa07ad22aad9816da4703496fcbccd
HDL_ON/DAL/DriverLayer/Control_TcpServer.cs
@@ -171,101 +171,59 @@
                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;
            }
        }
@@ -362,17 +320,15 @@
    }
    /// <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>
@@ -381,21 +337,23 @@
    /// 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;
    }
}