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 Shared;
namespace HDL_ON.Entity
{
public class FunctionList
{
static FunctionList _FunctionList;
public static FunctionList List
{
get
{
if (_FunctionList == null)
{
_FunctionList = new FunctionList();
#region 恢复数据
var filePathList = FileUtlis.Files.ReadFiles();
foreach (var filePath in filePathList)
{
_FunctionList.IniFunctionList(filePath);
}
#endregion
}
return _FunctionList;
}
}
///
/// 功能列表
///
public List Functions = new List();
///
/// 空调列表
///
///
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 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));
}
#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.EnvironSpkList();
return Functions.FindAll((obj) => spkList.Contains(obj.spk));
}
///
/// 安防设备列表
///
public List GetArmSensorList()
{
var spkList = SPK.ArmSensorSpkList();
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();
///
/// 加载功能列表
///
///
///
/// 考虑到性能问题追加此变量,是否检测重复,只对function有效
/// true:当重复存在时,替换掉
/// false:直接无条件添加
public void IniFunctionList(string filePath, bool checkRepeat = false)
{
//MainPage.Log("12346890sdkxghjkl");
// 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)
{
//检测重复
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("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);
}
}
///
/// 获取设备功能列表
///
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:
foreach (var function in Functions)
{
if (!SPK.Get3tySpk(SPK.BrandType.All3tyBrand).Contains(function.spk))
{
resultFunctions.Add(function);
}
}
break;
case SPK.BrandType.Tuya:
foreach (var function in Functions)
{
if (SPK.Get3tySpk(SPK.BrandType.Tuya).Contains(function.spk))
{
resultFunctions.Add(function);
}
}
break;
}
return resultFunctions;
}
return Functions;
}
///
/// 清空设备功能列表
///
public void Clear()
{
Functions = new List();
_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;
}
///
/// 删除场景
/// todo
///
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)
{
foreach (var function in GetDeviceFunctionList(SPK.BrandType.Hdl))
{
switch (function.Spk_Prefix)
{
case FunctionCategory.Music:
case FunctionCategory.DryContact:
continue;
}
DriverLayer.Control.Ins.SendReadCommand(function);
//switch (function.Spk_Prefix)
//{
// case FunctionCategory.Light:
// case FunctionCategory.Electric:
// case FunctionCategory.Curtain:
// case FunctionCategory.AC:
// case FunctionCategory.FloorHeat:
// case FunctionCategory.Sensor:
// DriverLayer.Control.Ins.SendReadCommand(function);
// break;
//}
}
}
else
{
var page = new List();
int count = 0;
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)
{
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
}
}