| | |
| | | using HDL_ON.DAL.Server; |
| | | using HDL_ON.Entity; |
| | | using HDL_ON.UI; |
| | | using Newtonsoft.Json; |
| | | using Newtonsoft.Json.Linq; |
| | | using Shared; |
| | | |
| | | namespace HDL_ON.DriverLayer |
| | | { |
| | | /// <summary> |
| | | /// 通讯方式 |
| | | /// </summary> |
| | | public enum CommunicationMode |
| | | { |
| | | none, |
| | | /// <summary> |
| | | /// 本地udp |
| | | /// </summary> |
| | | local_BusUdp, |
| | | /// <summary> |
| | | /// 本地tcp客户端 |
| | | /// </summary> |
| | | tcp_local_client, |
| | | } |
| | | |
| | | public class Control |
| | | { |
| | | |
| | |
| | | /// 记录接收到的消息,方便zb的工程师调试他们的设备 |
| | | /// </summary> |
| | | public List<string> MsgInfoList = new List<string>(); |
| | | private bool _LocalTcpClientLogin = false; |
| | | /// <summary> |
| | | /// 本地tcp客户端连接是否成功 |
| | | /// 是否登录网关成功 |
| | | /// </summary> |
| | | public bool LocalTcpClientLogin |
| | | { |
| | | get |
| | | { |
| | | return _LocalTcpClientLogin; |
| | | } |
| | | set |
| | | { |
| | | _LocalTcpClientLogin = value; |
| | | if (!value) |
| | | { |
| | | loginGatewayThread?.Abort(); |
| | | loginGatewayThread = null; |
| | | } |
| | | } |
| | | } |
| | | |
| | | int _msg_id = 1; |
| | | /// <summary> |
| | |
| | | public Control_Udp myUdp1 = null; |
| | | |
| | | /// <summary> |
| | | /// 通讯方式 |
| | | /// </summary> |
| | | public CommunicationMode communicationMode; |
| | | |
| | | /// <summary> |
| | | /// 打开tcp服务端 |
| | | /// </summary> |
| | | public void OpenTcpServer() |
| | |
| | | if (myTcpClient == null) |
| | | { |
| | | myTcpClient = new Control_TcpClient(reportIp); |
| | | myTcpClient.Connect(); |
| | | } |
| | | myTcpClient.Connect(); |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | } |
| | | if (DB_ResidenceData.Instance.GatewayType == 0) |
| | | { |
| | | new Control_Udp().ControlBytesSend(Command.ReadGateway, 255, 255, new byte[] { (byte)new Random().Next(255), (byte)new Random().Next(255) }); |
| | | new Control_Udp().ControlBytesSend(Command.ReadGateway, 255, 255, |
| | | new byte[] { (byte)new Random().Next(255), (byte)new Random().Next(255) }); |
| | | } |
| | | else if (DB_ResidenceData.Instance.GatewayType == 1) |
| | | { |
| | |
| | | { IsBackground = true }.Start(); |
| | | } |
| | | } |
| | | |
| | | |
| | | private System.Threading.Thread loginGatewayThread; |
| | | |
| | | /// <summary> |
| | | /// 登录网关 |
| | | /// </summary> |
| | | public void LoginGateway() |
| | | { |
| | | if(loginGatewayThread== null) |
| | | { |
| | | loginGatewayThread = new System.Threading.Thread(() => { |
| | | while (!Ins.myTcpClient.isConnected) |
| | | { |
| | | if (Ins.GatewayOnline_Local && myTcpClient.isConnected) |
| | | { |
| | | var sendData = new { clientType = "app", version = "1.0" }; |
| | | var sendJob = new { id = Control.Ins.msg_id.ToString(), time_stamp = Utlis.GetTimestamp(), objects = sendData }; |
| | | |
| | | var bodyString = JsonConvert.SerializeObject(sendJob); |
| | | |
| | | var sendBytes = ConvertSendBodyData($"/user/{GatewayId}/custom/gateway/login", bodyString); |
| | | |
| | | Ins.myTcpClient.SendMessage(sendBytes); |
| | | } |
| | | System.Threading.Thread.Sleep(2000); |
| | | } |
| | | //loginGatewayThread?.Abort(); |
| | | //loginGatewayThread = null; |
| | | |
| | | }); |
| | | loginGatewayThread.Start(); |
| | | } |
| | | else |
| | | { |
| | | try |
| | | { |
| | | loginGatewayThread?.Abort(); |
| | | }catch (Exception ex) |
| | | { |
| | | MainPage.Log($"重启登录网关线程异常:{ex.Message}"); |
| | | } |
| | | finally |
| | | { |
| | | loginGatewayThread = null; |
| | | LoginGateway(); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 场景控制入口 |
| | |
| | | } |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 安防控制 |
| | | /// </summary> |
| | | public void ControlArm() |
| | | { |
| | | DAL.Server.HttpServerRequest httpServer = new DAL.Server.HttpServerRequest(); |
| | | //var pack = httpServer.GetSecurityAlarmLogList |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 发送命令 |
| | |
| | | /// <param name="function"></param> |
| | | /// <param name="useRemote">是否直接使用远程发送</param> |
| | | /// <returns></returns> |
| | | public void SendWriteCommand(Function function, Dictionary<string, string> commandDictionary, bool useRemote = false,int resend = 3) |
| | | public bool SendWriteCommand(Function function, Dictionary<string, string> commandDictionary, bool useRemote = false,int resend = 3) |
| | | { |
| | | function.controlCounter++; |
| | | function.refreshTime = DateTime.Now; |
| | | |
| | | |
| | | //如果是控制调光的开时,亮度值不能为0 |
| | | if (commandDictionary.Count > 2) |
| | |
| | | upDataObj.objects.Add(asd); |
| | | revString = Newtonsoft.Json.JsonConvert.SerializeObject(upDataObj); |
| | | UpdataFunctionStatus(revString, null, true); |
| | | return; |
| | | return true; |
| | | } |
| | | |
| | | |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | /// <summary> |
| | | /// 全开全关功能 |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 发送读取命令 |
| | | /// 自动判断是否为A协议设备 |
| | | /// </summary> |
| | | public void SendReadCommand(List<Function> functions, bool forceRemote = false) |
| | | { |
| | | List<string> sids = new List<string>(); |
| | | foreach (Function function in functions) |
| | | { |
| | | sids.Add(function.sid); |
| | | function.refreshTime = DateTime.Now; |
| | | } |
| | | if (forceRemote) |
| | | { |
| | | |
| | | var pm = new DAL.Server.HttpServerRequest(); |
| | | var pack = pm.RefreshDeviceStatus(sids); |
| | | } |
| | | else |
| | | { |
| | | if (Ins.GatewayOnline_Local) |
| | | { |
| | | |
| | | if (DB_ResidenceData.Instance.GatewayType == 0) |
| | | { |
| | | try |
| | | { |
| | | var busClient = new Control_Udp(); |
| | | foreach (Function function in functions) |
| | | { |
| | | busClient.ReadBusData(function); |
| | | } |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"发送数据异常: {ex.Message}"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var objects = new List<Dictionary<string, string>>(); |
| | | |
| | | |
| | | foreach (Function function in functions) |
| | | { |
| | | var readKey = new Dictionary<string, string>(); |
| | | readKey.Add("sid", function.sid); |
| | | objects.Add(readKey); |
| | | } |
| | | |
| | | |
| | | var readDataObj = new AlinkReadFunctionStatusObj() |
| | | { |
| | | id = Ins.msg_id.ToString(), |
| | | objects = objects, |
| | | time_stamp = Utlis.GetTimestamp() |
| | | }; |
| | | var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj); |
| | | var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson); |
| | | MainPage.Log($"本地通讯 发送HDL-Link数据:{functionControlDataJson}"); |
| | | new Control_Udp().SendLocalHdlLinkData(sendBytes, readDataObj.id); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var pm = new DAL.Server.HttpServerRequest(); |
| | | var pack = pm.RefreshDeviceStatus(sids); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 安防控制 |
| | | /// </summary> |
| | | public void ControlSecurity(SecurityAlarm securityAlarm,string state) |
| | |
| | | new Control_Udp().SendLocalHdlLinkData(sendBytes, aLinkData.id,0); |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 获取音乐目录 |
| | | /// </summary> |
| | | public void GetMusicDirectory(Function function) |
| | | { |
| | | if (Ins.GatewayOnline_Local) |
| | | { |
| | | var objects = new List<Dictionary<string, string>>(); |
| | | var readKey = new Dictionary<string, string>(); |
| | | readKey.Add("sid", function.sid); |
| | | objects.Add(readKey); |
| | | var readDataObj = new AlinkReadFunctionStatusObj() |
| | | { |
| | | id = Ins.msg_id.ToString(), |
| | | objects = objects, |
| | | time_stamp = Utlis.GetTimestamp() |
| | | }; |
| | | var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj); |
| | | var sendBytes = Ins.ConvertSendBodyData($"/base/{DB_ResidenceData.Instance.HomeGateway.gatewayId}/thing/service/MusicPlayGroupListGet/down", functionControlDataJson); |
| | | MainPage.Log($"本地通讯 发送HDL-Link数据:{functionControlDataJson}"); |
| | | new Control_Udp().SendLocalHdlLinkData(sendBytes, readDataObj.id); |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 网关进入配网模式 |
| | | /// </summary> |
| | |
| | | { |
| | | LocalCommunicationData receiveObj = new LocalCommunicationData(); |
| | | |
| | | MainPage.Log($"局域网信息: \r\n{receiveString}"); |
| | | |
| | | var res = receiveString.Split("\r\n\r\n"); |
| | | |
| | |
| | | //} |
| | | receiveObj.BodyDataString = res[1]; |
| | | |
| | | if (receiveObj.Topic == CommunicationTopic.ct.HeartBeat + "_reply") |
| | | { |
| | | Ins.myTcpClient.ClearHeartBeatLog(); |
| | | MainPage.Log("tcp心跳回复"); |
| | | return null; |
| | | } |
| | | |
| | | //2021-09-23 过滤不需要解密的主题 目前搜索网关主题不加密 |
| | | if (receiveObj.Topic != CommunicationTopic.SearchLoaclGatewayReply) |
| | | { |
| | | //判断当前网关是否开启了本地加密 |
| | | if (IsLocalEncryptAndGetAesKey) |
| | | { |
| | | MainPage.Log($"局域网信息 开始解密"); |
| | | if (originalReceiveBytes != null) |
| | | { |
| | | //拿到原始Bytes数据去解密 |
| | |
| | | byte[] bodyBytes = new byte[receiveObj.Length]; |
| | | Array.Copy(originalReceiveBytes, topicBytes.Length + 4, bodyBytes, 0, receiveObj.Length); |
| | | byte[] receiveBytes = Securitys.EncryptionService.AesDecryptPayload(bodyBytes, DB_ResidenceData.Instance.CurrentRegion.localSecret); |
| | | var revString = Encoding.UTF8.GetString(receiveBytes); |
| | | receiveObj.BodyDataString = revString; |
| | | MainPage.Log($"局域网信息: 解密后:" + receiveObj.BodyDataString); |
| | | //if (receiveObj.Topic.EndsWith("/thing/property/up")) |
| | | //{ |
| | | // MsgInfoList.Add(revString + "\r\n"); |
| | | //} |
| | | if (receiveBytes != null) |
| | | { |
| | | var revString = Encoding.UTF8.GetString(receiveBytes); |
| | | receiveObj.BodyDataString = revString; |
| | | MainPage.Log($"局域网信息: 解密后:" + receiveObj.BodyDataString); |
| | | //if (receiveObj.Topic.EndsWith("/thing/property/up")) |
| | | //{ |
| | | // MsgInfoList.Add(revString + "\r\n"); |
| | | //} |
| | | } |
| | | } |
| | | else |
| | | { |
| | |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | MainPage.Log($"局域网信息: 明文:" + receiveObj.BodyDataString); |
| | | } |
| | | } |
| | | |
| | | try |
| | | { |
| | | var idMsg = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(res[1]); |
| | | var hasProcess = hasItBeenProcessed(idMsg.id); |
| | | if (hasProcess) |
| | | { |
| | | return null; |
| | | } |
| | | MainPage.Log($"处理局域网数据id:{idMsg.id}"); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"解析局域网数据异常{ex.Message}"); |
| | | } |
| | | |
| | | if (receiveObj.Topic == CommunicationTopic.SearchLoaclGatewayReply || receiveObj.Topic == CommunicationTopic.GatewayBroadcast) |
| | | { |
| | |
| | | //2021-09-23 新增获取当前网关是否本地加密 |
| | | Ins.IsLocalEncrypt = device.isLocalEncrypt; |
| | | //MainPage.Log("网关本地加密状态:" + device.local_encrypt.ToString()); |
| | | |
| | | OpenTcpClent(); |
| | | |
| | | |
| | | } |
| | | } |
| | | else if (receiveObj.Topic == CommunicationTopic.ct.ReadStatus + "_reply" || |
| | | receiveObj.Topic == CommunicationTopic.ct.ControlFunctionTopic + "_reply" || |
| | | receiveObj.Topic == CommunicationTopic.ct.GatewayUpStatus || |
| | | receiveObj.Topic.Contains( CommunicationTopic.ct.GatewayUpSortTopic)) |
| | | receiveObj.Topic.Contains(CommunicationTopic.ct.GatewayUpSortTopic)) |
| | | { |
| | | //TODO 暂时不传正确的数据上去,如果后面要优化前面这些代码 |
| | | UpdataFunctionStatus(receiveObj.BodyDataString, null); |
| | | } |
| | | else if (receiveObj.Topic == CommunicationTopic.ct.ControlSeurity +"_reply" |
| | | else if (receiveObj.Topic == CommunicationTopic.ct.ControlSeurity + "_reply" |
| | | || receiveObj.Topic == CommunicationTopic.ct.ReadSecurityStatus + "_reply" |
| | | || receiveObj.Topic == CommunicationTopic.ct.SecurityStatusUp) |
| | | { |
| | |
| | | { |
| | | MainPage.Log($"局域网安防信息: {receiveObj.Topic} : 内容: {res[1]}"); |
| | | var tt = ""; |
| | | lock (tt) { |
| | | lock (tt) |
| | | { |
| | | var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<SecurityStatusObj>(receiveObj.BodyDataString); |
| | | if (temp != null) |
| | | { |
| | |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex){ |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"安防局域网异常:{ex.Message}"); |
| | | } |
| | | } |
| | | else if (receiveObj.Topic == $"/user/{GatewayId}/custom/gateway/login_reply") { |
| | | var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<JObject>(receiveObj.BodyDataString); |
| | | if (temp.GetValue("objects").ToString().Contains("success")) |
| | | { |
| | | LocalTcpClientLogin = true; |
| | | try |
| | | { |
| | | loginGatewayThread?.Abort(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"终止登录网关tcp异常:{ex.Message}"); |
| | | } |
| | | finally |
| | | { |
| | | loginGatewayThread = null; |
| | | } |
| | | MainPage.Log("局域网tcp连接登录网关成功"); |
| | | } |
| | | } |
| | | else |
| | |
| | | return receiveObj; |
| | | } |
| | | |
| | | |
| | | private List<string> processedDataList = new List<string>(); |
| | | /// <summary> |
| | | /// 是否已经处理过数据 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | private bool hasItBeenProcessed(string msgId) |
| | | { |
| | | if (processedDataList.Contains(msgId)) |
| | | { |
| | | return true; |
| | | } |
| | | else |
| | | { |
| | | if(processedDataList.Count> 50) |
| | | { |
| | | processedDataList.RemoveAt(0); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 更新设备状态 |
| | | /// A协议数据 |
| | |
| | | /// <param name="updateBytes"></param> |
| | | public void UpdataFunctionStatus(string revString, byte[] usefulBytes,bool isCloudData = false) |
| | | { |
| | | ////test 云端连接成功时,不适用本地数据更新 |
| | | //if (Ins.GatewayOnline_Cloud && !isCloudData) |
| | | //{ |
| | | // return; |
| | | //} |
| | | |
| | | var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<AlinkFunctionStatusObj>(revString); |
| | | if (temp != null) |
| | | { |
| | |
| | | |
| | | if (Ins.GatewayOnline_Local && isCloudData)//本地链接,除了涂鸦设备数据之外的云端数据不处理 |
| | | { |
| | | if (FunctionList.List.OtherBrandFunction.Count != 0) |
| | | if (FunctionList.List.OtherBrandFunction.Count == 0) |
| | | { |
| | | MainPage.Log($"A协议更新状态:本地链接,除了涂鸦设备数据之外的云端数据不处理..."); |
| | | return; |
| | | } |
| | | else |
| | | { |
| | | if (FunctionList.List.OtherBrandFunction.Find((obj) => obj.sid == updateTemp.sid) == null) |
| | | { |
| | | //MainPage.Log($"A协议更新状态:本地链接,除了涂鸦设备数据之外的云端数据不处理..."); |
| | | return; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | var localFunction = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid); |
| | | if (localFunction == null) |
| | |
| | | //更新界面状态 |
| | | switch (localFunction.spk) |
| | | { |
| | | case SPK.AcstParent: |
| | | AcstParentPage.UpdateAcstParentInfo(localFunction); |
| | | break; |
| | | case SPK.AcstSub: |
| | | AcstParentPage.UpdateAcstSubInfo(localFunction); |
| | | AcstSubPage.UpdateStatus(localFunction); |
| | | break; |
| | | case SPK.AirSwitch: |
| | | AirSwitchPage.UpdataState(localFunction); |
| | | if(localFunction.GetAttribute(FunctionAttributeKey.Power)!=null)//如果是带电量的空开也要更新能源界面 |
| | |
| | | case SPK.CurtainSwitch: |
| | | localFunction.lastState = localFunction.trait_on_off.curValue.ToString() == "on" ? Language.StringByID(StringId.Open) : Language.StringByID(StringId.Close); |
| | | CurtainModulePage.UpdataState(localFunction); |
| | | break; |
| | | case SPK.CurtainDream: |
| | | if(localFunction.GetAttrState(FunctionAttributeKey.Percent) == "0") |
| | | { |
| | | localFunction.SetAttrState(FunctionAttributeKey.OnOff, "off"); |
| | | } |
| | | localFunction.lastState = localFunction.trait_on_off.curValue.ToString() == "on" ? Language.StringByID(StringId.Open) : Language.StringByID(StringId.Close); |
| | | CurtainDreamPage.UpdataState(localFunction); |
| | | break; |
| | | case SPK.CurtainTrietex: |
| | | localFunction.lastState = Language.StringByID(StringId.Open) + localFunction.GetAttrState(FunctionAttributeKey.Percent) + "%"; |
| | |
| | | case SPK.SensorSmoke: |
| | | case SPK.SensorWater: |
| | | case SPK.ClothesHanger: |
| | | case SPK.SenesorMegahealth: |
| | | case SPK.SenesorMegahealth2: |
| | | case SPK.AirFreshStandard: |
| | | case SPK.HvacAirFresh: |
| | | case SPK.SensorGas: |
| | | case SPK.HvacCac: |
| | | case SPK.SensorHelp: |
| | | //设备状态推送 |
| | | //状态更新 |
| | | Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status); |
| | | break; |
| | | case SPK.SenesorMegahealth: |
| | | case SPK.SenesorMegahealth2: |
| | | |
| | | var tempStatus = localFunction.attributes.Find((sta) => sta.key == FunctionAttributeKey.TargetStatus); |
| | | if (tempStatus != null) |
| | | { |
| | | |
| | | switch (tempStatus.state) |
| | | {//0空,1走,2跑,3坐,4跌倒,5站 |
| | | case "0": |
| | | localFunction.lastState = Language.StringByID(StringId.SensorNormalState); |
| | | break; |
| | | case "1": |
| | | localFunction.lastState = Language.StringByID(StringId.SomeoneIn); |
| | | break; |
| | | case "2": |
| | | if (localFunction.extSet.labModel) |
| | | { |
| | | localFunction.lastState = Language.StringByID(StringId.SomeoneRunning); |
| | | } |
| | | break; |
| | | case "3": |
| | | if (localFunction.extSet.labModel) |
| | | { |
| | | localFunction.lastState = Language.StringByID(StringId.SomeoneSitting); |
| | | } |
| | | break; |
| | | case "4": |
| | | localFunction.lastState = Language.StringByID(StringId.SomeoneFell); |
| | | break; |
| | | case "5": |
| | | if (localFunction.extSet.labModel) |
| | | { |
| | | localFunction.lastState = Language.StringByID(StringId.SomeoneStanding); |
| | | } |
| | | break; |
| | | default: |
| | | |
| | | break; |
| | | } |
| | | } |
| | | Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status); |
| | | break; |
| | | case SPK.AvMusic: |
| | |
| | | //UI.Music.MusicMain.mMusicMain.RefreshView(updateTemp); |
| | | //Console.WriteLine("音乐播放器显示状态======="+ revString); |
| | | //wjc |
| | | break; |
| | | case SPK.Inverter: |
| | | var status = new Dictionary<string, object> { ["method"] = "status", ["data"] = temp.objects }; |
| | | Inverter.Ins.H5Page.CallJS($"nativeToJs(\'{Newtonsoft.Json.JsonConvert.SerializeObject(status)}\')"); |
| | | break; |
| | | } |
| | | |
| | |
| | | } |
| | | else |
| | | { |
| | | Dictionary<string, object> d = new Dictionary<string, object>(); |
| | | d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); |
| | | d.Add("deviceId", doorlock.deviceId); |
| | | var requestJson = HttpUtil.GetSignRequestJson(d); |
| | | HttpUtil.RequestHttpsPost("/home-wisdom/app/device/door/remoteOpen", requestJson); |
| | | ConfirmUnlocking(doorlock.deviceId, extStr); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 确认开锁 |
| | | /// </summary> |
| | | /// <param name="functionId"></param> |
| | | /// <param name="pwd"></param> |
| | | public void ConfirmUnlocking(string functionId,string pwd) |
| | | { |
| | | Loading loading = new Loading(); |
| | | MainPage.BaseView.AddChidren(loading); |
| | | loading.BackgroundColor = 0x88000000; |
| | | loading.LodingBackgroundColor = UI.CSS.CSS_Color.BackgroundColor; |
| | | loading.Start(Language.StringByID(StringId.PleaseWait)); |
| | | new System.Threading.Thread(() => |
| | | { |
| | | try |
| | | { |
| | | Dictionary<string, object> d = new Dictionary<string, object>(); |
| | | d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); |
| | | d.Add("deviceId", functionId); |
| | | d.Add("pwd", pwd); |
| | | var requestJson = HttpUtil.GetSignRequestJson(d); |
| | | var pack = HttpUtil.RequestHttpsPost("/home-wisdom/app/device/door/pwdConfirm", requestJson); |
| | | if (pack.Code == StateCode.SUCCESS) |
| | | { |
| | | Newtonsoft.Json.Linq.JObject pairs = Newtonsoft.Json.Linq.JObject.Parse(pack.Data.ToString()); |
| | | var scrip = pairs.GetValue("scrip"); |
| | | |
| | | d = new Dictionary<string, object>(); |
| | | d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id); |
| | | d.Add("deviceId", functionId); |
| | | d.Add("scrip", scrip); |
| | | requestJson = HttpUtil.GetSignRequestJson(d); |
| | | pack = HttpUtil.RequestHttpsPost("/home-wisdom/app/device/door/remoteOpen", requestJson); |
| | | //if(pack.Code == StateCode.SUCCESS) |
| | | //{ |
| | | // return true; |
| | | //} |
| | | //else |
| | | //{ |
| | | // return false; |
| | | //} |
| | | if (pack.Code != StateCode.SUCCESS) { |
| | | Application.RunOnMainThread(() => { |
| | | new PublicAssmebly().TipMsg(Language.StringByID(StringId.Tip), pack.message); |
| | | UserInfo.Current.doorPasswordString = "";// |
| | | UserInfo.Current.LastTimeOpenDoor = DateTime.MinValue; |
| | | }); |
| | | } |
| | | } |
| | | if (pack.Code != StateCode.SUCCESS) |
| | | { |
| | | Application.RunOnMainThread(() => { |
| | | if(string.IsNullOrEmpty(pack.message)) |
| | | { |
| | | new PublicAssmebly().TipMsg(Language.StringByID(StringId.Tip), |
| | | Language.StringByID(StringId.OperationFailed)); |
| | | } |
| | | else |
| | | { |
| | | new PublicAssmebly().TipMsg(Language.StringByID(StringId.Tip), pack.message); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | } |
| | | finally |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | loading.Hide(); |
| | | loading.RemoveFromParent(); |
| | | }); |
| | | } |
| | | }) |
| | | { IsBackground = true }.Start(); |
| | | } |
| | | //密码冻结 |
| | | //密码验证 |
| | | |