using System; using System.Collections.Generic; using Newtonsoft.Json.Linq; using ZigBee.Device; using ZigBee.Common; using Shared.Common; namespace Shared.Phone.Device.Logic { public class Send { /// /// 获取LogicId的方法 /// /// The logic identifier. public static async System.Threading.Tasks.Task> GetLogicId() { return await System.Threading.Tasks.Task.Run(async () => { List logicIdList = new List(); Action action = (topic, data) => { var gatewayID = topic.Split('/')[0]; var jObjectdata = JObject.Parse(data); if (jObjectdata == null) { return; } if (topic == $"{gatewayID}/Logic/GetLogicList_Respon") { var list = jObjectdata["Data"]["LogicList"]; if (list == null) { return; } foreach (var listIfon in list) { var logicId = int.Parse(listIfon["LogicId"].ToString()); logicIdList.Add(logicId); } } }; var mainGateWay = ZbGateway.MainGateWay; if (mainGateWay == null) { Console.WriteLine("没有主网关"); return logicIdList; } mainGateWay.GwResDataAction += action; var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 2004 } }; mainGateWay?.Send("Logic/GetLogicList", jObject.ToString()); //await System.Threading.Tasks.Task.Run(async () => //{ var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < 3 * 1000) { await System.Threading.Tasks.Task.Delay(100); if (logicIdList.Count != 0) { break; } } ZbGateway.MainGateWay.GwResDataAction -= action; //}); return logicIdList; }); } /// /// 获取Logic的方法 /// /// The logic identifier. public static async System.Threading.Tasks.Task GetLogic(int LogicId) { return await System.Threading.Tasks.Task.Run(async () => { Common.Logic logic = null; Action action = (topic, data) => { var gatewayID = topic.Split('/')[0]; var jObjectdata = JObject.Parse(data); if (jObjectdata == null) { return; } if (topic == $"{gatewayID}/Logic/GetLogicInfo_Respon") { logic = new Common.Logic(); var Logicifon = jObjectdata["Data"]; logic.LogicId = int.Parse(Logicifon["LogicId"]?.ToString()); logic.IsEnable = int.Parse(Logicifon["IsEnable"]?.ToString()); logic.LogicName = Logicifon["LogicName"]?.ToString(); logic.Relationship = int.Parse(Logicifon["Relationship"]?.ToString()); logic.TimeAttribute = Newtonsoft.Json.JsonConvert.DeserializeObject(Logicifon["TimeAttribute"].ToString()); logic.Conditions = Newtonsoft.Json.JsonConvert.DeserializeObject>>(Logicifon["Conditions"].ToString()); logic.Accounts = Newtonsoft.Json.JsonConvert.DeserializeObject>>(Logicifon["Accounts"].ToString()); var listactions = Newtonsoft.Json.JsonConvert.DeserializeObject>>(Logicifon["Actions"].ToString()); if (listactions != null) { foreach (var actions in listactions) { Dictionary actionsdictionary = new Dictionary(); List> tasklist = new List>(); if (actions["LinkType"].ToString() == "0") { actionsdictionary.Add("LinkType", actions["LinkType"]); actionsdictionary.Add("DeviceAddr", actions["DeviceAddr"]); actionsdictionary.Add("Epoint", actions["Epoint"]); actionsdictionary.Add("Time", actions["Time"]); var list = JArray.Parse(actions["TaskList"].ToString()); foreach (var taskIfon in list) { Dictionary dictionary = new Dictionary(); dictionary.Add("TaskType", taskIfon["TaskType"].ToString()); dictionary.Add("Data1", taskIfon["Data1"].ToString()); dictionary.Add("Data2", taskIfon["Data2"].ToString()); tasklist.Add(dictionary); } actionsdictionary.Add("TaskList", tasklist); } else { actionsdictionary = actions; } logic.Actions.Add(actionsdictionary); } } } }; var mainGateWay = ZbGateway.MainGateWay; if (mainGateWay == null) { Console.WriteLine("没有主网关"); return logic; } mainGateWay.GwResDataAction += action; try { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 2002 } }; var data = new JObject { { "LogicId",LogicId} }; jObject.Add("Data", data); ZbGateway.MainGateWay?.Send("Logic/GetLogicInfo", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < 3 * 1000) { await System.Threading.Tasks.Task.Delay(100); if (logic != null) { break; } } ZbGateway.MainGateWay.GwResDataAction -= action; return logic; }); } /// /// 删除逻辑 /// public static async System.Threading.Tasks.Task DelLogic(int LogicId) { return await System.Threading.Tasks.Task.Run(async () => { //Result:0成功,1失败; int Result = 3; Action action = (topic, dataleng) => { var gatewayID = topic.Split('/')[0]; var jobject = JObject.Parse(dataleng); if (topic == gatewayID + "/" + "Logic/DelLogic_Respon") { Result = int.Parse(jobject["Data"]["Result"].ToString()); } }; var mainGateWay = ZbGateway.MainGateWay; if (mainGateWay == null) { Console.WriteLine("没有主网关"); return Result; } ZbGateway.MainGateWay.Actions += action; var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 2009 } }; var data = new JObject { { "LogicId",LogicId} }; jObject.Add("Data", data); ZbGateway.MainGateWay?.Send("Logic/DelLogic", jObject.ToString()); var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < 3 * 1000) { await System.Threading.Tasks.Task.Delay(100); if (Result != 3) { break; } } ZbGateway.MainGateWay.Actions -= action; return Result; }); } /// /// 添加或修改逻辑 /// public static async System.Threading.Tasks.Task AddModifyLogic(Common.Logic logic) { return await System.Threading.Tasks.Task.Run(async () => { Common.Logic Logicifon = null; Action action = (topic, datastring) => { var gatewayID = topic.Split('/')[0]; var jObjectdata = JObject.Parse(datastring); if (jObjectdata == null) { return; } if (topic == gatewayID + "/Logic/AddLogic_Respon") { try { Logicifon = new Common.Logic(); Logicifon = Newtonsoft.Json.JsonConvert.DeserializeObject(jObjectdata["Data"].ToString()); } catch (Exception ex) { var mess = ex.Message; } } }; var mainGateWay = ZbGateway.MainGateWay; if (mainGateWay == null) { Console.WriteLine("没有主网关"); return Logicifon; } ZbGateway.MainGateWay.Actions += action; try { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 2000 } }; var selectMonthList = new JArray { }; foreach (var intvalue in logic.TimeAttribute.SelectMonDate) { selectMonthList.Add(intvalue); } var timeAttribute = new JObject{ { "Calendar",logic.TimeAttribute.Calendar}, { "Repeat", logic.TimeAttribute.Repeat} , { "WeekDay", logic.TimeAttribute.WeekDay} , { "SetYear",logic.TimeAttribute.SetYear} , { "MonthDate", logic.TimeAttribute.MonthDate} , { "SelectMonth", logic.TimeAttribute.SelectMonth} , { "SelectMonDate", selectMonthList}, }; var conditions = new JArray(); foreach (var dictionary in logic.Conditions) { var Type = int.Parse(dictionary["Type"]); // (0:时间点条件;1:设备状态变化条件;2:其他逻辑条件;3:计数器条件;4:倒计时;5:时间段条件) switch (Type) { case 0: var tInfo = new JObject { ["Type"] = int.Parse(dictionary["Type"]), ["IsValid"] = int.Parse(dictionary["IsValid"]), ["DateType"] = int.Parse(dictionary["DateType"]), ["RemindTime"] = int.Parse(dictionary["RemindTime"]), ["EnDelay"] = int.Parse(dictionary["EnDelay"]), ["DelayTime"] = int.Parse(dictionary["DelayTime"]), }; if (dictionary["DateType"].ToString() == "0") { tInfo.Add("StartHour", int.Parse(dictionary["StartHour"])); tInfo.Add("StartMin", int.Parse(dictionary["StartMin"])); } else { tInfo.Add("AdjustTime", int.Parse(dictionary["AdjustTime"])); } conditions.Add(tInfo); break; case 1: var dInfo = new JObject { ["Type"] = int.Parse(dictionary["Type"]), ["IsValid"] = int.Parse(dictionary["IsValid"]), ["MacAddr"] = dictionary["MacAddr"], ["Epoint"] = int.Parse(dictionary["Epoint"]), ["Cluster_ID"] = int.Parse(dictionary["Cluster_ID"]), ["AttriButeId"] = int.Parse(dictionary["AttriButeId"]), ["AttriButeData1"] = int.Parse(dictionary["AttriButeData1"]), ["AttriButeData2"] = int.Parse(dictionary["AttriButeData2"]), ["Range"] = int.Parse(dictionary["Range"]) }; if (dictionary.ContainsKey("IgnoreTime")) { dInfo.Add("IgnoreTime", int.Parse(dictionary["IgnoreTime"])); } conditions.Add(dInfo); break; case 2: var lInfo = new JObject { ["Type"] = int.Parse(dictionary["Type"]), ["IsValid"] = int.Parse(dictionary["IsValid"]), ["Condition_LogicId"] = int.Parse(dictionary["Condition_LogicId"]), }; conditions.Add(lInfo); break; case 3: var cInfo = new JObject { ["Type"] = int.Parse(dictionary["Type"]), ["IsValid"] = int.Parse(dictionary["IsValid"]), ["MacAddr"] = dictionary["MacAddr"], ["Epoint"] = int.Parse(dictionary["Epoint"]), ["Cluster_ID"] = int.Parse(dictionary["Cluster_ID"]), ["AttriButeId"] = int.Parse(dictionary["AttriButeId"]), ["AttriButeData1"] = int.Parse(dictionary["AttriButeData1"]), ["AttriButeData2"] = int.Parse(dictionary["AttriButeData2"]), ["Range"] = int.Parse(dictionary["Range"]), ["Number"] = int.Parse(dictionary["Number"]), ["Time"] = int.Parse(dictionary["Time"]), ["Cycle"] = int.Parse(dictionary["Cycle"]), }; conditions.Add(cInfo); break; case 4: var cdInfo = new JObject { ["Type"] = int.Parse(dictionary["Type"]), ["IsValid"] = int.Parse(dictionary["IsValid"]), ["Time"] = int.Parse(dictionary["Time"]), }; conditions.Add(cdInfo); break; case 5: var tbInfo = new JObject { ["Type"] = int.Parse(dictionary["Type"]), ["IsValid"] = int.Parse(dictionary["IsValid"]), ["StartHour"] = int.Parse(dictionary["StartHour"]), ["StartMin"] = int.Parse(dictionary["StartMin"]), ["StopHour"] = int.Parse(dictionary["StopHour"]), ["StopMin"] = int.Parse(dictionary["StopMin"]), }; conditions.Add(tbInfo); break; case 6: var sInfo = new JObject { ["Type"] = int.Parse(dictionary["Type"]), ["IsValid"] = int.Parse(dictionary["IsValid"]), ["EnOrWithdrawMode"] = int.Parse(dictionary["EnOrWithdrawMode"]), ["ModeId"] = int.Parse(dictionary["ModeId"]), }; conditions.Add(sInfo); break; } } var actions = new JArray(); foreach (var dictionary in logic.Actions) { var linkType = int.Parse(dictionary["LinkType"].ToString()); switch (linkType) { case 0: var taskList = new JArray(); var TaskList = dictionary["TaskList"] as List>; foreach (var taskInfo in TaskList) { var info = new JObject { ["TaskType"] = int.Parse(taskInfo["TaskType"].ToString()), ["Data1"] = int.Parse(taskInfo["Data1"].ToString()), ["Data2"] = int.Parse(taskInfo["Data2"].ToString()), }; taskList.Add(info); } var tInfo = new JObject { ["LinkType"] = int.Parse(dictionary["LinkType"].ToString()), ["DeviceAddr"] = dictionary["DeviceAddr"].ToString(), ["Epoint"] = int.Parse(dictionary["Epoint"].ToString()), ["Time"] = int.Parse(dictionary["Time"].ToString()), ["taskList"] = taskList, }; actions.Add(tInfo); break; case 2: var dInfo = new JObject { ["LinkType"] = int.Parse(dictionary["LinkType"].ToString()), ["DeviceAddr"] = int.Parse(dictionary["DeviceAddr"].ToString()), }; actions.Add(dInfo); break; case 4: var lInfo = new JObject { ["LinkType"] = int.Parse(dictionary["LinkType"].ToString()), ["DeviceAddr"] = int.Parse(dictionary["DeviceAddr"].ToString()), ["EnableLogic"] = int.Parse(dictionary["EnableLogic"].ToString()), }; actions.Add(lInfo); break; case 6: var cdInfo = new JObject { ["LinkType"] = int.Parse(dictionary["LinkType"].ToString()), ["SecuritySetting"] = int.Parse(dictionary["SecuritySetting"].ToString()), ["SecurityModeId"] = int.Parse(dictionary["SecurityModeId"].ToString()), ["CheckIASStatus"] = int.Parse(dictionary["CheckIASStatus"].ToString()), ["IsDelayStart"] = int.Parse(dictionary["IsDelayStart"].ToString()), ["Password"] = dictionary["Password"].ToString(), }; actions.Add(cdInfo); break; case 7: var timeInfo = new JObject { ["LinkType"] = int.Parse(dictionary["LinkType"].ToString()), ["DelayTime"] = int.Parse(dictionary["DelayTime"].ToString()), }; actions.Add(timeInfo); break; } } var accounts = new JArray(); foreach (var dictionary in logic.Accounts) { var Type = int.Parse(dictionary["Type"]); switch (Type) { case 1: { /// } break; case 7: { var location = new JObject { ["Type"] = int.Parse(dictionary["Type"]), ["Account"] = dictionary["Account"], ["Longitude"] = int.Parse(dictionary["Longitude"]), ["Latitude"] = int.Parse(dictionary["Latitude"]), ["Radius"] = int.Parse(dictionary["Radius"]), }; accounts.Add(location); } break; } } var data = new JObject{ { "LogicId",logic.LogicId}, { "IsEnable", logic.IsEnable} , { "LogicName", logic.LogicName}, { "Relationship",logic.Relationship} , { "LogicCustomPushText",logic.LogicCustomPushText} , { "TimeAttribute", timeAttribute} , { "Conditions", conditions }, { "Actions", actions }, { "Accounts", accounts }, }; jObject.Add("Data", data); ZbGateway.MainGateWay?.Send("Logic/AddLogic", jObject.ToString()); } catch (Exception e) { var dd = e.Message; } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < 3 * 1000) { await System.Threading.Tasks.Task.Delay(100); if (Logicifon != null) { break; } } ZbGateway.MainGateWay.Actions -= action; return Logicifon; }); } /// /// 单独控制自动化开关属性 /// /// public static async System.Threading.Tasks.Task LogicControlSwitch(Common.Logic logic) { return await System.Threading.Tasks.Task.Run(async () => { int intvalue = 3; Action action = (topic, data) => { var gatewayID = topic.Split('/')[0]; var jObjectdata = JObject.Parse(data); if (jObjectdata == null) { return; } if (topic == $"{gatewayID}/Logic/ReviseAttribute_Respon") { intvalue = int.Parse(jObjectdata["Data"]["Result"].ToString()); } }; var mainGateWay = ZbGateway.MainGateWay; if (mainGateWay == null) { Console.WriteLine("没有主网关"); return intvalue; } mainGateWay.GwResDataAction += action; var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 2001 } }; var date = new JObject(); jObject.Add("Data", date); date.Add("LogicId", logic.LogicId); date.Add("IsEnable", logic.IsEnable); date.Add("LogicName", logic.LogicName); date.Add("Relationship", logic.Relationship); date.Add("LogicCustomPushText", logic.LogicCustomPushText); mainGateWay?.Send("Logic/ReviseAttribute", jObject.ToString()); //await System.Threading.Tasks.Task.Run(async () => //{ var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < 3 * 1000) { await System.Threading.Tasks.Task.Delay(100); if (intvalue != 3) { break; } } ZbGateway.MainGateWay.GwResDataAction -= action; //}); return intvalue; }); } /// /// 获取Logic列表的方法 /// /// The logic identifier. public static async System.Threading.Tasks.Task> ReadList(int sum) { return await System.Threading.Tasks.Task.Run(async () => { var listLogic = new List(); bool @bool = false; Action action = (topic, data) => { var gatewayID = topic.Split('/')[0]; var jObjectdata = JObject.Parse(data); if (jObjectdata == null) { return; } if (topic == $"{gatewayID}/Logic/GetAllLogicListInfo_Respon") { var logic = new Common.Logic(); var Logicifon = jObjectdata["Data"]; logic.LogicId = int.Parse(Logicifon["LogicId"].ToString()); logic.IsEnable = int.Parse(Logicifon["IsEnable"].ToString()); logic.LogicName = Logicifon["LogicName"].ToString(); logic.Relationship = int.Parse(Logicifon["Relationship"].ToString()); logic.TimeAttribute = Newtonsoft.Json.JsonConvert.DeserializeObject(Logicifon["TimeAttribute"].ToString()); logic.Conditions = Newtonsoft.Json.JsonConvert.DeserializeObject>>(Logicifon["Conditions"].ToString()); List> listactions = new List>(); listactions = Newtonsoft.Json.JsonConvert.DeserializeObject>>(Logicifon["Actions"].ToString()); if (listactions != null) { foreach (var actions in listactions) { Dictionary actionsdictionary = new Dictionary(); List> tasklist = new List>(); if (actions["LinkType"].ToString() == "0") { actionsdictionary.Add("LinkType", actions["LinkType"]); actionsdictionary.Add("DeviceAddr", actions["DeviceAddr"]); actionsdictionary.Add("Epoint", actions["Epoint"]); actionsdictionary.Add("Time", actions["Time"]); var list = JArray.Parse(actions["TaskList"].ToString()); foreach (var taskIfon in list) { Dictionary dictionary = new Dictionary(); dictionary.Add("TaskType", taskIfon["TaskType"].ToString()); dictionary.Add("Data1", taskIfon["Data1"].ToString()); dictionary.Add("Data2", taskIfon["Data2"].ToString()); tasklist.Add(dictionary); } actionsdictionary.Add("TaskList", tasklist); } else { actionsdictionary = actions; } logic.Actions.Add(actionsdictionary); } } lock (listLogic) { var @null = listLogic.Find((o) => { return o.LogicId == logic.LogicId; }); if (@null == null) { listLogic.Add(logic); } } } if (topic == $"{gatewayID}/Logic/AllLogicNum_Respon") { @bool = true; } }; var mainGateWay = ZbGateway.MainGateWay; if (mainGateWay == null) { Console.WriteLine("没有主网关"); return listLogic; } mainGateWay.GwResDataAction += action; try { var jObject = new JObject { { "Cluster_ID", 0 }, { "Command", 2015 } }; ZbGateway.MainGateWay?.Send("Logic/GetAllLogicListInfo", jObject.ToString()); } catch { } var dateTime = DateTime.Now; while ((DateTime.Now - dateTime).TotalMilliseconds < 8 * 1000) { await System.Threading.Tasks.Task.Delay(100); //if (sum == listLogic.Count) //{ // break; //} if (@bool) { break; } } ZbGateway.MainGateWay.GwResDataAction -= action; return listLogic; }); } // /// 通过设备找到区域(房间)名称 /// /// Btnregionname. /// Device. public static void RoomNmae(Button btnregionname, CommonDevice device) { var room = new Common.Room(); btnregionname.Text = room.GetRoomNameByDevice(device); } public static List GetRoomList(string floorId) { return Common.Room.Lists.FindAll((obj) => obj.FloorId == floorId); } #region ----获取门锁 public static List ReadDoorLockIfon(string doorlockMac) { List list = new List(); string url = "https://global.hdlcontrol.com/HangZhouHdlCloudApi/App/GetHomePager";//子账号和主账号可能链接不同 System.Net.WebClient webClient = new System.Net.WebClient(); System.Collections.Specialized.NameValueCollection postValues = new System.Collections.Specialized.NameValueCollection(); postValues.Add("RequestVersion", CommonPage.RequestVersion); postValues.Add("ReqDto.LoginAccessToken", Config.Instance.Token); System.Threading.Tasks.Task.Run(() => { try { byte[] responseArray = webClient.UploadValues(url, postValues); var str = System.Text.Encoding.UTF8.GetString(responseArray); var jObject = JObject.Parse(str); if (jObject == null || jObject["StateCode"].ToString() != "Success") { return; } var pageData = jObject["ResponseData"]["PageData"].ToString(); var datalist = JArray.Parse(pageData); for (int i = 0; i < datalist.Count; i++) { var data = JObject.Parse(datalist[i].ToString()); if (Config.Instance.HomeId == data["Id"].ToString()) { Residential residential = new Residential(); if (Convert.ToBoolean(data["IsOthreShare"].ToString())) { //分享者ID residential.Id = data["Id"].ToString(); //是否是分享账号[true(是分享);false;(不是分享)]; residential.IsOthreShare = Convert.ToBoolean(data["IsOthreShare"].ToString()); //分享者住宅ID residential.MainUserDistributedMark = data["MainUserDistributedMark"].ToString(); residential.IsOtherAccountCtrl = true; residential.doorlockmac = doorlockMac; list = ReadToken(residential); } else { residential.Url = "https://global.hdlcontrol.com/HangZhouHdlCloudApi/DoorLock/GetDoorLockPager"; residential.Token = Config.Instance.Token; residential.Id = Config.Instance.HomeId; residential.IsOtherAccountCtrl = false; residential.doorlockmac = doorlockMac; list = ReadDoorLock(residential); } } } } catch { } }); var datetime = DateTime.Now; while ((DateTime.Now - datetime).TotalMilliseconds < 3*1000) { if (list.Count != 0) { break; } } return list; } public static List ReadToken(Residential residential) { List list = new List(); string url = "https://global.hdlcontrol.com/HangZhouHdlCloudApi/App/GetSharedHomeApiControl"; System.Net.WebClient webClient = new System.Net.WebClient(); System.Collections.Specialized.NameValueCollection postValues = new System.Collections.Specialized.NameValueCollection(); postValues.Add("RequestVersion", CommonPage.RequestVersion); postValues.Add("LoginAccessToken", Config.Instance.Token); postValues.Add("MainAccountId", residential.MainUserDistributedMark); postValues.Add("SharedHid", residential.Id); System.Threading.Tasks.Task.Run(() => { try { byte[] responseArray = webClient.UploadValues(url, postValues); var str = System.Text.Encoding.UTF8.GetString(responseArray); var jObject = JObject.Parse(str); if (jObject == null || jObject["StateCode"].ToString() != "Success") { return; } var RequestBaseUrl = jObject["ResponseData"]["RequestBaseUrl"].ToString(); var RequestToken = jObject["ResponseData"]["RequestToken"].ToString(); Residential lockifon = new Residential(); lockifon.Url = RequestBaseUrl + "/App/GetDoorLockPager"; lockifon.Token = RequestToken; lockifon.Id = Config.Instance.HomeId; lockifon.IsOtherAccountCtrl = true; lockifon.doorlockmac = residential.doorlockmac; list = ReadDoorLock(lockifon); } catch { } }); var datetime = DateTime.Now; while ((DateTime.Now - datetime).TotalMilliseconds < 3 * 1000) { if (list.Count != 0) { break; } } return list; } public static List ReadDoorLock(Residential lockifon) { List list = new List(); System.Net.WebClient webClient = new System.Net.WebClient(); System.Collections.Specialized.NameValueCollection postValues = new System.Collections.Specialized.NameValueCollection(); postValues.Add("RequestVersion", CommonPage.RequestVersion); postValues.Add("LoginAccessToken", lockifon.Token); postValues.Add("HomeId", lockifon.Id); postValues.Add("DoorLockId", lockifon.doorlockmac);//门锁Mac19091 postValues.Add("IsOtherAccountCtrl", lockifon.IsOtherAccountCtrl.ToString()); System.Threading.Tasks.Task.Run(() => { try { byte[] responseArray = webClient.UploadValues(lockifon.Url, postValues); var str = System.Text.Encoding.UTF8.GetString(responseArray); var jObject = JObject.Parse(str); if (jObject == null || jObject["StateCode"].ToString() != "Success") { return; } var pageData = jObject["ResponseData"]["PageData"].ToString(); var datalist = JArray.Parse(pageData); for (int i = 0; i < datalist.Count; i++) { var data = JObject.Parse(datalist[i].ToString()); DoorLock doorLock = new DoorLock(); doorLock.DoorLockLocalUserId = data["DoorLockLocalUserId"].ToString(); doorLock.OpenLockMode = int.Parse(data["OpenLockMode"].ToString()); doorLock.CloudAccountId = data["CloudAccountId"].ToString(); list.Add(doorLock); } } catch { } }); var datetime = DateTime.Now; while ((DateTime.Now - datetime).TotalMilliseconds < 3 * 1000) { if (list.Count != 0) { break; } } return list; } public class Residential { public string Id = string.Empty; public bool IsOthreShare; public string MainUserDistributedMark = string.Empty; public string Url = string.Empty; public string Token = string.Empty; public bool IsOtherAccountCtrl; public string doorlockmac; } public class DoorLock { public string DoorLockLocalUserId = string.Empty; public int OpenLockMode; public string CloudAccountId = string.Empty; /// /// 身份+触发源(0按键/3卡/15指纹) /// public string UserIdMode { get { return DoorLockLocalUserId + "_" + OpenLockMode.ToString(); } } } public class MembershipIfon { public string MembershipId = string.Empty; public List UserIdMode=new List(); public string MembershipName = string.Empty; } public static List UserList = new List(); #endregion } }