using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using ZigBee.Device;
namespace Shared.Common
{
///
/// 设备(和UI相关,和device有区别)
///
[System.Serializable]
public class DeviceUI
{
#region ◆ 变量____________________________
///
/// 是否是自定义图片
///
public bool IsCustomizeImage = false;
//DeviceUI_DeviceFilePath
public override bool Equals(object obj)
{
var other= obj as DeviceUI;
if (CommonDevice.DeviceAddr==other.CommonDevice.DeviceAddr && CommonDevice.DeviceEpoint==other.CommonDevice.DeviceEpoint)
{
return true;
}
return false;
//CommonDevice.DeviceEpoint.Equals(other.CommonDevice.DeviceEpoint) && CommonDevice.DeviceAddr.Equals(other.CommonDevice.DeviceAddr);
}
public override int GetHashCode()
{
return base.GetHashCode();
}
///
/// 设备文件
///
/// The name of the file.
[Newtonsoft.Json.JsonIgnore]
public string FileName
{
get
{
return $"DeviceUI_{DeviceFileName}";
}
}
///
/// 设备文件名(并非deviceUI设备文件名,指的是device)
///
public string DeviceFileName = string.Empty;
///
/// 图片
///
public string IconPath = string.Empty;
///
/// 设备图片--在线或者选中状态
///
/// The online icon path.
[Newtonsoft.Json.JsonIgnore]
public string OnlineIconPath
{
get
{
if (string.IsNullOrEmpty(IconPath))
{
return string.Empty;
}
var pathArr = IconPath.Split('.');
if (pathArr == null || string.IsNullOrEmpty(pathArr[0]))
{
return string.Empty;
}
return $"{pathArr[0]}Selected.png";
}
}
//[Newtonsoft.Json.JsonIgnore]
//ZigBee.Device.CommonDevice commonDevice;
[Newtonsoft.Json.JsonIgnore]
public ZigBee.Device.CommonDevice CommonDevice
{
get
{
//commonDevice = ZigBee.Device.CommonDevice.CommonDeviceByFilePath(DeviceFilePath);
//return commonDevice;
//if (commonDevice == null)
//{
// return ReCommonDevice;
//}
//else{
//return commonDevice;
if (DeviceFileName.Split('_').Length < 4)
{
return null;
}
return Common.LocalDevice.Current.GetDevice(DeviceFileName.Split('_')[2], int.Parse(DeviceFileName.Split('_')[3]));
//}
}
}
//[Newtonsoft.Json.JsonIgnore]
//public ZigBee.Device.CommonDevice ReCommonDevice
//{
// get
// {
//commonDevice= ZigBee.Device.CommonDevice.CommonDeviceByFilePath(DeviceFilePath);
//return commonDevice;
// }
//}
///
/// 控制延时默认反馈的线程列表
///
public static List threads = new List { };
#endregion
#region ◆ 发送控制命令延时反馈______________
///
/// 发送控制命令延时反馈
///
/// Common device.
/// Action.
/// Delay time.
public static void SendCommandDelayAction(CommonDevice commonDevice, Action action, int delayTime = 3)
{
var threadName = commonDevice.GetHashCode().ToString();
if (threads.Find((obj) => obj.Name == threadName) == null)
{
var thread = new System.Threading.Thread(() =>
{
var dateTime = DateTime.Now;
while ((DateTime.Now - dateTime).TotalSeconds < delayTime)
{
System.Threading.Thread.Sleep(100);
}
lock (threads)
{
threads.RemoveAll((obj) => obj.Name == threadName);
}
action?.Invoke();
})
{ IsBackground = true, Name = threadName };
lock (threads)
{
threads.Add(thread);
}
thread.Start();
}
}
#endregion
#region ◆ 显示控制设备是否成功的提示_________
///
/// 显示控制设备是否成功的提示
///
/// The red component.
public static void ShowStatuTip(int r)
{
Application.RunOnMainThread(() =>
{
string msg = Language.StringByID(r);
var tip = new Phone.UserCenter.TipViewControl(msg, 1000, 1);
tip.ShowView();
});
}
#endregion
#region ◆ 保存____________________________
///
/// 保存
///
public void Save()
{
if (Global.IsExistsByHomeId(FileName))
{
return;
}
ReSave();
}
///
/// 重新保存
///
public void ReSave()
{
var paths = DeviceFileName.Split('_');
if (paths.Length < 3)
{
return;
}
if (IconPath == string.Empty)
{
//控制面板是一个点
if (paths[1] == ZigBee.Device.DeviceType.OnOffSwitch.ToString())
{
IconPath = "Device/DryContact.png";
}
else if (paths[1] == ZigBee.Device.DeviceType.ColorDimmableLight.ToString())
{
//彩灯
IconPath = "Device/ColorDimmableLight.png";
}
else if (paths[1] == ZigBee.Device.DeviceType.DimmableLight.ToString())
{
//调光器
IconPath = "Device/DimmableLight.png";
}
else if (CommonDevice != null)
{
//其他的图标有点特殊
string unSelectPic = string.Empty;
string selectPic = string.Empty;
LocalDevice.Current.GetDeviceBeloneIcon(new List { CommonDevice }, ref unSelectPic, ref selectPic);
IconPath = unSelectPic;
}
}
Global.WriteFileByBytesByHomeId(FileName, System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)));
}
#endregion
#region ◆ 获取设备类型图片__________________
///
/// 通过设备类型获取通用的设备类型图片
///
/// The device type un selected image path.
/// Device type.
public static string GetDeviceTypeUnSelectedImagePath(ZigBee.Device.DeviceType deviceType)
{
string ImagePath;
//窗帘
switch (deviceType)
{
case DeviceType.OnOffSwitch:
//控制面板
ImagePath= "Device/DryContact.png";
break;
case DeviceType.OnOffOutput:
//继电器
ImagePath= "Device/Relay.png";
break;
case DeviceType.DimmableLight:
//调光灯
ImagePath= "Device/DimmableLight.png";
break;
case DeviceType.WindowCoveringDevice:
//窗帘
ImagePath= "Device/Curtain.png";
break;
case DeviceType.Thermostat:
//空调
ImagePath= "Device/AirConditioner.png";
break;
case DeviceType.IASZone:
//传感器
ImagePath= "Device/Sensor.png";
break;
case DeviceType.AirSwitch:
//空气开关
ImagePath= "Device/AirSwitch.png";
break;
case DeviceType.Repeater:
//中继器
ImagePath = "Device/AirSwitch.png";
break;
default:
ImagePath= "Device/Relay.png";
break;
}
return ImagePath;
}
///
/// 通过设备类型获取通用的选中状态的设备类型图片
///
/// The device type un selected image path.
/// Device type.
public static string GetDeviceTypeSelectedImagePath(ZigBee.Device.DeviceType deviceType)
{
string ImagePath;
switch (deviceType)
{
case DeviceType.OnOffSwitch:
//控制面板
ImagePath = "Device/DryContactSelected.png";
break;
case DeviceType.OnOffOutput:
//继电器
ImagePath = "Device/RelaySelected.png";
break;
case DeviceType.DimmableLight:
//调光灯
ImagePath = "Device/DimmableLightSelected.png";
break;
case DeviceType.WindowCoveringDevice:
//窗帘
ImagePath = "Device/CurtainSelected.png";
break;
case DeviceType.Thermostat:
//空调
ImagePath = "Device/AirConditionerSelected.png";
break;
case DeviceType.IASZone:
//传感器
ImagePath = "Device/SensorSelected.png";
break;
case DeviceType.AirSwitch:
//空气开关
ImagePath = "Device/AirSwitchSelected.png";
break;
case DeviceType.Repeater:
//中继器--还没图片
ImagePath = "Device/AirSwitchSelected.png";
break;
default:
ImagePath = "Device/RelaySelected.png";
break;
}
return ImagePath;
}
#endregion
#region ◆ 获取设备类型名称__________________
public static string GetDeviceTypeName(ZigBee.Device.DeviceType deviceType)
{
int deviceTypeR;
switch (deviceType)
{
case DeviceType.OnOffSwitch:
//控制面板
deviceTypeR = R.MyInternationalizationString.OnOffSwitch;
break;
case DeviceType.OnOffOutput:
//继电器--灯
deviceTypeR = R.MyInternationalizationString.OnOffOutput;
break;
case DeviceType.DimmableLight:
//调光灯
deviceTypeR = R.MyInternationalizationString.DimmableLight;
break;
case DeviceType.WindowCoveringDevice:
//窗帘
deviceTypeR = R.MyInternationalizationString.WindowCoveringDevice;
break;
case DeviceType.Thermostat:
//空调
deviceTypeR = R.MyInternationalizationString.Thermostat;
break;
case DeviceType.IASZone:
//传感器
deviceTypeR = R.MyInternationalizationString.IASZone;
break;
case DeviceType.AirSwitch:
//空气开关
deviceTypeR = R.MyInternationalizationString.AirSwitch;
break;
case DeviceType.Repeater:
//中继器
deviceTypeR = R.MyInternationalizationString.Repeater;
break;
default:
deviceTypeR = R.MyInternationalizationString.UnknowDevice;
break;
}
return Language.StringByID(deviceTypeR);
}
#endregion
}
}