| | |
| | | { |
| | | return await System.Threading.Tasks.Task.Run(async () => |
| | | { |
| | | var result = new AddedDeviceBindResponseAllData(); |
| | | AddedDeviceBindResponseAllData result = null; |
| | | var mainGateway = ZbGateway.MainGateWay; |
| | | if (mainGateway == null) |
| | | { |
| | | result.errorMessageBase = "当前没有主网关"; |
| | | result = new AddedDeviceBindResponseAllData { errorMessageBase = "当前没有主网关" }; |
| | | return result; |
| | | } |
| | | Action<string, string> action = (topic, message) => |
| | |
| | | else if (topic == gatewayID + "/" + "Bind/SetBind_Respon") |
| | | { |
| | | var gatewayTemp = new ZbGateway() { DeviceID = jobject.Value<int>("Device_ID"), DeviceAddr = jobject.Value<string>("DeviceAddr"), DeviceEpoint = jobject.Value<int>("Epoint"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = ZbGateway.MainGateWay.getGatewayBaseInfo.gwID }; |
| | | var tempBindList = Newtonsoft.Json.Linq.JArray.Parse(jobject["Data"]["BindList"].ToString()); |
| | | if (tempBindList == null) |
| | | var tempResult = Newtonsoft.Json.JsonConvert.DeserializeObject<AddedDeviceBindResponseData>(jobject["Data"].ToString()); |
| | | if (tempResult == null) |
| | | { |
| | | result.errorMessageBase = "网关返回的数据为空"; |
| | | result = new AddedDeviceBindResponseAllData { errorMessageBase = "网关返回的数据为空" }; |
| | | } |
| | | else |
| | | { |
| | | var dataBindRes = new AddedDeviceBindResponseData(); |
| | | for (int m = 0; tempBindList != null && m < tempBindList.Count; m++) |
| | | { |
| | | var tempBind = tempBindList[m]; |
| | | dataBindRes.BindList.Add(Newtonsoft.Json.JsonConvert.DeserializeObject<AddBindListResponseObj>(tempBind.ToString())); |
| | | } |
| | | if (dataBindRes != null) |
| | | { |
| | | result.addedDeviceBindResponseData = dataBindRes; |
| | | DebugPrintLog($"UI收到通知后的主题_{topic}"); |
| | | } |
| | | result = new AddedDeviceBindResponseAllData { addedDeviceBindResponseData = tempResult }; |
| | | DebugPrintLog($"UI收到通知后的主题_{topic}"); |
| | | } |
| | | } |
| | | else if (topic == gatewayID + "/" + "Bind/BindResult") |
| | | { |
| | | var gatewayTemp = new ZbGateway() { DeviceID = jobject.Value<int>("Device_ID"), DeviceAddr = jobject.Value<string>("DeviceAddr"), DeviceEpoint = jobject.Value<int>("Epoint"), DataID = jobject.Value<int>("Data_ID"), CurrentGateWayId = ZbGateway.MainGateWay.getGatewayBaseInfo.gwID }; |
| | | var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<AddBindResultResponseData>(jobject["Data"].ToString()); |
| | | |
| | | if (tempData != null) |
| | | { |
| | | result.addBindResultResponseData = tempData; |
| | | } |
| | | DebugPrintLog($"UI收到通知后的主题_{topic}"); |
| | | } |
| | | }; |
| | | mainGateway.Actions += action; |
| | |
| | | { "BindList", bindList } |
| | | }; |
| | | jObject.Add("Data", data); |
| | | //ZbGateway.MainGateWay.CurrentGateWayId = ZbGateway.MainGateWay.getGatewayBaseInfo?.gwID; |
| | | mainGateway.Send("Bind/SetBind", jObject.ToString()); |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | var dateTime = DateTime.Now; |
| | | while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) |
| | | while ((DateTime.Now - dateTime).TotalMilliseconds < 20 * 1000) |
| | | { |
| | | await System.Threading.Tasks.Task.Delay(100); |
| | | if (result == null || result.addedDeviceBindResponseData == null) |
| | | { |
| | | continue; |
| | | } |
| | | if (0 < result.addedDeviceBindResponseData.BindList.FindAll((obj) => obj.BindType == 0 && obj.Result == 1).Count) |
| | | { |
| | | if (result.addBindResultResponseData != null) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | else if (0 < result.addedDeviceBindResponseData.BindList.FindAll((obj) => obj.BindType == 0 && obj.Result == 2).Count) |
| | | { |
| | | if (result.addBindResultResponseData != null) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | else if (0 < result.addedDeviceBindResponseData.BindList.FindAll((obj) => obj.BindType == 0 && obj.Result == 3).Count) |
| | | { |
| | | if (result.addBindResultResponseData != null) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | else |
| | | await System.Threading.Tasks.Task.Delay(10); |
| | | if (result != null) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) |
| | | if ((DateTime.Now - dateTime).TotalMilliseconds > 20 * 1000) |
| | | { |
| | | result.errorMessageBase = " 回复超时,请重新操作"; |
| | | result = new AddedDeviceBindResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; |
| | | } |
| | | mainGateway.Actions -= action; |
| | | System.Console.WriteLine($"Bind/SetBind_Actions 退出 { System.DateTime.Now.ToLongTimeString() + " " + System.DateTime.Now.Millisecond}"); |
| | |
| | | /// <summary> |
| | | ///绑定列表 ,当Status=0时存在 |
| | | /// </summary> |
| | | public List<AddBindListResponseObj> BindList = new List<AddBindListResponseObj>(); |
| | | public List<BindListResponseObj> BindList = new List<BindListResponseObj>(); |
| | | /// <summary> |
| | | /// 0:绑定所有目标成功 |
| | | ///<para>1:绑定目标失败,绑定设备目标有漏掉</para> |
| | | /// </summary> |
| | | public int Result = -1; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// 0:移除成功(该状态只适用用于跨网关绑定、绑定场景、失效设备(设备已经从网关的设备列表中删除)。同网关设备间的解除绑定需要节点设备的确认成功信息,不会直接反馈成功。) |
| | | ///<para>1:失败,设备不在绑定列表中</para> |
| | | ///<para>3:失败,在等待节点设备确认是否解除绑定成功(当网关还在等待某节点设备确认是否解除绑定成功的反馈信息时,客户端再次发送解除绑定该节点设备的指令,将反馈该状态。)</para> |
| | | ///<para>4:未知,由节点设备反馈发送“Bind/RemoveBindResult”主题消息确定是否成功。</para> |
| | | ///<para>2:未知,由节点设备反馈发送“Bind/RemoveBindResult”主题消息确定是否成功。</para> |
| | | /// </summary> |
| | | public int Result; |
| | | |
| | |
| | | catch { } |
| | | |
| | | var dateTime = DateTime.Now; |
| | | while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) |
| | | while ((DateTime.Now - dateTime).TotalMilliseconds < 25 * 1000) |
| | | { |
| | | await System.Threading.Tasks.Task.Delay(10); |
| | | if (d != null) |
| | |
| | | break; |
| | | } |
| | | } |
| | | //一键清除目标,会因为目标数量多而加长时间,目前暂定10秒 |
| | | if ((DateTime.Now - dateTime).TotalMilliseconds > 10 * 1000) |
| | | //一键清除目标,会因为目标数量多而加长时间,目前暂定20秒 |
| | | if ((DateTime.Now - dateTime).TotalMilliseconds > 25 * 1000) |
| | | { |
| | | d = new ClearBindInfoResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; |
| | | } |