using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using HDL_ON.Common;
using HDL_ON.DAL;
using HDL_ON.DAL.Server;
using HDL_ON.DriverLayer;
using Shared;
namespace HDL_ON.Entity
{
public class FunctionList
{
static FunctionList _FunctionList;
//public static void ClearData()
//{
// try
// {
// _FunctionList._IpCamImou = null;
// _FunctionList.ClearDatas();
// _FunctionList = null;
// }
// catch (Exception ex)
// {
// MainPage.Log($"清理FunctionList异常:{ex.Message}");
// _FunctionList = null;
// }
//}
public static FunctionList List
{
get
{
if (_FunctionList == null)
{
_FunctionList = new FunctionList();
#region 恢复数据
var filePathList = FileUtlis.Files.ReadFiles();
foreach (var filePath in filePathList)
{
try
{
_FunctionList.IniFunctionList(filePath);
}
catch { }
}
#endregion
}
return _FunctionList;
}
}
///
/// 功能列表
///
public List Functions = new List();
///
/// 群控列表
///
public List groupControls = new List();
///
/// 机械臂列表
///
///
public List GetMechanicalArmList()
{
return Functions.FindAll((obj) => obj.spk == SPK.MechanicalArm);
}
List _IpCamImou;
///
/// 获取摄像头列表
///
///
public List GetIpCamImouList()
{
if (_IpCamImou == null)
{
_IpCamImou = Functions.FindAll((obj) => obj.spk == SPK.IpCam_Imou);
if (_IpCamImou.Count > 0)
{
#if __IOS__
//初始化大华摄像头sdk
Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().InitSDKWithAppKey("HDL-HOME-APP-TEST", "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss", OnAppConfig.Instance.RequestHttpsHost);
Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().AccessToken = UserInfo.Current.LoginTokenString;
Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().RefreshToken = UserInfo.Current.RefreshToken;
Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().HomeId = DB_ResidenceData.Instance.CurrentRegion.id;
Console.WriteLine("token:" + UserInfo.Current.LoginTokenString);
Console.WriteLine("token:" + UserInfo.Current.RefreshToken);
Shared.IOS.HDLCNVRSDK.HDLLCNVRSDK.SharedInstance().RefreshDeviceList();
#else
Com.Utils.HdlToLcUtils.Instance.InitData(Shared.Application.Activity, "HDL-HOME-APP-TEST", "WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss", OnAppConfig.Instance.RequestHttpsHost);
Com.Utils.HdlToLcUtils.Instance.HomeId = DB_ResidenceData.Instance.CurrentRegion.id;
Com.Utils.HdlToLcUtils.Instance.Token = UserInfo.Current.AccessToken;
#endif
}
}
return _IpCamImou;
}
///
/// 绿建科技系统
/// 总控列表
///
///
public List GetAcstParentList()
{
return Functions.FindAll((obj) => obj.spk == SPK.AcstParent);//.OrderByDescending(o=>o.controlCounter).ToList()
}
///
/// 绿建科技系统
/// 子控列表
///
///
public List GetAcstSubList()
{
return Functions.FindAll((obj) => obj.spk == SPK.AcstSub);
}
///
/// 空调列表
///
///
public List GetAcList()
{
var spkList = SPK.AcSpkList();
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
}
///
/// 灯光列表
///
public List GetLightList()
{
var spkList = SPK.LightSpkList();
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
}
///
/// 窗帘列表
///
public List GetCurtainList()
{
var spkList = SPK.CurtainSpkList();
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
}
///
/// 地热列表
///
public List GetFloorHeatingList()
{
var spkList = SPK.FhSpkList();
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
}
public List GetDoorLockList()
{
var spkList = SPK.GetDoorLockSPKList();
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
}
///
/// 获取萤石视频门锁
///
///
public List GetVideoDoorLockList()
{
var spkList = SPK.GetVideoDoorLockSPKList();
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
}
///
/// 新风列表
///
///
public List GetAirFreshList()
{
var spkList = SPK.AirFreshSpkList();
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
}
///
/// 能源列表
///
///
public List GetEnergyList()
{
var spkList = SPK.EnergySpkList();
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
}
List _inverterList = new List();
///
/// 光伏列表
///
public List InverterList()
{
return Functions.FindAll((obj) => obj.spk == SPK.Inverter || obj.spk == SPK.InverterRst);
}
#region 家电列表 electricals
///
/// 家电列表
///
public List GetElectricals()
{
var spkList = SPK.ElectricalSpkList();
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
}
///
/// 红外宝列表
///
public List GetIrModuleList()
{
return Functions.FindAll((obj) => obj.spk == SPK.IrModule);
}
#endregion
///
/// 音乐列表
///
///
public List GetMusicList()
{
var spkList = SPK.MusicSpkList();
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
}
///
/// 环境传感器列表
///
public List GetEnvirSensorsList()
{
var spkList = SPK.EnvironDeviceSpkList();
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
}
///
/// 安防设备列表
///
public List GetArmSensorList()
{
var spkList = SPK.ArmSensorSpkList();
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
}
///
/// 安防中心支持的传感器列表
///
public List GetArmCenterList()
{
var spkList = new List()
{
SPK.SensorPir,
SPK.SensorPirHold,
SPK.SensorDoorWindow,
SPK.SensorSmoke,
SPK.SensorWater,
SPK.SensorGas,
};
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
}
///
/// 可视对讲列表,当为null或size为0则不显示可视对讲icon
///
// public UI.UI2.FuntionControlView.Video.VideoClouds videoIntercom;
public List videoIntercom = new List();
List _OtherBrandFunction;
///
/// 第三方品牌功能
///
public List OtherBrandFunction
{
get
{
if(_OtherBrandFunction == null)
{
_OtherBrandFunction = new List();
var spkList = SPK.GetAll3tySPK();
_OtherBrandFunction = Functions.FindAll((obj) => spkList.Contains(obj.spk));
}
return _OtherBrandFunction;
}
}
///
/// 场景列表
///
public List scenes = new List();
///
/// 安防列表
///
public List securities = new List();
public List GetOrdinarySecurities()
{
var ordinarySecurities = new List();
foreach (var mode in securities)
{
if (mode.type == "all_day" || mode.type == "mute")
{
continue;
}
ordinarySecurities.Add(mode);
}
return ordinarySecurities;
}
///
/// 加载功能列表
///
///
///
/// 考虑到性能问题追加此变量,是否检测重复,只对function有效
/// true:当重复存在时,替换掉
/// false:直接无条件添加
public void IniFunctionList(string filePath, bool checkRepeat = false)
{
try
{
// todo 增加设备,增加功能进功能列表
if (filePath.StartsWith("FunctionData_"))
{
var functionDataBytes = FileUtlis.Files.ReadFile(filePath);
var functionDataString = System.Text.Encoding.UTF8.GetString(functionDataBytes);
var tempFunction = Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString);
if (tempFunction == null)
{
MainPage.Log("null");
FileUtlis.Files.DeleteFile(filePath);
return;
}
//音乐部分要修改
//if(tempFunction.spk.ToString() == SPK.MusicStandard)
//{
// UI.Music.A31MusicModel.A31MusicModelList.Add(Newtonsoft.Json.JsonConvert.DeserializeObject(functionDataString));
//}
if (checkRepeat == true)
{
//检测重复
var same = Functions.FindAll((obj) => obj.deviceId == tempFunction.deviceId);
if(same!= null)
{
foreach(var sameTemp in same)
{
Functions.Remove(sameTemp);
}
}
//for (int i = 0; i < Functions.Count; i++)
//{
// if (Functions[i].deviceId == tempFunction.deviceId)
// {
// //先移除掉再加
// Functions.RemoveAt(i);
// Functions.Add(tempFunction);
// return;
// }
//}
}
Functions.Add(tempFunction);
}
if (filePath.StartsWith("SceneData_"))
{
var sceneDataBytes = FileUtlis.Files.ReadFile(filePath);
var sceneDataString = System.Text.Encoding.UTF8.GetString(sceneDataBytes);
var tempScene = Newtonsoft.Json.JsonConvert.DeserializeObject(sceneDataString);
List.scenes.Add(tempScene);
}
else if (filePath.StartsWith("SecurityData_"))
{
var dataBytes = FileUtlis.Files.ReadFile(filePath);
var dataString = System.Text.Encoding.UTF8.GetString(dataBytes);
var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(dataString);
if (temp == null)
{
MainPage.Log("SecurityData_null");
FileUtlis.Files.DeleteFile(filePath);
return;
}
if (checkRepeat == true)
{
//检测重复
for (int i = 0; i < securities.Count; i++)
{
if (securities[i].sid == temp.sid)
{
//先移除掉再加
securities.RemoveAt(i);
securities.Add(temp);
return;
}
}
}
securities.Add(temp);
}
}
catch (Exception ex)
{
MainPage.Log($"IniFunctionList error : {ex.Message}");
}
finally
{
}
}
///
/// 获取设备功能列表
///
public List GetDeviceFunctionList(SPK.BrandType brandType = SPK.BrandType.All)
{
List resultFunctions = new List();
if (brandType == SPK.BrandType.All)
{
}
else
{
switch (brandType)
{
case SPK.BrandType.Hdl:
try
{
foreach (var function in Functions)
{
if (!SPK.Get3tySpk(SPK.BrandType.All3tyBrand).Contains(function.spk))
{
resultFunctions.Add(function);
}
}
}
catch { }
break;
case SPK.BrandType.Tuya:
lock (Functions)
{
try
{
foreach (var function in Functions)
{
if (SPK.Get3tySpk(SPK.BrandType.Tuya).Contains(function.spk))
{
resultFunctions.Add(function);
}
}
}
catch { }
}
break;
}
return resultFunctions;
}
return Functions;
}
///
/// 清空设备功能列表
///
public void ClearDatas()
{
try
{
if (_IpCamImou != null)
{
_IpCamImou.Clear();
_IpCamImou = null;
}
_FunctionList = new FunctionList();
}
catch (Exception ex)
{
MainPage.Log($"清理FunctionList异常:{ex.Message}");
_FunctionList = null;
}
}
///
/// 功能绑定房间
///
public string FunctionsBindRooms(List roomIds,List deviceIds)
{
var pm = new HttpServerRequest();
var pack = pm.BindDeviceToRoom(deviceIds, roomIds);
if(pack.Code == StateCode.SUCCESS)
{
}
else
{
IMessageCommon.Current.ShowErrorInfoAlter(pack.Code);
}
return pack.Code;
}
///
/// 删除场景
///
public void DeleteScene(Scene scene,bool upSevser)
{
if (upSevser)
{
var pm = new HttpServerRequest();
var packCode = pm.DeleteScene(scene.userSceneId);
if (packCode == StateCode.SUCCESS)
{
FileUtlis.Files.DeleteFile(scene.savePath);
List.scenes.Remove(scene);
}
else
{
IMessageCommon.Current.ShowErrorInfoAlter(packCode);
}
}
else
{
FileUtlis.Files.DeleteFile(scene.savePath);
List.scenes.Remove(scene);
}
}
///
/// 删除本地功能及文件
///
public void DeleteFunction(Function delTemp)
{
Functions.Remove(Functions.Find((obj) => obj.deviceId == delTemp.deviceId));
FileUtlis.Files.DeleteFile(delTemp.savePath);
}
bool lockReadFunctionStatus = false;
///
/// 读取第三方设备状态
///
public void Read3tyFunctionStatus()
{
//读取涂鸦设备状态
if (GetDeviceFunctionList(SPK.BrandType.Tuya).Count > 0)
{
var page = new List();
int count = 0;
foreach (var function in GetDeviceFunctionList(SPK.BrandType.Tuya))
{
page.Add(function.deviceId);
count++;
if (count > 9)
{
DriverLayer.Control.Ins.ReadFunctionsInfo(page);
page.Clear();
count = 0;
}
}
DriverLayer.Control.Ins.ReadFunctionsInfo(page);
}
}
///
/// 读取全部功能的状态
///
public void ReadAllFunctionStatus()
{
if (lockReadFunctionStatus)
{
MainPage.Log($"多次进入--返回");
return;
}
new Thread(() =>
{
if (lockReadFunctionStatus)
{
MainPage.Log($"多次进入--返回");
return;
}
MainPage.Log($"进入--读取");
lockReadFunctionStatus = true;
try
{
Read3tyFunctionStatus();
if(DriverLayer.Control.Ins.GatewayOnline_Local)
{
//List functions = GetDeviceFunctionList(SPK.BrandType.Hdl);
//var sss = functions.OrderBy((obj) => obj.collect);
List readList = new List();
foreach (var function in GetDeviceFunctionList(SPK.BrandType.Hdl))
{
readList.Add(function);
MainPage.Log($"读取功能状态:{function.name} : {function.sid} ");
if (readList.Count > 9)
{
Control.Ins.SendReadCommand(readList);
readList.Clear();
}
}
if (readList.Count > 0)
{
Control.Ins.SendReadCommand(readList);
}
if (DB_ResidenceData.Instance.GatewayType == 1)
{
Dictionary pairs = new Dictionary();
string sendId = Control.Ins.msg_id.ToString();
pairs.Add("id", sendId);
pairs.Add("time_stamp", Utlis.GetTimestamp());
var readSecurityStatusJson = Newtonsoft.Json.JsonConvert.SerializeObject(pairs);
var sendBytes = Control.Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadSecurityStatus, readSecurityStatusJson);
MainPage.Log($"本地通讯 读取安防状态:{readSecurityStatusJson}");
new Control_Udp().SendLocalHdlLinkData(sendBytes, sendId);
}
}
else
{
var page = new List();
int count = 0;
//List functions = GetDeviceFunctionList(SPK.BrandType.Hdl);
//var sss = functions.OrderBy((obj) => obj.collect);
foreach (var function in GetDeviceFunctionList(SPK.BrandType.Hdl))
{
page.Add(function.deviceId);
count++;
if (count > 9)
{
DriverLayer.Control.Ins.SendApiReadCommand(page);
page.Clear();
count = 0;
}
}
DriverLayer.Control.Ins.SendApiReadCommand(page);
}
}
catch (Exception ex)
{
MainPage.Log($"Refresh Residence Function Status Error : {ex.Message}");
}
finally
{
lockReadFunctionStatus = false;
MainPage.Log($"结束--读取");
}
})
{ IsBackground = true }.Start();
}
#region 场景相关
///
/// 添加场景
///
public string AddScene(Scene scene, out Scene result)
{
Scene tempScene = null;
var pm = new HttpServerRequest();
var revPack = pm.AddScene(scene);
if (revPack.Code == StateCode.SUCCESS)
{
if (MainPage.NoLoginMode)
{
var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(scene));
FileUtlis.Files.WriteFileByBytes(scene.savePath, ssd);
result = scene;
}
else
{
var sceneList = Newtonsoft.Json.JsonConvert.DeserializeObject>(revPack.Data.ToString());
tempScene = sceneList.Find((obj) => obj.sid == scene.sid);
var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(tempScene));
FileUtlis.Files.WriteFileByBytes(scene.savePath, ssd);
result = tempScene;
}
}
else
{
result = tempScene;
}
return revPack.Code;
}
#endregion
#region 收藏功能
///
/// 收藏场景
///
public string CollectScene(Scene scene)
{
var result = "";
if (scene.collect)
{
result = ApiUtlis.Ins.HttpRequest.CollectDevice(scene.userSceneId).Code;
}
else
{
result = ApiUtlis.Ins.HttpRequest.CancelCollectDevice(scene.userSceneId).Code;
}
//提示错误
if (result != StateCode.SUCCESS)
{
IMessageCommon.Current.ShowErrorInfoAlter(result);
}
return result;
}
#endregion
#region
#endregion
}
}