using System;
using Shared;
using HDL_ON;
using HDL_ON.UI.CSS;
using HDL_ON.DAL.Server;
using HDL_ON.UI;
using HDL_ON.Entity;
using System.Threading;
using HDL_ON.DriverLayer;
namespace HDL_ON
{
///
/// HDLCommon
/// 暂时没用
///
public class HDLCommon
{
///
/// 收到推送Action事件
///
public static Action GetPushMessageAction;
#region ■ 变量声明___________________________
///
/// 通用方法
///
private static HDLCommon m_Current = null;
///
/// 通用方法
///
public static HDLCommon Current
{
get
{
if (m_Current == null)
{
m_Current = new HDLCommon();
}
return m_Current;
}
}
#endregion
#region ■ Alter弹窗提示_______________________
///
/// 弹窗提示
///
///
public void ShowAlert(string mes)
{
new Alert("", mes, Language.StringByID(StringId.Close)).Show();
}
///
/// 弹窗提示
///
/// 弹窗提示信息
/// 确认按钮事件
public void ShowActionAlert(string mes, Action okAction)
{
Alert alert = new Alert("", mes, Language.StringByID(StringId.Cancel), Language.StringByID(StringId.Confirm));
alert.ResultEventHandler += (sender2, e2) =>
{
if (e2)
{
okAction?.Invoke();
}
};
alert.Show();
}
#endregion
#region ■ 通用Dialog_______________________
#endregion
#region ■ 检测更新_______________________
///
/// 检测更新线程
///
public void CheckIfNeedForceUpdate()
{
System.Threading.Tasks.Task.Run(() =>
{
try
{
var revertObj = new HttpServerRequest().CheckAppVersion();
if (revertObj.Code == StateCode.SUCCESS)
{
if (revertObj.Data != null)
{
var appVersionRes = Newtonsoft.Json.JsonConvert.DeserializeObject(revertObj.Data.ToString());
if (appVersionRes != null)
{
var mForceUpdateInfo = new UpdateDialogInfo()
{
UpdateType = appVersionRes.isEnforce ? 2 : 1,
NewVersion = appVersionRes.version,
NewVersionUrl = appVersionRes.packageUrl
};
#if __IOS__
mForceUpdateInfo.NewVersionUrl = appVersionRes.packageUrl;
#endif
//解析更新内容详情
//var reasonStrJson = GetReasonStrJson(appVersionRes.remark);
//if (reasonStrJson != null)
//{
// if (Language.CurrentLanguage == "Chinese")
// {
// mForceUpdateInfo.ReasonStr = reasonStrJson.Chinese;
// }
// else
// {
// mForceUpdateInfo.ReasonStr = reasonStrJson.English;
// }
//}
mForceUpdateInfo.ReasonStr = appVersionRes.remark;
if (appVersionRes.version != MainPage.VersionString)
{
Application.RunOnMainThread(() =>
{
ShowForceUpdateDialog(mForceUpdateInfo);
});
}
}
}
}
else
{
Utlis.WriteLine("请求失败");
}
}
catch (Exception ex)
{
//Shared.Utlis.WriteLine (ex.ToString ());
}
finally
{
}
});
}
///
///
///
///
///
public ReasonStrJson GetReasonStrJson(string jsonStr)
{
try
{
if (!string.IsNullOrEmpty(jsonStr))
{
return Newtonsoft.Json.JsonConvert.DeserializeObject(jsonStr);
}
return null;
}
catch
{
return null;
}
}
///
/// 提示强制更新Dialog
/// 点击确认跳转浏览器
///
public void ShowForceUpdateDialog(UpdateDialogInfo mUpdateDialogInfo)
{
// 1.1 没有更新 返回
if (mUpdateDialogInfo.UpdateType == 0) return;
// 1.2 有新版本但是忽略过 返回
if (mUpdateDialogInfo.UpdateType == 1 && (OnAppConfig.Instance.IgnoreUpdateVersion == mUpdateDialogInfo.NewVersion)) return;
// 2.1 有新版本没有忽略过 提示更新
if (mUpdateDialogInfo.UpdateType == 1)
{
Action okAction = () =>
{
if (string.IsNullOrEmpty(mUpdateDialogInfo.NewVersionUrl)) return;
HDLUtils.OpenUrl(mUpdateDialogInfo.NewVersionUrl);
};
Action cancelAction = () =>
{
OnAppConfig.Instance.IgnoreUpdateVersion = mUpdateDialogInfo.NewVersion;
OnAppConfig.Instance.SaveConfig();
};
//1提示更新
var dialog = new UpdateTipDialog();
var tipStr = Language.StringByID(StringId.VersionNumber) + mUpdateDialogInfo.NewVersion;
dialog.ShowUpdateDialog(Language.StringByID(StringId.DiscoverNewVersion), tipStr, mUpdateDialogInfo.ReasonStr, okAction, cancelAction);
}
else if (mUpdateDialogInfo.UpdateType == 2) //2.2 需要强制更新
{
//2强制更新
//"1.发现新版本App,当前版本已停用,马上更新!\n2.请下载和安装新版本!....."
Action okAction = () =>
{
if (string.IsNullOrEmpty(mUpdateDialogInfo.NewVersionUrl))
{
Utlis.ShowTip(Language.StringByID(StringId.DataExceptionPleaseTryAgain));
return;
};
HDLUtils.OpenUrl(mUpdateDialogInfo.NewVersionUrl);
};
//1提示更新
var dialog = new UpdateTipDialog();
var tipStr = Language.StringByID(StringId.VersionNumber) + mUpdateDialogInfo.NewVersion;
dialog.ShowForcedUpdateDialog(Language.StringByID(StringId.DiscoverNewVersion), tipStr, mUpdateDialogInfo.ReasonStr, okAction);
}
else //3. 只需提示
{
//3提示通知
Action okAction = () =>
{
};
var dialog = new UpdateTipDialog();
dialog.ShowTipDialog(Language.StringByID(StringId.Tip), mUpdateDialogInfo.ReasonStr, okAction);
}
}
#endregion
/////
///// 恢复住宅
///// 2020-12-03 待测试未检测
/////
//public void RestoreHomeBackup(string RegionID)
//{
// var isExist = FileUtils.ExistRegion(RegionID);
// if (isExist)
// {
// //存在则恢复
// string newRegionRootPath = FileUtils.CreateRegionBackup(RegionID);
// FileUtils.RestoreRegionFiles(newRegionRootPath);
// }
//}
#region ■ 推送处理_______________________
///
/// 推送消息处理
/// 注意:Android要在主线程(UI线程)执行
///
///
public void AdjustPushMessage(JPushMessageInfo jpushMessageInfo)
{
try
{
//Console.WriteLine($"接收到推送,,,,.{Newtonsoft.Json.JsonConvert.SerializeObject(jpushMessageInfo).ToString()}");
//Extras为空不处理
if (string.IsNullOrEmpty(jpushMessageInfo.Extras)) return;
if (jpushMessageInfo.Extras == (PushMessageType.OffLine.ToString()))
{
CheckLogout();
}
else
{
GetPushMessageAction?.Invoke();
//messageType为空不处理
if (string.IsNullOrEmpty(jpushMessageInfo.messageType)) return;
//报警推送才弹窗提示(messageType包含Alarm关键字的)
if (jpushMessageInfo.messageType == (PushMessageType.Alarm.ToString()))
{
//报警推送弹窗提示
ShowAlarmPushMessage(jpushMessageInfo, true);
}
else if (jpushMessageInfo.messageType == (PushMessageType.HDL_INTERPHONE.ToString()))
{
if (string.IsNullOrEmpty(jpushMessageInfo.expantContent)) return;
//字段兼容问题,只能直接取值了
var json = Newtonsoft.Json.Linq.JObject.Parse(jpushMessageInfo.expantContent);
//1.视对讲厂家类型
string interphoneTypeEnum = json["interphoneTypeEnum"].ToString();
if (string.IsNullOrEmpty(interphoneTypeEnum)) return;
ESVideoInfo eSVideoInfo = new ESVideoInfo();// GetESOnVideoJson(jpushMessageInfo.expantContent);
//2.根据可视对讲厂家类型,处理不同的数据
if (interphoneTypeEnum == InterphoneType.HDL.ToString())
{
try
{
var pushTime = json["pushTime"];
if (pushTime == null)
{
return;
}
if (!string.IsNullOrEmpty(pushTime.ToString()))
{
var pushDateTime = Utlis.UnixToDateTimeMS(Convert.ToInt64(pushTime));
if (pushDateTime.AddSeconds(30) < DateTime.Now)
{
return;
}
}
}
catch { }
//HDL Linphone 狄耐克
eSVideoInfo.HomeId = jpushMessageInfo.HomeId;
eSVideoInfo.callId = json["callId"].ToString();
eSVideoInfo.Lc_DeviceId = json["deviceId"].ToString();
eSVideoInfo.DeviceName = json["deviceName"].ToString();
eSVideoInfo.deviceSipAccount = json["deviceSipAccount"].ToString();
eSVideoInfo.spk = json["spk"].ToString();
//ShowAlert("狄耐克门口机呼叫");
//打开呼叫页面
HDLLinphone.Current.ShowESVideoIntercom(eSVideoInfo, InterphoneType.HDL.ToString());
return;
}
//3.打开呼叫页面
if (eSVideoInfo == null) return;
ESOnVideo.Current.ShowESvideoVideoIntercom(eSVideoInfo, interphoneTypeEnum);
}
else if (jpushMessageInfo.messageType == (PushMessageType.Prompt.ToString()))
{
ShowAlarmPushMessage(jpushMessageInfo, false);
}
}
}
catch (Exception EX)
{
Utlis.WriteLine("catch: " + EX.ToString());
}
}
///
/// 账号在别处登陆,被踢下线 跳转到登录页面
/// 要在主线程调用
/// 退出登录操作
///
public void CheckLogout()
{
#if __IOS__
try{
HDL_ON_iOS.AppDelegate.rootViewController.PopToRootViewController(false);
}catch(Exception ex){
MainPage.Log($"回到跟类失败:{ex.Message}");
}
#else
//Application.Activity.StartActivity()
#endif
//测试账号,不挤下线
switch (UserInfo.Current.AccountString)
{
case "464027401@qq.com":
case "13580507523":
case "15626203746":
case "18316672920":
return;
}
//未登录不用处理
if (!UserInfo.Current.IsLogin) return;
//账号在别处登陆,被踢下线 跳转到登录页面
new Alert(Language.StringByID(StringId.Tip), Language.StringByID(StringId.LoggedOnOtherDevices), Language.StringByID(StringId.Close)).Show();
try
{
Logout();
}catch (Exception ex)
{
MainPage.Log($"挤下线异常:{ex.Message}");
}
}
///
/// 退出登录操作
///
public void Logout()
{
//加载Loading效果
var waitPage = new Loading();
MainPage.BaseView.AddChidren(waitPage);
waitPage.Start(Language.StringByID(StringId.PleaseWait));
new Thread(() =>
{
try
{
//2.注销推送
new HttpServerRequest().SignOutPush();
//3.跳转登录页面
UserInfo.Current.LastTime = DateTime.MinValue;
UserInfo.Current.SaveUserInfo();
DB_ResidenceData.Instance.EixtAccount();
MainPage.Log("退出账号清空数据");
//4.注销HDLSIP账号登录 2021-08-20
HDLLinphone.Current.LogoutAllAccount();
MainPage.Log("注销HDLSIP账号登录");
#if __IOS__
//5.全视通登出
//Shared.IOS.HDLFVSDK.Video.Logout();
//6.清空Siri共享数据信息
new Other.SkipControl().SetData(false, "", "", "", "");
var sDM = new SiriKit.SceneDateManager();
Console.WriteLine($"IsLogin:{sDM.IsLgoin};accessToken:{sDM.AccessToken};refreshToken:{sDM.RefreshToken};RegionUrl:{sDM.RegionUrl};HomeId:{sDM.HomeId}");
#endif
}
catch (Exception ex)
{
MainPage.Log($"xxx:{ex.Message}");
}
finally
{
Application.RunOnMainThread(() =>
{
if (waitPage != null)
{
waitPage.Hide();
waitPage.RemoveFromParent();
waitPage = null;
}
MainPage.GoLoginPage(UserInfo.Current);
});
}
}).Start();
}
///
///
///
ConfirmDialog alarmPushConfirmDialog;
///
/// 报警推送弹窗提示,点击查看跳转信息中心
///
///
/// 是否是报警信息,(加载的弹窗颜色不一样)
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();
#if __IOS__
var sdm = new SiriKit.SceneDateManager();
sdm.RegionUrl = DB_ResidenceData.Instance.CurrentRegion.regionUrl;
sdm.HomeId = DB_ResidenceData.Instance.CurrentRegion.id;
#endif
}
}
//Dialog
alarmPushConfirmDialog = null;
Action backAction = () =>
{
};
while (MainPage.BasePageView.ChildrenCount > 1)
{
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 2;
}
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 ■ 常用方法_______________________
///
/// 设置下划线按钮状态
/// 统一封装设置方法
///
/// 下划线按钮
/// 状态
public void BottomLineShowType(Button button, BottomLineType bottomLineType)
{
switch (bottomLineType)
{
case BottomLineType.GotFocus:
button.BackgroundColor = CSS_Color.MainColor;
button.Height = Application.GetRealHeight(2);
break;
case BottomLineType.Error:
button.BackgroundColor = CSS_Color.AuxiliaryColor2;
button.Height = Application.GetRealHeight(2);
break;
case BottomLineType.Normal:
button.BackgroundColor = CSS_Color.DividingLineColor;
button.Height = Application.GetRealHeight(1);
break;
default:
button.BackgroundColor = CSS_Color.DividingLineColor;
button.Height = Application.GetRealHeight(1);
break;
}
}
///
///
///
///
///
public string GetUserName(string userName)
{
return string.IsNullOrEmpty(userName) ? Language.StringByID(StringId.UsersWhoNameIsEmpty) : userName;
}
///
/// 监听网络变化后处理事件
/// 刷新网络状态
///
/// 网络变化
/// 是否进入了后台
public void UpdateInternetStatus(int internetStatus, bool IsEnterBackground = false)
{
MainPage.Log($"网络状态变化,当前网络:{internetStatus} 是否后台:{IsEnterBackground.ToString()}");
MainPage.LinkHdlMqttCount = 0;
//网络状态变化 重置网关状态重新搜索
Control.Ins.GatewayOnline_Cloud = false;
Control.Ins.GatewayOnline_Local = false;
DAL.Mqtt.MqttClient.DisConnectRemote("UpdateInternetStatus", false);
if (internetStatus == 0)//没有网络连接 0
{
MainPage.InternetStatus = 0;
//DAL.Mqtt.MqttClient.DisConnectRemote();//.InitState();
}
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
}
}