using System;
|
using System.Collections.Generic;
|
using HDL_ON;
|
using HDL_ON.DAL;
|
using HDL_ON.DAL.Server;
|
using HDL_ON.Entity;
|
using HDL_ON.UI.UI2.FuntionControlView.Video;
|
using HDL_ON.UI.UI2.Intelligence.Automation;
|
using Newtonsoft.Json;
|
using Shared;
|
|
namespace HDL_ON.Common
|
{
|
public class ApiUtlis
|
{
|
public ApiUtlis()
|
{
|
}
|
|
static ApiUtlis apiUtlis;
|
public static ApiUtlis Ins
|
{
|
get
|
{
|
if (apiUtlis == null)
|
{
|
apiUtlis = new ApiUtlis();
|
}
|
return apiUtlis;
|
}
|
}
|
|
HttpServerRequest httpRequest;
|
|
public HttpServerRequest HttpRequest
|
{
|
get
|
{
|
if (httpRequest == null)
|
{
|
httpRequest = new HttpServerRequest();
|
}
|
return httpRequest;
|
}
|
}
|
/// <summary>
|
/// 读取设备功能数据完成
|
/// </summary>
|
bool complateDevice = false;
|
/// <summary>
|
/// 读取场景数据完成
|
/// </summary>
|
bool complateScene = false;
|
//线程结束时间
|
DateTime endTime1;
|
|
/// <summary>
|
/// 校验网关是否在线
|
/// </summary>
|
public bool GatewayOnlineVerification()
|
{
|
bool result = DB_ResidenceData.Instance.HomeGateway.gatewayStatus;
|
DriverLayer.Control.Ins.GatewayOnline_Cloud = result;
|
if (!result)
|
{
|
|
}
|
|
return result;
|
}
|
/// <summary>
|
/// 下载数据完成标记
|
/// </summary>
|
public bool DownloadDataComplete = false;
|
/// <summary>
|
/// 下载数据
|
/// </summary>
|
public void DownloadData()
|
{
|
if (MainPage.InternetStatus == 0 || MainPage.NoLoginMode)
|
{
|
DownloadDataComplete = true;
|
return;
|
}
|
endTime1 = DateTime.Now.AddSeconds(25);
|
complateDevice = complateScene = false;
|
|
MainPage.Log($"开始同步云端数据");
|
|
DownloadDataComplete = false;
|
|
var waitPage = new Loading();
|
MainPage.BaseView.AddChidren(waitPage);
|
waitPage.Start(Language.StringByID(StringId.PleaseWait));
|
|
string code = StateCode.SUCCESS;
|
|
Inverter.Ins.H5Page = null;//重置光伏页面
|
|
var downloadDataThread = new System.Threading.Thread(() =>
|
{
|
MainPage.Log($"进入读取云端数据线程");
|
//===================刷新Token=======================
|
code = Ins.HttpRequest.RefreshToken();
|
if (code != StateCode.SUCCESS)
|
{
|
MainPage.Log($"刷新token失败");
|
return;
|
}
|
MainPage.Log($"刷新token成功");
|
//===================刷新住宅信息=======================
|
code = Ins.HttpRequest.GetHomePager();
|
if (code != StateCode.SUCCESS)
|
{
|
MainPage.Log($"刷新住宅信息失败");
|
return;
|
}
|
MainPage.Log($"刷新住宅信息成功");
|
//===================刷新个人信息=======================
|
code = Ins.HttpRequest.GetUserInfo();
|
if (code != StateCode.SUCCESS)
|
{
|
MainPage.Log($"刷新个人信息失败");
|
return;
|
}
|
MainPage.Log($"刷新个人信息成功");
|
|
//int count = 0;
|
//while (count < 10)
|
//{
|
// if (DB_ResidenceData.Instance.CheckWhetherGatewayIdIsNull())
|
// {
|
// System.Threading.Thread.Sleep(200);
|
// }
|
// else
|
// {
|
// break;
|
// }
|
// count++;
|
//}
|
//if (DB_ResidenceData.Instance.CheckWhetherGatewayIdIsNull())
|
//{
|
// return;
|
//}
|
|
//return;
|
|
try
|
{
|
//===================房间=======================
|
var roomResult = Ins.HttpRequest.GetRoomList();
|
if (roomResult.Code == StateCode.SUCCESS)
|
{
|
MainPage.Log($"读取房间信息成功");
|
var revData = Newtonsoft.Json.JsonConvert.DeserializeObject<SpatialApiPack>(roomResult.Data.ToString());
|
if (revData == null)
|
{
|
revData = new SpatialApiPack();
|
}
|
{
|
SpatialInfo.CurrentSpatial.UpdateSpatialList(revData.list);
|
}
|
}
|
else
|
{
|
MainPage.Log($"读取房间数据失败:Code:{roomResult.Code}; msg:{roomResult.message}");
|
}
|
|
//===================设备=======================
|
new System.Threading.Thread(() =>
|
{
|
try
|
{
|
complateDevice = false;
|
var deviceResult = Ins.HttpRequest.GetDeviceList("30", "1");
|
if (deviceResult.Code == StateCode.SUCCESS)
|
{
|
FunctionList.List.ClearDatas();
|
//MainPage.Log($"============设备============开始" + FunctionList.List.Functions.Count);
|
//MainPage.Log($"读取设备信息成功");
|
//MainPage.Log($"sid列表获取====" + deviceResult.Data.ToString());
|
var deviceList = JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString());
|
if (deviceList == null)
|
{
|
deviceList = new DevcieApiPack();
|
}
|
try
|
{
|
while (deviceList.totalPage != deviceList.pageNo)
|
{
|
var deviceResult2 = Ins.HttpRequest.GetDeviceList("30", Convert.ToInt32(deviceList.pageNo) + 1 + "");
|
if (deviceResult2.Code == StateCode.SUCCESS)
|
{
|
var deviceList2 = JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString());
|
deviceList.pageNo = deviceList2.pageNo;
|
deviceList.list.AddRange(deviceList2.list);
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
}
|
finally
|
{
|
|
}
|
|
string delFile = "";
|
if (FunctionList.List.GetDeviceFunctionList().Count > 0)
|
{
|
|
for (int i = 0; i < FunctionList.List.GetDeviceFunctionList().Count;)
|
{
|
var localFunction = FunctionList.List.GetDeviceFunctionList()[i];
|
//if (SPK.MusicSpkList().Contains(localFunction.spk))
|
//{
|
// i++;
|
// continue;
|
//}
|
var newFunction = deviceList.list.Find((obj) => obj.deviceId == localFunction.deviceId);
|
|
if (delFile == localFunction.savePath)
|
{
|
i++;
|
continue;
|
}
|
delFile = localFunction.savePath;
|
FunctionList.List.DeleteFunction(localFunction);
|
}
|
}
|
//处理剩下的新增功能
|
//int iiii = 0;
|
foreach (var newFunction in deviceList.list)
|
{
|
newFunction.AssembleStatus();
|
newFunction.SaveFunctionFile();
|
FunctionList.List.IniFunctionList(newFunction.savePath,true);
|
//MainPage.Log($"============设备============{iiii++}");
|
}
|
|
|
|
//===================读取可视对讲数据==========================
|
//判断是否有可视对讲数据,有则显示可视对讲icon
|
//var flVideoInfo = HttpRequest.CheckFlVideo();
|
//if(flVideoInfo.Code == StateCode.SUCCESS)
|
//{
|
// FunctionList.List.videoIntercom1111 = Newtonsoft.Json.JsonConvert.DeserializeObject<UI.UI2.FuntionControlView.Video.VideoClouds>(flVideoInfo.Data.ToString());
|
//}
|
|
//======================获取可视对讲设备列表====================
|
bool isInterphoneType_HDL = false;//是否为HDLLinphone可视对讲
|
bool isInterphoneType_FREEVIEW = false;//是否为全视通可视对讲
|
var videoInfo = VideoSend.GetVideoInfoList();
|
if (videoInfo.Code == StateCode.SUCCESS)
|
{
|
string videoList = videoInfo.Data.ToString();
|
FunctionList.List.videoIntercom = JsonConvert.DeserializeObject<List<UI.UI2.FuntionControlView.Video.Video>>(videoList);
|
|
foreach (var video in FunctionList.List.videoIntercom)
|
{
|
if (video.interphoneType == InterphoneType.IMOUVISIAL.ToString())
|
{
|
UI.UI2.PersonalCenter.PirDevice.PirSend.LcSubAccessToken = video.subAccountToken;
|
}
|
else if (video.interphoneType == InterphoneType.HDL.ToString())
|
{
|
isInterphoneType_HDL = true;
|
DB_ResidenceData.Instance.SupportFacePass = true;
|
DB_ResidenceData.Instance.SaveResidenceData();
|
|
Entity.DB_ResidenceData.Instance.SupportFVDevice = true;
|
}
|
else if (video.interphoneType == InterphoneType.FREEVIEW.ToString())
|
{
|
//为全视通可视对讲
|
DB_ResidenceData.Instance.SupportFacePass = true;
|
Entity.DB_ResidenceData.Instance.SupportVisitorManage = true;
|
Entity.DB_ResidenceData.Instance.SupportFVDevice = true;
|
|
//isInterphoneType_HDL = true;
|
isInterphoneType_FREEVIEW = true;
|
|
}
|
}
|
}
|
|
|
//======================获取Sip账号并且初始化SDK可视对讲设备列表====================
|
//如果检测线程没启动,才继续下面操作 因为App有可能刚启动马上收到推送了,然后才执行到这里
|
if (HDLLinphone.Current.CheckIncomingCallThreadIsNull())
|
{
|
//当前住宅是HDL可视对讲类型的设备
|
if (isInterphoneType_HDL)
|
{
|
//HDLLinphone可视对讲,获取Sip账号并初始化SDK
|
HDLCallVideoInfo callVideoInfo = new HDLCallVideoInfo();
|
callVideoInfo.HomeId = DB_ResidenceData.Instance.CurrentRegion.id;
|
callVideoInfo.InterphoneType = InterphoneType.HDL.ToString();
|
HDLLinphone.Current.GetHDLSipInfoAndInitSDK(callVideoInfo);
|
}
|
else if (isInterphoneType_FREEVIEW)
|
{
|
|
//HDLLinphone可视对讲,获取Sip账号并初始化SDK
|
HDLCallVideoInfo callVideoInfo = new HDLCallVideoInfo();
|
callVideoInfo.HomeId = DB_ResidenceData.Instance.CurrentRegion.id;
|
callVideoInfo.InterphoneType = InterphoneType.FREEVIEW.ToString();
|
HDLLinphone.Current.GetHDLSipInfoAndInitSDK(callVideoInfo);
|
}
|
else
|
{
|
Utlis.WriteLine("当前住宅不支持HDL可视对讲,退出登录所有账号");
|
//当前住宅不支持HDL可视对讲
|
HDLLinphone.Current.LogoutAllAccount();
|
}
|
}
|
|
|
|
//======================登录全视通====================
|
if (isInterphoneType_FREEVIEW)
|
{
|
|
#if __IOS__
|
string systemVersion = UIKit.UIDevice.CurrentDevice.SystemVersion;
|
string errorVersion = "16.2.0";
|
if (systemVersion.CompareTo(errorVersion) < 0)///全视通不兼容ios16以上的系统,不要加载这个先
|
{
|
List<VisitorTempPassword> dataList = new List<VisitorTempPassword>();
|
Dictionary<string, object> dictionary = new Dictionary<string, object>();
|
dictionary.Add("homeId", Entity.DB_ResidenceData.Instance.CurrentRegion.id);
|
var requestJson = HttpUtil.GetSignRequestJson(dictionary);
|
ResponsePackNew pack = HttpUtil.RequestHttpsPost(NewAPI.Api_Post_GetExtMemberInfo, requestJson);
|
if (pack != null)
|
{
|
var data = JsonConvert.DeserializeObject<FreeviewMemberInfo>(pack.Data.ToString());
|
//登录全视通
|
Shared.IOS.HDLFVSDK.Video.Init("", data.extUserId, DB_ResidenceData.Instance.CurrentRegion.id, "78FF1E4D-FC0A-4E71-9B79-0448E4460BD7", "T0001", "120.77.53.170:9700", "120.77.53.170:21664");
|
|
}
|
}
|
#endif
|
}
|
|
}
|
else
|
{
|
MainPage.Log($"读取云端设备数据失败:Code:{deviceResult.Code}; Msg:{deviceResult.message}");
|
}
|
}catch (Exception ex)
|
{
|
MainPage.Log($"============设备============{ex.Message}");
|
}
|
finally
|
{
|
complateDevice = true;
|
MainPage.Log($"============设备============完成" + FunctionList.List.Functions.Count);
|
}
|
|
|
if (DB_ResidenceData.Instance.HomeGateway.isSupportGroupControl)
|
{
|
var pack = Ins.HttpRequest.GetGroupControlList();
|
if (pack != null)
|
{
|
if (pack.Code == StateCode.SUCCESS)
|
{
|
try
|
{
|
var groupControlList = JsonConvert.DeserializeObject<List<GroupControl>>(pack.Data.ToString());
|
var readSidList = new List<string>();
|
foreach(var temp in groupControlList)
|
{
|
FunctionList.List.groupControls.Clear();
|
readSidList.Add(temp.userDeviceGroupControlId);
|
if (readSidList.Count >= 20)
|
{
|
var data = Ins.httpRequest.GetGroupControInfo(readSidList);
|
if(data != null)
|
{
|
if(data.Code == StateCode.SUCCESS)
|
{
|
var groupControlInfoList = JsonConvert.DeserializeObject<List<GroupControl>>(data.Data.ToString());
|
FunctionList.List.groupControls.AddRange(groupControlInfoList);
|
}
|
else
|
{
|
IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
|
}
|
}
|
readSidList.Clear();
|
}
|
}
|
if (readSidList.Count > 0)
|
{
|
var data = Ins.httpRequest.GetGroupControInfo(readSidList);
|
if (data != null)
|
{
|
if (data.Code == StateCode.SUCCESS)
|
{
|
var groupControlInfoList = JsonConvert.DeserializeObject<List<GroupControl>>(data.Data.ToString());
|
FunctionList.List.groupControls.AddRange(groupControlInfoList);
|
}
|
else
|
{
|
IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
|
}
|
}
|
readSidList.Clear();
|
}
|
}
|
catch (Exception ex)
|
{
|
MainPage.Log($"读取组控列表失败:{ex.Message}");
|
}
|
}
|
else
|
{
|
IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
|
}
|
}
|
}
|
//======================场景====================
|
try
|
{
|
complateScene = false;
|
var pack = Ins.HttpRequest.GetSceneList();
|
if (pack.Code == StateCode.SUCCESS)
|
{
|
MainPage.Log($"读取场景数据成功");
|
var sceneList = JsonConvert.DeserializeObject<List<Scene>>(pack.Data.ToString());
|
if (sceneList == null)
|
{
|
sceneList = new List<Scene>();
|
}
|
FunctionList.List.scenes.Clear();
|
|
//处理剩下的新增功能
|
foreach (var tempScene in sceneList)
|
{
|
tempScene.SaveSceneFile();
|
FunctionList.List.scenes.Add(tempScene);
|
}
|
//如果是一端口需要提前下载场景数据,否则控制不了一端口场景
|
if (DB_ResidenceData.Instance.GatewayType == 0)
|
{
|
var sceneIds = new List<string>();
|
foreach (var tempScene in FunctionList.List.scenes)
|
{
|
sceneIds.Add(tempScene.userSceneId);
|
}
|
var packInfo = HttpRequest.GetSceneListInfo(sceneIds);
|
if (packInfo.Code == StateCode.SUCCESS)
|
{
|
var serverTempList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>>(packInfo.Data.ToString());
|
foreach (var localScene in FunctionList.List.scenes)
|
{
|
var serverTemp = serverTempList.Find((obj) => obj.userSceneId == localScene.userSceneId);
|
if (serverTemp != null)
|
{
|
localScene.functions = serverTemp.functions;
|
localScene.SaveSceneFile();
|
}
|
}
|
}
|
else
|
{
|
IMessageCommon.Current.ShowErrorInfoAlter(packInfo.Code);
|
}
|
}
|
}
|
else
|
{
|
MainPage.Log($"读取云端场景数据失败:Code:{pack.Code}; Msg:{pack.message}");
|
}
|
}catch(Exception ex)
|
{
|
MainPage.Log($"===场景==={ex.Message}");
|
}
|
finally
|
{
|
complateScene = true;
|
}
|
|
//======================安防====================
|
GetSecurityList();
|
})
|
{ IsBackground = true }.Start();
|
|
//===================读取逻辑列表==========================
|
Logic.LogicList.Clear();//主页下拉强制刷新自动化列表
|
|
//======================注册推送====================
|
httpRequest.RegisteredPush();
|
}
|
catch (Exception ex)
|
{
|
MainPage.Log($"数据初始化失败:{ex.Message}");
|
}
|
finally
|
{
|
Application.RunOnMainThread(() =>
|
{
|
MainPage.Log($"结束读取云端数据线程");
|
if (waitPage != null)
|
{
|
waitPage.RemoveFromParent();
|
waitPage = null;
|
}
|
});
|
//不考虑网关情况,直接订阅
|
DAL.Mqtt.MqttClient.InitState();
|
|
try
|
{
|
FunctionList.List.Read3tyFunctionStatus();
|
}catch(Exception ex)
|
{
|
MainPage.Log("读取第三方设备状态失败:"+ex.Message);
|
}
|
}
|
});
|
downloadDataThread.IsBackground = true;
|
downloadDataThread.Priority = System.Threading.ThreadPriority.Highest;
|
downloadDataThread.Start();
|
|
//网络卡顿,终止下载线程
|
new System.Threading.Thread(() =>
|
{
|
try
|
{
|
while (endTime1 > DateTime.Now)
|
{
|
if ( complateDevice && complateScene)
|
{
|
break;
|
}
|
System.Threading.Thread.Sleep(100);
|
}
|
DownloadDataComplete = true;
|
Application.RunOnMainThread(() =>
|
{
|
if (waitPage != null)
|
{
|
waitPage.RemoveFromParent();
|
waitPage = null;
|
}
|
});
|
}
|
catch { }
|
finally
|
{
|
if (DB_ResidenceData.Instance.CurrentRegion != null)
|
{
|
#region 读取本地数据
|
//搜索网关
|
DriverLayer.Control.Ins.SearchLoaclGateway();
|
//重新连接mqtt
|
DAL.Mqtt.MqttClient.DisConnectRemote("刷新数据,重连mqtt",false);
|
#endregion
|
|
}
|
}
|
})
|
{ IsBackground = true }.Start();
|
}
|
|
/// <summary>
|
/// 获取功能信息
|
/// </summary>
|
public void GetFunctionInfo(string functionId)
|
{
|
var deviceResult = Ins.HttpRequest.GetDeviceInfo(functionId);
|
if (deviceResult.Code == StateCode.SUCCESS)
|
{
|
MainPage.Log($"读取设备信息成功");
|
var packList = JsonConvert.DeserializeObject<DevcieApiPack>(deviceResult.Data.ToString());
|
|
foreach(var function in packList.list)
|
{
|
function.SaveFunctionFile();
|
FunctionList.List.IniFunctionList(function.savePath,true);
|
}
|
}
|
}
|
|
/// <summary>
|
/// 获取安防列表
|
/// </summary>
|
public void GetSecurityList()
|
{
|
lock (FunctionList.List.securities)
|
{
|
var pack = Ins.HttpRequest.GetSecurityList();
|
if (pack.Code == StateCode.SUCCESS)
|
{
|
var packList = JsonConvert.DeserializeObject<List<SecurityAlarm>>(pack.Data.ToString());
|
Console.WriteLine("安防总数:" + packList.Count);
|
var sidList = new List<string>();
|
foreach (var function in packList)
|
{
|
sidList.Add(function.sid);
|
}
|
var infoListPack = Ins.httpRequest.GetSecurityInfo(sidList, new List<string>());
|
var infoList = JsonConvert.DeserializeObject<List<SecurityAlarm>>(infoListPack.Data.ToString());
|
if (infoList != null)
|
{
|
var filePathList = FileUtlis.Files.ReadFiles().FindAll((obj) => obj.StartsWith("SecurityData_"));
|
if (filePathList != null)
|
{
|
foreach (var file in filePathList)
|
{
|
FileUtlis.Files.DeleteFile(file);
|
}
|
}
|
FunctionList.List.securities.Clear();
|
foreach (var function in infoList)
|
{
|
function.SaveFile();
|
FunctionList.List.IniFunctionList(function.savePath, true);
|
}
|
}
|
}
|
else
|
{
|
MainPage.Log($"读取安防列表失败:Code:{pack.Code}; Msg:{pack.message}");
|
}
|
}
|
}
|
|
/// <summary>
|
/// 获取SIP账号信息
|
/// </summary>
|
public void GetSipInfo()
|
{
|
var pack = Ins.HttpRequest.GetSecurityList();
|
}
|
|
|
}
|
}
|