using System;
using System.Collections.Generic;
using System.Threading;
namespace Shared.SimpleControl.Phone
{
///
/// 通过灯光设备类型,显示出所有房间的灯光
///
public class UserDeviceToSocket : FrameLayout
{
///
/// 当前设备界面
///
static UserDeviceToSocket curView;
VerticalScrolViewLayout bodyScrolView;
///
/// 构造函数
///
public UserDeviceToSocket ()
{
curView = this;
BackgroundColor = SkinStyle.Current.MainColor;
readAllStatus ();
}
Thread readEnergyThead;
List EnergtLightList = new List ();
public static void UpdataEnergy (string updataFlag, int energy)
{
Application.RunOnMainThread (() => {
if (curView == null) {
return;
}
if (curView.bodyScrolView.Decelerating) {
return;
}
for (int i = 0; i < curView.bodyScrolView.ChildrenCount; i++) {
if (curView.bodyScrolView.GetChildren (i).GetType () == typeof (FrameLayout)) {
var lightRow = (FrameLayout)curView.bodyScrolView.GetChildren (i);
var o = lightRow.Tag;
if (o != null && o.ToString () == updataFlag) {
for (int j = 0; j < lightRow.ChildrenCount; j++) {
if (lightRow.GetChildren (j).GetType () == typeof (Button)) {
var btn = (Button)lightRow.GetChildren (j);
if (btn.Tag != null && btn.Tag.ToString () == DeviceType.LightEnergySwitch.ToString ()) {
btn.Text = energy.ToString () + " W";
}
}
}
}
}
}
});
}
///
/// 更新当前灯光
///
public static void UpdateStatus (string updataFlag, byte brightness)
{
#region 更新用户主界面灯光点亮总数
Application.RunOnMainThread (() => {
int brighingCount = 0;
foreach (var room in Room.Lists) {
if (string.IsNullOrEmpty(room.Name)) {
continue;
}
foreach (var light in room.DeviceList) {
if (light.Type == DeviceType.LightSwitchSocket) {
if ((light as LightSwitch).CurrentBrightness == 100)
brighingCount++;
}
}
}
UserDeviceView.UpdataDeviceCountNumber (brighingCount, R.MyInternationalizationString.ElectricalControl);
});
#endregion
new System.Threading.Thread (() => {
Application.RunOnMainThread (() => {
if (curView == null || curView.bodyScrolView.Decelerating) {
return;
}
for (int i = 0; i < curView.bodyScrolView.ChildrenCount; i++) {
if (curView.bodyScrolView.GetChildren (i).GetType () == typeof (FrameLayout)) {
var lightRow = (FrameLayout)curView.bodyScrolView.GetChildren (i);
var o = lightRow.Tag;
if (o != null && o.ToString () == updataFlag) {
for (int j = 0; j < lightRow.ChildrenCount; j++) {
if (lightRow.GetChildren (j).GetType () == typeof (Button)) {
var btn = (Button)lightRow.GetChildren (j);
if (brightness == 0) {
btn.IsSelected = false;
} else {
btn.IsSelected = true;
}
}
}
}
}
}
curView.updateLigthOnCount ();
});
}) { IsBackground = true}.Start();
}
///
/// 显示当前多少个灯是亮的
///
void updateLigthOnCount ()
{
Application.RunOnMainThread (() => {
if (curView == null)
return;
for (int i = 0; i < curView.bodyScrolView.ChildrenCount; i++) {
if (curView.bodyScrolView.GetChildren (i).GetType () == typeof (RowLayout)) {
var roomRow = (RowLayout)curView.bodyScrolView.GetChildren (i);
if (roomRow.Tag != null) {
foreach (var room in Room.Lists) {
if (string.IsNullOrEmpty(room.Name)) {
continue;
}
if (roomRow.Tag.ToString () == room.Name) {
int oCount = 0;
foreach (var light in room.DeviceList) {
if (light.Type == DeviceType.LightSwitchSocket) {
if ((light as LightSwitch).CurrentBrightness == 100)
oCount++;
}
}
for (int j = 0; j < roomRow.ChildrenCount; j++) {
if (roomRow.GetChildren (j).GetType () == typeof (EditText)) {
var et = (EditText)roomRow.GetChildren (j);
et.Text = oCount.ToString ();
if (oCount > 0) {
et.TextColor = SkinStyle.Current.SelectedColor;
} else
et.TextColor = SkinStyle.Current.TextColor1;
}
if (roomRow.GetChildren (j).GetType () == typeof (Button)) {
var btn = (Button)roomRow.GetChildren (j);
if (oCount > 0) {
btn.IsSelected = true;
} else {
btn.IsSelected = false;
}
}
}
}
}
}
}
}
});
}
bool showTip = true;
///
/// 控制所有的灯
///
/// The blue component.
void controlAllLight (byte b)
{
showTip = true;
System.Threading.Tasks.Task.Run (() => {
Application.RunOnMainThread (() => {
MainPage.Loading.Start ("Sending...");
});
foreach (var room in Room.Lists) {
if (string.IsNullOrEmpty(room.Name)) {
continue;
}
foreach (var common in room.DeviceList) {
byte [] returnBytes = null;
if (common.Type == DeviceType.LightSwitchSocket || common.Type == DeviceType.LightEnergySwitch) {
returnBytes = Control.ControlBytesSendHasReturn (Command.SetSingleLight, common.SubnetID, common.DeviceID, new byte [] { common.LoopID, b, 0, 0 });
if (showTip) {
Application.RunOnMainThread (() => {
if (returnBytes == null) {
string showTipText = common.Name + Language.StringByID (R.MyInternationalizationString.ControlFailure);
MainPage.AddTip (showTipText);
}
});
}
}
}
}
Application.RunOnMainThread (() => {
MainPage.Loading.Hide ();
});
});
}
///
/// 通过设备类型方式选择设备
///
public void ShowAllRoomLights ()
{
#region 标题
var topView = new FrameLayout () {
Y = Application.GetRealHeight(36),
Height = Application.GetRealHeight (90),
};
AddChidren (topView);
var title = new Button () {
TextAlignment = TextAlignment.Center,
Text = Language.StringByID (R.MyInternationalizationString.ElectricalControl),
TextSize = 19,
TextColor = SkinStyle.Current.TextColor1,
};
topView.AddChidren (title);
var logo = new Button () {
Width = Application.GetRealWidth (154),
Height = Application.GetRealHeight (90),
X = Application.GetRealWidth (486),
UnSelectedImagePath = MainPage.LogoString,
};
topView.AddChidren (logo);
var back = new Button () {
Height = Application.GetRealHeight (90),
Width = Application.GetRealWidth (85),
UnSelectedImagePath = "Item/Back.png",
SelectedImagePath = "Item/BackSelected.png",
};
topView.AddChidren (back);
back.MouseUpEventHandler += (sender, e) => {
(Parent as PageLayout).PageIndex -= 1;
if (readEnergyThead != null)
readEnergyThead.Abort ();
curView = null;
};
#endregion
#region 全开-全关
var powerView = new FrameLayout () {
Height = Application.GetRealHeight (110),
BackgroundColor = SkinStyle.Current.TitileView,
Y = topView.Bottom
};
AddChidren (powerView);
var btnAllON = new Button () {
Width = Application.GetRealWidth (320),
TextSize = 16,
TextID = R.MyInternationalizationString.ALLON,
TextColor = SkinStyle.Current.TextColor1,
SelectedTextColor = SkinStyle.Current.SelectedColor,
};
powerView.AddChidren (btnAllON);
var btnAllOff = new Button () {
Width = Application.GetRealWidth (320),
X = btnAllON.Right,
TextSize = 16,
TextID = R.MyInternationalizationString.ALLOFF,
TextColor = SkinStyle.Current.TextColor1,
SelectedTextColor = SkinStyle.Current.SelectedColor,
};
var btnLine = new Button () {
Width = 1,
BackgroundColor = SkinStyle.Current.White20Transparent,
X = btnAllON.Right,
Y = 1,
};
powerView.AddChidren (btnLine);
btnAllON.MouseUpEventHandler += (sender, e) => {
btnAllON.TextColor = SkinStyle.Current.SelectedColor;
btnAllOff.TextColor = SkinStyle.Current.TextColor1;
Alert alert = new Alert (Language.StringByID (R.MyInternationalizationString.Tip),
Language.StringByID (R.MyInternationalizationString.SureOpenAllSocket),
Language.StringByID (R.MyInternationalizationString.Cancel),
Language.StringByID (R.MyInternationalizationString.Confrim));
alert.Show ();
alert.ResultEventHandler += (sender2, e2) => {
if (e2) {
controlAllLight (100);
}
};
};
powerView.AddChidren (btnAllOff);
btnAllOff.MouseUpEventHandler += (sender, e) => {
btnAllON.TextColor = SkinStyle.Current.TextColor1;
btnAllOff.TextColor = SkinStyle.Current.SelectedColor;
Alert alert = new Alert (Language.StringByID (R.MyInternationalizationString.Tip),
Language.StringByID (R.MyInternationalizationString.SureCloseAllSocket),
Language.StringByID (R.MyInternationalizationString.Cancel),
Language.StringByID (R.MyInternationalizationString.Confrim));
alert.Show ();
alert.ResultEventHandler += (sender2, e2) => {
if (e2) {
controlAllLight (0);
}
};
};
#endregion
bodyScrolView = new VerticalScrolViewLayout () {
Height = Application.GetRealHeight (Application.DesignHeight - 126 - 110),
Y = powerView.Bottom,
BackgroundColor = SkinStyle.Current.ViewColor
};
AddChidren (bodyScrolView);
updateLigthOnCount ();
#region 显示全部的灯光
int LightCount = 0;
foreach (var room in Room.Lists) {
if (string.IsNullOrEmpty(room.Name)) {
continue;
}
foreach (var common in room.DeviceList) {
if (common.Type == DeviceType.LightSwitchSocket || common.Type == DeviceType.LightEnergySwitch) {
LightCount++;
var light = common as LightSwitch;
var lightView = new FrameLayout () {
Height = Application.GetRealHeight (130),
Tag = common.CommonLoopID
};
bodyScrolView.AddChidren (lightView);
//灯名
var tempDeviceName = new Button () {
X = Application.GetRealWidth (20),
TextAlignment = TextAlignment.CenterLeft,
Text = room.Name + "-" + light.Name,
TextColor = SkinStyle.Current.TextColor1,
SelectedTextColor = SkinStyle.Current.TextColor1,
Enable = false,
};
lightView.AddChidren (tempDeviceName);
var tempSiwtch = new Button () {
Width = Application.GetMinRealAverage (90),
Height = Application.GetMinRealAverage (53),
X = Application.GetRealWidth (640 - 90 - 20),
Gravity = Gravity.CenterVertical,
UnSelectedImagePath = "Item/SwitchClose.png",
SelectedImagePath = "Item/SwitchOpen.png",
IsSelected = light.CurrentBrightness == 100 ? true : false
};
lightView.AddChidren (tempSiwtch);
tempSiwtch.MouseUpEventHandler += (sender3, e3) => {
tempSiwtch.IsSelected = !tempSiwtch.IsSelected;
if (tempSiwtch.IsSelected) {
light.CurrentBrightness = 100;
} else {
light.CurrentBrightness = 0;
}
Control.ControlBytesSend (Command.SetSingleLight, light.SubnetID, light.DeviceID, new byte [] { light.LoopID, light.CurrentBrightness, light.DelayTimeHeight, light.DelayTimeLow });
};
if (light.CurrentBrightness == 100) {
tempSiwtch.IsSelected = true;
}
if (common.Type == DeviceType.LightEnergySwitch) {
Button btnEnergy = new Button () {
Width = Application.GetRealWidth (90),
Height = Application.GetRealHeight (30),
X = tempSiwtch.X,
Y = tempSiwtch.Bottom,
TextColor = SkinStyle.Current.TextColor1,
Tag = DeviceType.LightEnergySwitch.ToString (),
Text = "0 W"
};
lightView.AddChidren (btnEnergy);
EnergtLightList.Add (common);
}
Button btnEnergyNull = new Button () {
Y = Application.GetRealHeight (127),
Height = Application.GetRealHeight (3),
BackgroundColor = SkinStyle.Current.MainColor,
SelectedBackgroundColor = SkinStyle.Current.MainColor,
};
lightView.AddChidren (btnEnergyNull);
}
}
}
readEnergyThead = new Thread ((obj) => {
while (true) {
foreach (var c in EnergtLightList) {
Control.ControlBytesSend (Command.ReadAnalogValue, c.SubnetID, c.DeviceID, new byte [] { 10, c.LoopID }, SendCount.Zero);
}
System.Threading.Thread.Sleep (10000);
}
});
readEnergyThead.Start ();
#endregion
}
static System.Threading.Thread thread;
///
/// 读取设备状态
///
public static void readAllStatus (bool isRead = false)
{
if (isRead) {
foreach (Room room in Room.Lists) {
if (room == null) {
continue;
}
var list = room.DeviceList.FindAll ((obj) => {
return obj.Type == DeviceType.LightSwitchSocket;
});
foreach (Common common in list) {
common.LastUpdateTime = DateTime.MinValue;
}
}
}
if (thread != null) {
thread.Abort ();
}
thread = new Thread (() => {
try {
System.Collections.Generic.List readList = new System.Collections.Generic.List ();
foreach (Room room in Room.Lists) {
if (room == null) {
continue;
}
var list = room.DeviceList.FindAll ((obj) => {
return obj.LastUpdateTime.AddMinutes (Common.Time) <= DateTime.Now && obj.Type == DeviceType.LightSwitchSocket;
});
foreach (Common common in list) {
var s = common.Type + "_" + common.SubnetID + "_" + common.DeviceID;
//已经读取过当前设备就不再读取
if (readList.Contains (s)) {
continue;
}
Thread.Sleep (500);
readList.Add (s);
Control.ControlBytesSendHasReturn (Command.ReadLightEquipmentAllLoopBrightness, common.SubnetID, common.DeviceID, new byte [] { });
}
}
} catch (Exception xe) {
Console.WriteLine (xe.Message);
} finally {
thread = null;
}
});
thread.Start ();
}
}
}