| | |
| | | using System.Collections.Generic; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using Java.Util; |
| | | using Newtonsoft.Json; |
| | | using Newtonsoft.Json.Linq; |
| | | using Shared; |
| | |
| | | public string currentUserDisplayMethod = string.Empty;//当前用户显示方式 |
| | | //本地所有账户列表 |
| | | public List<Shared.Phone.UserCenter.MemberInfoRes> localAllAccountList = new List<Shared.Phone.UserCenter.MemberInfoRes> { }; |
| | | public static int RemoteUnlockCount = 5;//远程开锁次数限制 |
| | | public static string RemoteUnlockPassword = string.Empty;//远程开锁密码 |
| | | public static DateTime maxValue = DateTime.MaxValue; |
| | | public static DateTime minValue = DateTime.MinValue; |
| | | public string LocalTempPassword = string.Empty;//本地生成的临时密码 |
| | | public Dictionary<string, bool> IsFreezeAccount = new Dictionary<string, bool> { };//是否冻结子账户 |
| | | public Dictionary<string, bool> HasRemoteUnlockAccess = new Dictionary<string, bool> { };//是否给子账户拥有远程开锁的条件 |
| | | public Dictionary<string, bool> IsFailedToGetDoorLockInfo = new Dictionary<string, bool> { };//是否获取门锁数据失败 |
| | | public string RemoteUnlockPassword = string.Empty;//远程开锁密码 |
| | | |
| | | public static int RemoteUnlockCount = 5;//远程开锁次数限制 |
| | | public static DateTime maxValue = DateTime.MaxValue; |
| | | public static DateTime minValue = DateTime.MinValue; |
| | | |
| | | #region 临时密码信息 |
| | | /// <summary> |
| | | /// 用户管理发送数据回复 |
| | |
| | | public string PrimaryId = ""; |
| | | /// <summary> |
| | | /// 门锁Id -->键名 : DoorLockId (可选) |
| | | /// DelDoorLockDelType 门锁删除类型(0: 根椐门锁主键(云端主键)删除(单条删除)、1:根椐门锁Id批量删除(凡是与门锁Id相同都会删除)、2:根椐门锁Id及门锁本地用户Id批量删除(这个门锁Id这个门锁本地用户Id均会被删除)) -->键名 : DelDoorLockDelType 默认值: 0 |
| | | /// </summary> |
| | | public int DelDoorLockDelType; |
| | | } |
| | |
| | | ///不常用: |
| | | /// 1:RF(Zigbee无线);2:Manual(手动);255:Indeterminate(不确定) |
| | | /// </summary> |
| | | public int OperationEventSource; |
| | | public int OperationEventSoure; |
| | | /// <summary> |
| | | /// 事件码 |
| | | /// 常用: |
| | |
| | | ///远程开锁 |
| | | ///<para>inputPassword: 输入密码/para> |
| | | /// </summary> |
| | | public async System.Threading.Tasks.Task<TempPasswordResponseAllData> RemoteControlAsync(string inputPassword) |
| | | public async System.Threading.Tasks.Task<RemoteResponseAllData> RemoteControlAsync(string inputPassword) |
| | | { |
| | | TempPasswordResponseAllData result = null; |
| | | RemoteResponseAllData result = null; |
| | | if (Gateway == null) |
| | | { |
| | | result = new TempPasswordResponseAllData { errorMessageBase = "当前没有网关" }; |
| | | result = new RemoteResponseAllData { errorMessageBase = "当前没有网关" }; |
| | | return result; |
| | | } |
| | | return await System.Threading.Tasks.Task.Run(async () => |
| | |
| | | |
| | | if (temp == null) |
| | | { |
| | | result = new TempPasswordResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; |
| | | result = new RemoteResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; |
| | | } |
| | | |
| | | else |
| | | { |
| | | result = new TempPasswordResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; |
| | | result = new RemoteResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; |
| | | } |
| | | } |
| | | if (topic == gatewayID + "/" + "ZbDataPassthrough") |
| | | else if (topic == $"{gatewayID}/DoorLock/DoorLockOperatingEventNotificationCommand") |
| | | { |
| | | var OperatingEventNotificationDatad = Newtonsoft.Json.JsonConvert.DeserializeObject<ZigBee.Device.DoorLock.DoorLockOperatingEventNotificationCommand>(jobject["Data"].ToString()); |
| | | if (OperatingEventNotificationDatad != null) |
| | | { |
| | | if (OperatingEventNotificationDatad.OperationEventSoure == 1 && OperatingEventNotificationDatad.OperationEventCode == 5) |
| | | { |
| | | result = new RemoteResponseAllData { IsPawDispear = true }; |
| | | } |
| | | } |
| | | } |
| | | else if (topic == gatewayID + "/" + "ZbDataPassthrough") |
| | | { |
| | | var gatewayTemp = new ZbGateway() { DataID = jobject.Value<int>("Data_ID") }; |
| | | gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<ClientDataPassthroughResponseData>(jobject["Data"].ToString()); |
| | | |
| | | if (gatewayTemp.clientDataPassthroughResponseData == null) |
| | | { |
| | | result = new TempPasswordResponseAllData { errorMessageBase = "网关返回的数据为空" }; |
| | | result = new RemoteResponseAllData { errorMessageBase = "网关返回的数据为空" }; |
| | | } |
| | | else |
| | | { |
| | |
| | | var command = data[4].ToString() + data[5].ToString() + data[2].ToString() + data[3].ToString(); |
| | | if (command == "0002") |
| | | { |
| | | var tempD = new TempPasswordResponseData(); |
| | | var tempD = new RemoteResponseData(); |
| | | tempD.command = data[12].ToString() + data[13].ToString() + data[10].ToString() + data[11].ToString(); |
| | | tempD.status = Convert.ToInt32(data[14].ToString() + data[15].ToString(), 16); |
| | | result = new TempPasswordResponseAllData { responseData = tempD }; |
| | | result = new RemoteResponseAllData { responseData = tempD }; |
| | | DebugPrintLog($"UI收到通知后的主题_command:0462_{ topic}"); |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | }; |
| | | |
| | | Gateway.Actions += action; |
| | | DebugPrintLog("ClientDataPassthrough_Actions 启动" + System.DateTime.Now.ToString()); |
| | | |
| | |
| | | catch { } |
| | | |
| | | var dateTime = DateTime.Now; |
| | | while ((DateTime.Now - dateTime).TotalMilliseconds < 9000)// WaitReceiveDataTime) |
| | | while ((DateTime.Now - dateTime).TotalMilliseconds < 5000)// WaitReceiveDataTime) |
| | | { |
| | | await System.Threading.Tasks.Task.Delay(10); |
| | | if (result != null && result.responseData != null && result.responseData.command == "0462") |
| | | if (result == null) |
| | | { |
| | | continue; |
| | | } |
| | | if (result.responseData != null && result.responseData.command == "0462") |
| | | { |
| | | break; |
| | | } |
| | | if (result.IsPawDispear == true) |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) |
| | | { |
| | | result = new TempPasswordResponseAllData |
| | | { errorMessageBase = " 回复超时,请重新操作" }; |
| | | result = new RemoteResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; |
| | | } |
| | | Gateway.Actions -= action; |
| | | DebugPrintLog("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString()); |
| | |
| | | catch { }; |
| | | |
| | | return data; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 远程回复数据 |
| | | /// </summary> |
| | | public RemoteResponseAllData remoteResponseAllData; |
| | | [System.Serializable] |
| | | public class RemoteResponseAllData |
| | | { |
| | | /// <summary> |
| | | /// 错误信息 |
| | | /// </summary> |
| | | public string errorMessageBase; |
| | | /// <summary> |
| | | /// 网关信息错误反馈 |
| | | /// <para>当网关接收到客户端信息后,出现以下异常情况将反馈错误。</para> |
| | | /// </summary> |
| | | public ErrorResponData errorResponData; |
| | | /// <summary> |
| | | /// 临时密码回复数据 |
| | | /// </summary> |
| | | public RemoteResponseData responseData; |
| | | /// <summary> |
| | | /// 是否密码被删除 |
| | | /// </summary> |
| | | public bool IsPawDispear = false; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 用户管理数据回复 |
| | | /// </summary> |
| | | [System.Serializable] |
| | | public class RemoteResponseData |
| | | { |
| | | /// <summary> |
| | | ///响应操作码(0-ffff) |
| | | /// </summary> |
| | | public string command = ""; |
| | | /// <summary> |
| | | /// 状态值 |
| | | /// <para>默认响应结果: |
| | | ///<para>0 成功</para> |
| | | ///<para>1 失败</para> |
| | | /// </summary> |
| | | public int status = -1; |
| | | } |
| | | #endregion |
| | | |
| | |
| | | /// <summary> |
| | | /// 临时密码回复数据 |
| | | /// </summary> |
| | | public TempPasswordResponseAllData keyColorDataResponseAllData; |
| | | public TempPasswordResponseAllData tempPasswordResponseAllData; |
| | | [System.Serializable] |
| | | public class TempPasswordResponseAllData |
| | | { |
| | | /// <summary> |
| | | /// 错误信息 |
| | | /// </summary> |
| | | /// </summary> |
| | | public string errorMessageBase; |
| | | /// <summary> |
| | | /// 网关信息错误反馈 |