| | |
| | | using HDL_ON.UI; |
| | | using HDL_ON.Entity; |
| | | using System.Threading; |
| | | using HDL_ON.DriverLayer; |
| | | |
| | | namespace HDL_ON |
| | | { |
| | |
| | | #region ■ 推送处理_______________________ |
| | | /// <summary> |
| | | /// 推送消息处理 |
| | | /// 注意:Android要在主线程(UI线程)执行 |
| | | /// </summary> |
| | | /// <param name="jpushMessageInfo"></param> |
| | | public void AdjustPushMessage(JPushMessageInfo jpushMessageInfo) |
| | | { |
| | | try |
| | | { |
| | | if (jpushMessageInfo.Extras != null && jpushMessageInfo.Extras.Contains("OffLine")) |
| | | //Extras为空不处理 |
| | | if (string.IsNullOrEmpty(jpushMessageInfo.Extras)) return; |
| | | |
| | | if (jpushMessageInfo.Extras.Contains(PushMessageType.OffLine.ToString())) |
| | | { |
| | | Shared.Application.RunOnMainThread(() => |
| | | { |
| | | //账号在别处登陆,被踢下线 跳转到登录页面 |
| | | new Alert(Language.StringByID(StringId.Tip), Language.StringByID(StringId.LoggedOnOtherDevices), Language.StringByID(StringId.Close)).Show(); |
| | | //退出登录操作 |
| | | CheckLogout(); |
| | | |
| | | }); |
| | | return; |
| | | CheckLogout(); |
| | | } |
| | | else |
| | | { |
| | | Shared.Application.RunOnMainThread(() => |
| | | GetPushMessageAction?.Invoke(); |
| | | |
| | | //messageType为空不处理 |
| | | if (string.IsNullOrEmpty(jpushMessageInfo.messageType)) return; |
| | | |
| | | //报警推送才弹窗提示(messageType包含Alarm关键字的) |
| | | if (jpushMessageInfo.messageType.Contains(PushMessageType.Alarm.ToString())) |
| | | { |
| | | new Alert(jpushMessageInfo.Title, jpushMessageInfo.Content, Language.StringByID(StringId.Close)).Show(); |
| | | GetPushMessageAction?.Invoke(); |
| | | }); |
| | | return; |
| | | //报警推送弹窗提示 |
| | | ShowAlarmPushMessage(jpushMessageInfo,true); |
| | | } |
| | | else if (jpushMessageInfo.messageType.Contains(PushMessageType.FLCall.ToString())) |
| | | { |
| | | if (string.IsNullOrEmpty(jpushMessageInfo.expantContent)) return; |
| | | |
| | | ESVideoInfo eSVideoInfo = GetESOnVideoJson(jpushMessageInfo.expantContent); |
| | | |
| | | if (eSVideoInfo == null) return; |
| | | |
| | | if (string.IsNullOrEmpty(eSVideoInfo.uuid)) return; |
| | | |
| | | if (eSVideoInfo.uuid.Contains(",")) |
| | | { |
| | | var uuid = eSVideoInfo.uuid.Split(','); |
| | | eSVideoInfo.ESVideoUUID = uuid[0]; |
| | | } |
| | | else |
| | | { |
| | | eSVideoInfo.ESVideoUUID = eSVideoInfo.uuid; |
| | | } |
| | | |
| | | ESOnVideo.Current.ShowESvideoVideoIntercom(eSVideoInfo, "FLVI"); |
| | | |
| | | } |
| | | else if (jpushMessageInfo.messageType.Contains(PushMessageType.HDL_INTERPHONE.ToString())) |
| | | { |
| | | if (string.IsNullOrEmpty(jpushMessageInfo.expantContent)) return; |
| | | |
| | | //字段兼容问题,只能直接取值了 |
| | | var json= Newtonsoft.Json.Linq.JObject.Parse(jpushMessageInfo.expantContent); |
| | | ESVideoInfo eSVideoInfo = new ESVideoInfo();// GetESOnVideoJson(jpushMessageInfo.expantContent); |
| | | eSVideoInfo.callId = json["callId"].ToString(); |
| | | //eSVideoInfo.Lc_AccessToken = UI.UI2.PersonalCenter.PirDevice.PirSend.LcSubAccessToken;//json["subAccountToken"].ToString();// |
| | | eSVideoInfo.Lc_AccessToken = json["subAccountToken"].ToString();//2021-05-13 目前云端还没拿到Lc_AccessToken,目前没办法正常使用 |
| | | eSVideoInfo.Lc_DeviceId = json["deviceId"].ToString(); |
| | | eSVideoInfo.Lc_Location = OnAppConfig.Instance.RequestHttpsHost.Contains("China") ? 0 : 1; |
| | | eSVideoInfo.Lc_PlayToken = json["token"].ToString(); |
| | | eSVideoInfo.Lc_Psk = json["cname"].ToString(); |
| | | |
| | | if (eSVideoInfo == null) return; |
| | | |
| | | ESOnVideo.Current.ShowESvideoVideoIntercom(eSVideoInfo, "IMOUVISIAL"); |
| | | |
| | | } |
| | | else if(jpushMessageInfo.messageType.Contains(PushMessageType.Prompt.ToString())) |
| | | { |
| | | ShowAlarmPushMessage(jpushMessageInfo, false); |
| | | } |
| | | } |
| | | } |
| | | catch |
| | | catch(Exception EX) |
| | | { |
| | | |
| | | Utlis.WriteLine("catch: " + EX.ToString()); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 解析丰林可视对讲推送数据 |
| | | /// </summary> |
| | | /// <param name="jsonStr"></param> |
| | | /// <returns></returns> |
| | | ESVideoInfo GetESOnVideoJson(string jsonStr) |
| | | { |
| | | try |
| | | { |
| | | if (!string.IsNullOrEmpty(jsonStr)) |
| | | { |
| | | return Newtonsoft.Json.JsonConvert.DeserializeObject<ESVideoInfo>(jsonStr); |
| | | } |
| | | return null; |
| | | } |
| | | catch |
| | | { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 账号在别处登陆,被踢下线 跳转到登录页面 |
| | | /// 要在主线程调用 |
| | | /// 退出登录操作 |
| | | /// </summary> |
| | | public void CheckLogout() |
| | | { |
| | | //测试账号,不挤下线 |
| | | switch (UserInfo.Current.AccountString) |
| | | { |
| | | case "13415629083": |
| | | case "18316120654": |
| | | case "15622703419": |
| | | case "18824864143": |
| | | case "464027401@qq.com": |
| | | case "2791308028@qq.com": |
| | | case "13697499568": |
| | | case "18666455392": |
| | | case "13375012446": |
| | | case "13602944661": |
| | | case "18778381374": |
| | | case "18316672920": |
| | | case "15626203746": |
| | | case "551775569@qq.com": |
| | | return; |
| | | } |
| | | |
| | | //未登录不用处理 |
| | | if (!UserInfo.Current.IsLogin) return; |
| | | |
| | | #if DEBUG |
| | | return; |
| | | #endif |
| | | //账号在别处登陆,被踢下线 跳转到登录页面 |
| | | new Alert(Language.StringByID(StringId.Tip), Language.StringByID(StringId.LoggedOnOtherDevices), Language.StringByID(StringId.Close)).Show(); |
| | | |
| | | Logout(); |
| | | } |
| | |
| | | { |
| | | //加载Loading效果 |
| | | var waitPage = new Loading(); |
| | | MainPage.BasePageView.AddChidren(waitPage); |
| | | MainPage.BaseView.AddChidren(waitPage); |
| | | waitPage.Start(Language.StringByID(StringId.PleaseWait)); |
| | | |
| | | new Thread(() => |
| | |
| | | } |
| | | }).Start(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | ConfirmDialog alarmPushConfirmDialog; |
| | | /// <summary> |
| | | /// 报警推送弹窗提示,点击查看跳转信息中心 |
| | | /// </summary> |
| | | /// <param name="jpushMessageInfo"></param> |
| | | /// <param name="isAlarm">是否是报警信息,(加载的弹窗颜色不一样)</param> |
| | | public void ShowAlarmPushMessage(JPushMessageInfo jpushMessageInfo,bool isAlarm) |
| | | { |
| | | //没登录不处理 |
| | | if (UserInfo.Current == null || !UserInfo.Current.IsLogin || MainPage.BasePageView == null) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | //跳转信息中心页面 |
| | | Action goAction = () => |
| | | { |
| | | //查看对应住宅的信息,要切换到对应住宅 |
| | | if (jpushMessageInfo.HomeId != DB_ResidenceData.Instance.CurrentRegion.id) |
| | | { |
| | | var homeTemp = UserInfo.Current.regionList.Find((obj) => jpushMessageInfo.HomeId == obj.id); |
| | | if (homeTemp != null) |
| | | { |
| | | DB_ResidenceData.Instance.CurrentRegion = homeTemp; |
| | | DB_ResidenceData.Instance.SaveResidenceData(); |
| | | DB_ResidenceData.Instance.EixtAccount(); |
| | | //刷新住宅数据 |
| | | Common.ApiUtlis.Ins.DownloadData(); |
| | | while (MainPage.BasePageView.ChildrenCount > 1) |
| | | { |
| | | MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 2; |
| | | } |
| | | MainPage.CurPageIndex = 9999; |
| | | MainPage.UserBasePage.ChooseCollection(); |
| | | } |
| | | } |
| | | //Dialog |
| | | alarmPushConfirmDialog = null; |
| | | Action backAction = () => |
| | | { |
| | | |
| | | }; |
| | | var skipPage = new MessageCenterPage(); |
| | | MainPage.BasePageView.AddChidren(skipPage); |
| | | skipPage.LoadPage(backAction); |
| | | MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; |
| | | }; |
| | | |
| | | //取消事件 |
| | | Action cancelAction = () => |
| | | { |
| | | alarmPushConfirmDialog = null; |
| | | }; |
| | | |
| | | //防止多次弹窗处理 |
| | | if (alarmPushConfirmDialog == null) |
| | | { |
| | | alarmPushConfirmDialog = new ConfirmDialog(isAlarm); |
| | | alarmPushConfirmDialog.ShowDialog(Language.StringByID(StringId.Tip), jpushMessageInfo.Content, goAction, cancelAction, StringId.Cancel, StringId.LookOver); |
| | | } |
| | | else |
| | | { |
| | | alarmPushConfirmDialog.RefreshDialog(Language.StringByID(StringId.Tip), jpushMessageInfo.Content, goAction, cancelAction, StringId.Cancel, StringId.LookOver); |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 常用方法_______________________ |
| | |
| | | break; |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | /// <param name="userName"></param> |
| | | /// <returns></returns> |
| | | public string GetUserName(string userName) |
| | | { |
| | | return string.IsNullOrEmpty(userName) ? Language.StringByID(StringId.UsersWhoNameIsEmpty) : userName; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 监听网络变化后处理事件 |
| | | /// 刷新网络状态 |
| | | /// </summary> |
| | | /// <param name="internetStatus">网络变化</param> |
| | | /// <param name="IsEnterBackground">是否进入了后台</param> |
| | | public void UpdateInternetStatus(int internetStatus, bool IsEnterBackground = false) |
| | | { |
| | | MainPage.Log($"网络状态变化,当前网络:{internetStatus} 是否后台:{IsEnterBackground.ToString()}"); |
| | | //网络状态变化 重置网关状态重新搜索 |
| | | Control.Ins.GatewayOnline_Cloud = false; |
| | | Control.Ins.GatewayOnline_Local = false; |
| | | |
| | | DAL.Mqtt.MqttClient.DisConnectRemote("UpdateInternetStatus", false); |
| | | |
| | | if (internetStatus == 0)//没有网络连接 0 |
| | | { |
| | | MainPage.InternetStatus = 0; |
| | | } |
| | | else if (internetStatus == 1)//3,4G的网络连接 1 |
| | | { |
| | | MainPage.InternetStatus = 1; |
| | | Control.Ins.SearchLoaclGateway(); |
| | | |
| | | } |
| | | else if (internetStatus == 2)//WiFi网络 |
| | | { |
| | | MainPage.InternetStatus = 2; |
| | | Control.Ins.SearchLoaclGateway(); |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region 跳转打开萤石云方法 |
| | | |
| | | /// <summary> |
| | | /// 获取子账号token并跳转设备列表页面 |
| | | /// </summary> |
| | | /// <param name="bodyView"></param> |
| | | public void Go2EZvizMonitor(FrameLayout bodyView) |
| | | { |
| | | var waitPage = new Loading(); |
| | | bodyView.AddChidren(waitPage); |
| | | waitPage.Start(Language.StringByID(StringId.PleaseWait)); |
| | | |
| | | new Thread(() => |
| | | { |
| | | try |
| | | { |
| | | //先获取萤石云子账号token |
| | | var result = new HttpServerRequest().EZGetChildToken(); |
| | | if (result.Code == StateCode.SUCCESS) |
| | | { |
| | | var ezChildAccessToken = Newtonsoft.Json.JsonConvert.DeserializeObject<EZChildAccessToken>(result.Data.ToString()); |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | if (!string.IsNullOrEmpty(ezChildAccessToken.accessToken)) |
| | | { |
| | | #if __IOS__ |
| | | //iOS |
| | | //初始化萤石云SDK,中文国内key、英文海外key 开发者账号使用应用包名申请的APPKEY,不同包名应用需配置不同的APPKEY |
| | | EZSDK.IOS.EZSDK.InitLibWithAppKey("1aa98a90489b4838b966b57018b4b04b", "1aa98a90489b4838b966b57018b4b04b"); |
| | | //1.设置所需河东的AccessToken和RefreshToken、域名地址 |
| | | EZSDK.IOS.EZSDK.SetHDlAccessToken(UserInfo.Current.LoginTokenString, UserInfo.Current.RefreshToken); |
| | | EZSDK.IOS.EZSDK.SetRequestHttpsHost(OnAppConfig.Instance.RequestHttpsHost); |
| | | //2.设置萤石子账号的AccessToken到SDK |
| | | EZSDK.IOS.EZSDK.SetEZAccessToken(ezChildAccessToken.accessToken); |
| | | //3.打开摄像头设备列表页面 |
| | | EZSDK.IOS.EZSDK.Go2EZvizMonitor(); |
| | | |
| | | #else |
| | | //Android |
| | | //1.设置所需河东的token、域名地址 |
| | | //2.设置萤石子账号的token |
| | | //3.打开摄像头设备列表页面 |
| | | ((BaseActivity)Shared.Application.Activity).SetCamera(b => |
| | | { |
| | | if (b) |
| | | { |
| | | Android.Content.Intent intent = new Android.Content.Intent(); |
| | | var bundle = new Android.OS.Bundle(); |
| | | //传递name参数为tinyphp |
| | | bundle.PutString("Token", ezChildAccessToken.accessToken); |
| | | bundle.PutString("HdlToken", UserInfo.Current.LoginTokenString); |
| | | bundle.PutString("Url", OnAppConfig.Instance.RequestHttpsHost); |
| | | intent.PutExtras(bundle); |
| | | intent.SetComponent(new Android.Content.ComponentName(Shared.Application.Activity, "com.videogo.MainActivity")); |
| | | Shared.Application.Activity.StartActivity(intent); |
| | | } |
| | | }); |
| | | #endif |
| | | |
| | | |
| | | } |
| | | |
| | | }); |
| | | } |
| | | else |
| | | { |
| | | IMessageCommon.Current.ShowErrorInfoAlter(result.Code); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | } |
| | | finally |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | if (waitPage != null) |
| | | { |
| | | waitPage.RemoveFromParent(); |
| | | waitPage = null; |
| | | } |
| | | }); |
| | | } |
| | | }) |
| | | { IsBackground = true }.Start(); |
| | | } |
| | | |
| | | #endregion |
| | | } |
| | | } |