using System;
|
using Shared;
|
using Shared.SimpleControl.R;
|
using System.Collections.Generic;
|
using Shared.SimpleControl.Phone;
|
using Shared.SimpleControl;
|
using Newtonsoft.Json.Linq;
|
|
|
namespace SuperGateWay
|
{
|
public class ScenePage : FrameLayout
|
{
|
|
|
VerticalScrolViewLayout addscenelView;
|
FrameLayout LongPressFrameLayout = new FrameLayout ();
|
Button beforeClickButton = new Button ();
|
|
Button btnlogiclist;
|
/// <summary>
|
/// 场景按键
|
/// </summary>
|
Button btnscenelist;
|
GateWay gateWay;
|
public static bool isScene;
|
public static byte SubnetID;
|
public static byte DeviceID;
|
|
public void Show (GateWay superGateWay)
|
{
|
//Shared.IO.FileUtils.DeleteFile ("SceneListFilePath");
|
//var s = System.Text.Encoding.UTF8.GetString (Shared.IO.FileUtils.ReadFile ("SceneListFilePath"));
|
//var SceneList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>> (s);
|
|
|
this.BackgroundColor = 0xFF1F1F1F;
|
this.gateWay = superGateWay;
|
|
#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 (MyInternationalizationString.gateway),
|
TextSize = 19,
|
};
|
topView.AddChidren (title);
|
|
var btnadd = new Button {
|
X = Application.GetRealWidth (640 - 106),
|
Width = Application.GetRealWidth (80),
|
Height = Application.GetRealHeight (60),
|
UnSelectedImagePath = "MusicIcon/add.png",
|
//UnSelectedImagePath = "Logo/Logo.png",
|
Gravity = Gravity.CenterVertical,
|
};
|
topView.AddChidren (btnadd);
|
|
var back = new Button () {
|
Height = Application.GetRealHeight (100),
|
Width = Application.GetRealWidth (85),
|
UnSelectedImagePath = "Item/Back.png",
|
SelectedImagePath = "Item/BackSelected.png",
|
Gravity = Gravity.CenterVertical,
|
};
|
topView.AddChidren (back);
|
back.MouseUpEventHandler += (sender, e) => {
|
RemoveFromParent ();
|
};
|
|
var btnl = new Button () {
|
Height = 1,
|
BackgroundColor = 0xFF2F2F2F,
|
Y = topView.Height - 1
|
};
|
topView.AddChidren (btnl);
|
#endregion
|
|
#region titelView
|
var TitleView = new FrameLayout {
|
Height = Application.GetRealHeight (110),
|
BackgroundColor = 0xff0f0f0f,
|
Y = topView.Bottom,
|
};
|
AddChidren (TitleView);
|
///场景列表
|
btnscenelist = new Button () {
|
Width = Application.GetRealWidth (320),
|
TextSize = 16,
|
TextColor = 0xFFEB642C,
|
Text = Language.StringByID (MyInternationalizationString.SceneList),
|
};
|
TitleView.AddChidren (btnscenelist);
|
///逻辑列表
|
btnlogiclist = new Button () {
|
Width = Application.GetRealWidth (320),
|
X = btnscenelist.Right,
|
TextSize = 16,
|
//SelectedTextColor = 0xFFEB642C,
|
//TextColor =0xFFEB642C,
|
Text = Language.StringByID (MyInternationalizationString.LogicList),
|
};
|
TitleView.AddChidren (btnlogiclist);
|
|
var btnLine = new Button {
|
Width = 1,
|
BackgroundColor = 0xFF2D2D2D,
|
X = btnscenelist.Right,
|
};
|
TitleView.AddChidren (btnLine);
|
|
var btnLine1 = new Button {
|
Height = 1,
|
Y = TitleView.Height - 1,
|
BackgroundColor = 0xFF2D2D2D,
|
};
|
TitleView.AddChidren (btnLine1);
|
#endregion
|
|
var fra = new VerticalScrolViewLayout {
|
Width = LayoutParams.MatchParent,
|
Height = Application.GetRealHeight (Application.DesignHeight - 80) - TitleView.Bottom,
|
Y = TitleView.Bottom,
|
BackgroundColor = 0xff2F2F2F,
|
};
|
AddChidren (fra);
|
addscenelView = new VerticalScrolViewLayout ();
|
fra.AddChidren (addscenelView);
|
|
var refreshfl = new FrameLayout {
|
Height = Application.GetRealHeight (80),
|
Y = fra.Bottom,
|
};
|
AddChidren (refreshfl);
|
///更新场景
|
var btnrefresscene = new Button {
|
TextSize = 16,
|
Text = Language.StringByID (MyInternationalizationString.UpdateScene),
|
};
|
refreshfl.AddChidren (btnrefresscene);
|
|
var ther = new Button () {
|
BackgroundColor = 0xFFD7D7D7,
|
Height = Application.GetRealHeight (2),
|
};
|
//refreshfl.AddChidren (ther);
|
|
if (!isScene) {
|
|
var scenestring = System.Text.Encoding.UTF8.GetString (Shared.IO.FileUtils.ReadFile ("SceneListFilePath"));
|
var SceneList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Scene>> (scenestring);
|
if (SceneList != null) {
|
for (int i = 0; i < SceneList.Count; i++) {
|
var sidvalue = SceneList [i];
|
sidvalue.SidToDevice ();
|
}
|
}
|
if (gateWay.Scenes.Count == 0) {
|
if (SceneList == null) {
|
addscenelView.RemoveAll ();
|
refreshscenelist (() => {
|
addview ();
|
});
|
} else {
|
gateWay.Scenes.Clear ();
|
gateWay.Scenes = SceneList;
|
MainPage.Loading.Start (Language.StringByID (MyInternationalizationString.load));
|
System.Threading.Tasks.Task.Run (() => {
|
Application.RunOnMainThread (() => {
|
MainPage.Loading.Hide ();
|
addview ();
|
});
|
});
|
}
|
} else {
|
MainPage.Loading.Start (Language.StringByID (MyInternationalizationString.load));
|
System.Threading.Tasks.Task.Run (() => {
|
Application.RunOnMainThread (() => {
|
MainPage.Loading.Hide ();
|
addview ();
|
});
|
});
|
}
|
} else {
|
addlogicview ();
|
btnlogiclist.TextColor = 0xFFEB642C;
|
btnscenelist.TextColor = 0xFFFFFFFF;
|
btnrefresscene.Text = Language.StringByID (MyInternationalizationString.Updatelogic);
|
}
|
|
//场景列表
|
btnscenelist.MouseUpEventHandler += (sender, e) => {
|
isScene = false;
|
addscenelView.RemoveAll ();
|
btnscenelist.TextColor = 0xFFEB642C;
|
btnlogiclist.TextColor = 0xFFFFFFFF;
|
btnrefresscene.Text = Language.StringByID (MyInternationalizationString.UpdateScene);
|
MainPage.Loading.Start (Language.StringByID (MyInternationalizationString.load));
|
System.Threading.Tasks.Task.Run (() => {
|
Application.RunOnMainThread (() => {
|
MainPage.Loading.Hide ();
|
addview ();
|
});
|
});
|
|
};
|
//逻辑列表
|
btnlogiclist.MouseUpEventHandler += (sender, e) => {
|
var logicstring = System.Text.Encoding.UTF8.GetString (Shared.IO.FileUtils.ReadFile ("LogicListFilePath"));
|
var LogicList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Logic>> (logicstring);
|
|
isScene = true;
|
addscenelView.RemoveAll ();
|
btnlogiclist.TextColor = 0xFFEB642C;
|
btnscenelist.TextColor = 0xFFFFFFFF;
|
btnrefresscene.Text = Language.StringByID (MyInternationalizationString.Updatelogic);
|
if (gateWay.Logics.Count == 0) {
|
///读取逻辑列表的方法
|
if (LogicList == null) {
|
refreshlogiclist (() => {
|
addlogicview ();
|
});
|
} else {
|
gateWay.Logics.Clear ();
|
gateWay.Logics = LogicList;
|
MainPage.Loading.Start (Language.StringByID (MyInternationalizationString.load));
|
System.Threading.Tasks.Task.Run (() => {
|
Application.RunOnMainThread (() => {
|
MainPage.Loading.Hide ();
|
addlogicview ();
|
});
|
});
|
|
}
|
} else {
|
MainPage.Loading.Start (Language.StringByID (MyInternationalizationString.load));
|
System.Threading.Tasks.Task.Run (() => {
|
Application.RunOnMainThread (() => {
|
MainPage.Loading.Hide ();
|
addlogicview ();
|
});
|
});
|
}
|
};
|
|
///更新(场景/逻辑)点击事件
|
btnrefresscene.MouseUpEventHandler += (sender, e) => {
|
addscenelView.RemoveAll ();
|
if (!isScene) {
|
refreshscenelist (() => {
|
addview ();
|
});
|
} else {
|
refreshlogiclist (() => {
|
addlogicview ();
|
});
|
}
|
};
|
///新添加(场景/逻辑)点击事件
|
btnadd.MouseUpEventHandler += (sender, e) => {
|
if (!isScene) {
|
ScenePhoneMethod.AddOrUpdataSuperGateWaySceneBaseMassage (gateWay, null, () => {
|
addview ();
|
});
|
} else {
|
//gateWay.Tag = "View";
|
Logic.CurrentLogic = new Logic ();
|
var addLogicPage = new AddLogicPage ();
|
MainPage.MainFrameLayout.AddChidren (addLogicPage);
|
addLogicPage.Show (superGateWay);
|
|
}
|
};
|
}
|
|
/// <summary>
|
/// 加载场景界面的方法
|
/// </summary>
|
void addview ()
|
{
|
|
addscenelView.RemoveAll ();
|
FrameLayout scenesRowView = null;
|
var list = new List<Scene> (gateWay.Scenes);
|
//默认在最后增加添加场景的图标
|
for (int i = 0; i < list.Count; i++) {
|
var scene = list [i];
|
if (i % 2 == 0) {
|
scenesRowView = new FrameLayout {
|
Height = Application.GetRealHeight (250),
|
};
|
addscenelView.AddChidren (scenesRowView);
|
}
|
var sceneView = new FrameLayout {
|
Width = Application.GetRealWidth (320),
|
BackgroundImagePath = scene.BackgoundImagePath,
|
//BackgroundImagePath = Shared.IO.FileUtils.Exists ("Image_SuperGateWayScene_" + scene.sid) ? "Image_SuperGateWayScene_" + scene.sid : scene.BackgoundImagePath,
|
};
|
scenesRowView.AddChidren (sceneView);
|
|
if (i % 2 == 1) {
|
sceneView.X = Application.GetRealWidth (320);
|
}
|
|
var btnSceneName = new Button {
|
Height = Application.GetRealHeight (40),
|
Y = Application.GetRealHeight (210),
|
BackgroundColor = SkinStyle.Current.Black50Transparent,
|
};
|
sceneView.AddChidren (btnSceneName);
|
|
var btnBGC = new Button {
|
UnSelectedImagePath = "Item/nextbutton.png",
|
SelectedImagePath = "Item/SceneSettingBackground.png",
|
TextAlignment = TextAlignment.BottomCenter,
|
Text = scene.name,
|
TextColor = 0xffffffff,
|
TextSize = 15,
|
};
|
sceneView.AddChidren (btnBGC);
|
|
btnBGC.MouseLongEventHandler += (sender, e) => {
|
if (string.IsNullOrEmpty (scene.name))
|
return;
|
beforeClickButton.IsSelected = false;
|
LongPressFrameLayout.RemoveFromParent ();
|
LongPressFrameLayout = new FrameLayout {
|
BackgroundImagePath = "Item/SceneSettingBackground.png",
|
};
|
sceneView.AddChidren (LongPressFrameLayout);
|
LongPressFrameLayout.MouseUpEventHandler += (sender2, e2) => {
|
LongPressFrameLayout.RemoveFromParent ();
|
};
|
|
var btnEditor = new Button {
|
Width = Application.GetRealWidth (70),
|
Height = Application.GetRealHeight (76),
|
UnSelectedImagePath = "Item/UserSceneEditIcon.png",
|
X = Application.GetRealWidth (220),
|
Y = Application.GetRealHeight (13),
|
};
|
LongPressFrameLayout.AddChidren (btnEditor);
|
btnEditor.MouseUpEventHandler += (sender1, e1) => {
|
LongPressFrameLayout.RemoveFromParent ();
|
var gatewayAddDevice = new GatewayAddDevice ();
|
MainPage.MainFrameLayout.AddChidren (gatewayAddDevice);
|
gatewayAddDevice.Show (gateWay, scene, () => {
|
btnBGC.Text = scene.name;
|
sceneView.BackgroundImagePath = scene.BackgoundImagePath;
|
});
|
};
|
|
var btnDel = new Button () {
|
Width = Application.GetRealWidth (70),
|
Height = Application.GetRealHeight (76),
|
UnSelectedImagePath = "Item/UserSceneDelIcon.png",
|
X = Application.GetRealWidth (40),
|
Y = Application.GetRealHeight (20),
|
};
|
LongPressFrameLayout.AddChidren (btnDel);
|
btnDel.MouseUpEventHandler += (senderDel, eDel) => {
|
//var alert = new Alert (Language.StringByID (MyInternationalizationString.prompt), Language.StringByID (MyInternationalizationString.DissolvedGroup),
|
// Language.StringByID (MyInternationalizationString.cancel), Language.StringByID (MyInternationalizationString.confirm));
|
//alert.ResultEventHandler += (sender1, e1) => {
|
// if (e1) { }
|
//};
|
gateWay.Scenes.Remove (scene);
|
addview ();
|
Control.DeleteScene (scene);
|
gateWay.save ("SceneListFilePath");
|
|
};
|
};
|
|
btnBGC.MouseUpEventHandler += (sender, e) => {
|
LongPressFrameLayout.RemoveFromParent ();
|
beforeClickButton.IsSelected = false;
|
beforeClickButton = btnBGC;
|
btnBGC.IsSelected = true;
|
Control.ControlScene (scene);
|
};
|
}
|
}
|
|
/// <summary>
|
/// 获取场景列表以及场景设备信息
|
/// </summary>
|
async void refreshscenelist (Action action)
|
{
|
gateWay.Scenes.Clear ();
|
MainPage.Loading.Start ();
|
await System.Threading.Tasks.Task.Run (() => {
|
try {
|
var tempList = Control.getSceneList ();
|
if (tempList == null) {
|
return;
|
}
|
var array = tempList.ToArray ();
|
Array.Sort (array);
|
foreach (var uid in array) {
|
try {
|
var result = Control.getSceneByUID (uid.Replace (".json", ""));
|
if (result == null) {
|
|
continue;
|
}
|
var scene = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene> (result);
|
|
if (scene != null) {
|
var dev= gateWay.Scenes.Find ((obj)=> { return obj.uid == scene.uid; });
|
if (dev == null) {
|
scene.SidToDevice ();
|
gateWay.Scenes.Add (scene);
|
gateWay.save ("SceneListFilePath");
|
}
|
|
}
|
|
} catch { }
|
}
|
} catch { }
|
});
|
MainPage.Loading.Hide ();
|
action ();
|
|
}
|
|
/// <summary>
|
/// 加载逻辑界面的方法
|
/// </summary>
|
void addlogicview ()
|
{
|
addscenelView.RemoveAll ();
|
foreach (var logic in gateWay.Logics) {
|
var logicrowlayout = new RowLayout {
|
Height = Application.GetRealHeight (100),
|
};
|
addscenelView.AddChidren (logicrowlayout);
|
|
var btnname = new Button {
|
//Text = "逻辑一",
|
Text = logic.name,
|
X = Application.GetRealWidth (50),
|
TextAlignment = TextAlignment.CenterLeft,
|
Gravity = Gravity.CenterVertical,
|
};
|
logicrowlayout.AddChidren (btnname);
|
|
var btnswitch = new Button {
|
Width = Application.GetMinRealAverage (90),
|
Height = Application.GetMinRealAverage (53),
|
UnSelectedImagePath = "Item/SwitchClose.png",
|
SelectedImagePath = "Item/SwitchOpen.png",
|
X = Application.GetRealWidth (520),
|
Gravity = Gravity.CenterVertical,
|
};
|
logicrowlayout.AddChidren (btnswitch);
|
btnswitch.MouseUpEventHandler += (sender1, e1) => {
|
btnswitch.IsSelected = !btnswitch.IsSelected;
|
if (btnswitch.IsSelected) {
|
//逻辑开
|
control (1, logic);
|
} else {
|
//逻辑关
|
control (0, logic);
|
}
|
};
|
|
if (logic.ByteState != null && logic.ByteState [2] == 1) {
|
btnswitch.IsSelected = true;
|
} else {
|
btnswitch.IsSelected = false;
|
}
|
|
|
var btndelay = new Button {
|
Width = Application.GetRealWidth (150),
|
Height = Application.GetRealHeight (50),
|
X = Application.GetRealWidth (300),
|
Y = Application.GetRealHeight (25),
|
TextAlignment = TextAlignment.Center,
|
TextColor = 0xffcccccc,
|
};
|
logicrowlayout.AddChidren (btndelay);
|
|
///延时控件
|
var btndelaytext = new Button {
|
BackgroundColor = 0xff676767,
|
Text = Language.StringByID (MyInternationalizationString.delayed),
|
};
|
logicrowlayout.AddRightView (btndelaytext);
|
|
if (logic.param.ContainsKey ("delay")) {
|
var delayvalue = logic.param ["delay"]?.ToString ();
|
if (delayvalue != "" && delayvalue != "0") {
|
var l = int.Parse (delayvalue) / 10;
|
btndelay.Text = l.ToString () + "s";
|
}
|
}
|
|
btndelaytext.MouseUpEventHandler += (sender, e) => {
|
|
Dialog window = new Dialog ();
|
window.Show ();
|
|
var frameLayout = new FrameLayout {
|
Width = Application.GetRealWidth (580),
|
Height = Application.GetRealHeight (300),
|
X = Application.GetRealWidth (30),
|
Y = Application.GetRealHeight (330),
|
BackgroundColor = 0xffffffff,
|
};
|
window.AddChidren (frameLayout);
|
|
var Modifyname = new Button {
|
Width = Application.GetRealWidth (580),
|
Height = Application.GetRealHeight (80),
|
TextID = MyInternationalizationString.devicedelaytime,
|
//Text = "请输入设备延时的时间(单位/s)",
|
Y = Application.GetRealHeight (10),
|
TextSize = 16,
|
TextColor = SkinStyle.Current.MusicTipTextColor,
|
};
|
frameLayout.AddChidren (Modifyname);
|
|
var delaytext = new EditText {
|
Width = Application.GetRealWidth (540),
|
Height = Application.GetRealHeight (80),
|
Y = Application.GetRealHeight (80),
|
X = Application.GetRealWidth (20),
|
Gravity = Gravity.CenterVertical,
|
BackgroundColor = SkinStyle.Current.MusicTipBackgroundColor,
|
//TextColor = 0xff000000,
|
Radius = 1,
|
BorderWidth = 1,
|
BorderColor = SkinStyle.Current.MusicEditBorderColor,
|
TextColor = SkinStyle.Current.MusicTextColor,
|
};
|
frameLayout.AddChidren (delaytext);
|
|
var line = new Button {
|
Height = Application.GetRealHeight (2),
|
Y = Application.GetRealHeight (218),
|
BackgroundColor = 0xff666666,
|
};
|
frameLayout.AddChidren (line);
|
|
var cancelrow = new RowLayout {
|
Y = Application.GetRealHeight (220),
|
Height = Application.GetRealHeight (80),
|
Width = Application.GetRealWidth (289),
|
BackgroundColor = 0xffcccccc,
|
};
|
frameLayout.AddChidren (cancelrow);
|
|
var cancel = new Button {
|
TextID = MyInternationalizationString.cancel,
|
//TextColor = 0xff000000,
|
TextSize = 18,
|
TextColor = SkinStyle.Current.MusicTextColor,
|
};
|
cancelrow.AddChidren (cancel);
|
cancel.MouseUpEventHandler += (sender1, e1) => {
|
window.Close ();
|
};
|
|
var ther = new Button {
|
Y = Application.GetRealHeight (220),
|
Height = Application.GetRealHeight (80),
|
Width = Application.GetRealWidth (2),
|
X = Application.GetRealHeight (289),
|
BackgroundColor = 0xff666666,
|
};
|
frameLayout.AddChidren (ther);
|
|
var confirmrow = new RowLayout {
|
Y = Application.GetRealHeight (220),
|
X = Application.GetRealWidth (291),
|
Height = Application.GetRealHeight (80),
|
Width = Application.GetRealWidth (289),
|
BackgroundColor = 0xffcccccc,
|
};
|
frameLayout.AddChidren (confirmrow);
|
|
var confirm = new Button {
|
TextID = MyInternationalizationString.confirm,
|
//TextColor = 0xff000000,
|
TextSize = 18,
|
TextColor = SkinStyle.Current.MusicTextColor,
|
};
|
confirmrow.AddChidren (confirm);
|
|
//if (logic.param.ContainsKey ("delay")) {
|
// var delayvalue = logic.param ["delay"]?.ToString ();
|
// if (delayvalue != "" && delayvalue != "0") {
|
// var l = int.Parse (delayvalue) / 10;
|
// delaytext.Text = l.ToString () + "s";
|
// }
|
//}
|
|
confirm.MouseUpEventHandler += (sender1, e1) => {
|
var isNumber = delaytext.Text.Trim ();
|
if (!int.TryParse (isNumber, out int number) || isNumber == "") {
|
new Alert (Language.StringByID (MyInternationalizationString.Tip),
|
Language.StringByID (MyInternationalizationString.inputnumber),
|
Language.StringByID (MyInternationalizationString.Close)).Show ();
|
return;
|
}
|
|
var vel = int.Parse (isNumber);
|
if (logic.param.ContainsKey ("delay")) {
|
logic.param.Remove ("delay");
|
logic.param.Add ("delay", vel * 10);
|
} else {
|
logic.param.Add ("delay", vel * 10);
|
}
|
btndelay.Text = isNumber + "s";
|
window.Close ();
|
System.Threading.Tasks.Task.Run (() => {
|
Control.modifylogic (logic);
|
Application.RunOnMainThread (() => {
|
addlogicview ();
|
});
|
});
|
|
gateWay.save ("LogicListFilePath");
|
|
};
|
|
};
|
|
///编辑
|
var edit = new Button {
|
//TextID = MyInternationalizationString.Musicdel
|
BackgroundColor = 0xFF253451,
|
Text = Language.StringByID (MyInternationalizationString.edit),
|
};
|
logicrowlayout.AddRightView (edit);
|
edit.MouseUpEventHandler += (sender, e) => {
|
Logic.CurrentLogic = logic;
|
Logic.CurrentLogic.Tag = "true";
|
|
if (gateWay.Commons.Count == 0) {
|
|
var devicestring = System.Text.Encoding.UTF8.GetString (Shared.IO.FileUtils.ReadFile ("DeviceListFilePath"));
|
var DeviceList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SuperGateWayCommon>> (devicestring);
|
if (DeviceList == null) {
|
refreshDeviceList (() => {
|
Application.RunOnMainThread (() => {
|
var logicCommunalPage = new LogicCommunalPage ();
|
MainPage.MainFrameLayout.AddChidren (logicCommunalPage);
|
logicCommunalPage.Show (gateWay, () => { btnname.Text = logic.name; addlogicview (); });
|
});
|
});
|
} else {
|
var logicCommunalPage = new LogicCommunalPage ();
|
MainPage.MainFrameLayout.AddChidren (logicCommunalPage);
|
logicCommunalPage.Show (gateWay, () => { btnname.Text = logic.name; addlogicview (); });
|
}
|
} else {
|
var logicCommunalPage = new LogicCommunalPage ();
|
MainPage.MainFrameLayout.AddChidren (logicCommunalPage);
|
logicCommunalPage.Show (gateWay, () => { btnname.Text = logic.name; addlogicview (); });
|
}
|
};
|
|
|
|
///删除
|
var del = new Button {
|
//TextID = MyInternationalizationString.Musicdel,
|
BackgroundColor = 0xFFFF0000,
|
Text = Language.StringByID (MyInternationalizationString.del),
|
};
|
logicrowlayout.AddRightView (del);
|
del.MouseUpEventHandler += (sender, e) => {
|
gateWay.Logics.Remove (logic);
|
Control.DeleteLogic (logic);
|
gateWay.save ("LogicListFilePath");
|
addlogicview ();
|
|
};
|
}
|
}
|
|
/// <summary>
|
/// 获取逻辑列表
|
/// </summary>
|
async void refreshlogiclist (Action action)
|
{
|
gateWay.Logics.Clear ();
|
MainPage.Loading.Start ();
|
await System.Threading.Tasks.Task.Run (() => {
|
try {
|
var logicuidlist = Control.getLogiclist ();
|
if (logicuidlist == null) {
|
return;
|
}
|
var array = logicuidlist.ToArray ();
|
Array.Sort (array);
|
foreach (var logicuid in array) {
|
try {
|
var result = Control.getLogicByUID (logicuid.Replace (".json", ""));
|
//string result="{\"module\":\"logic\",\"name\":\"logic_name\",\"time\":\"12:25:00-16:25:00\",\"sid\":\"3001550602000003\",\"param\":{\"operator\":\"&&\",\"delay\":\"10\"},\"input\":[{\"sid\":\"1001560306010001\",\"value\":\"1\",\"continue\":\"5\",\"compare\":\"=\"},{\"sid\":\"1001590405010001\",\"value\":\"1\",\"continue\":\"5\",\"compare\":\"=\",\"chinese_calendar\":\"false\"}],\"output\":[{\"objects\":[{\"sid\":\"1001560305000002\",\"value\":\"0\",\"delay\":\"10\"},{\"sid\":\"1001780302000002\",\"value\":\"0\",\"delay\":\"10\"}]},{\"objects\":[{\"sid\":\"1001780302010002\",\"value\":\"1\",\"delay\":\"10\"},{\"sid\":\"1001780305010002\",\"value\":\"1\",\"delay\":\"10\"}]}]}";
|
if (result == null) {
|
continue;
|
}
|
var logicstring = Newtonsoft.Json.JsonConvert.DeserializeObject<Logic> (result);
|
|
if (logicstring != null) {
|
var dev = gateWay.Logics.Find ((obj) => { return obj.sid == logicstring.sid; });
|
if (dev == null) {
|
///加入逻辑列表
|
gateWay.Logics.Add (logicstring);
|
gateWay.save ("LogicListFilePath");
|
///读取逻辑状态(开或关);
|
control (3, logicstring);
|
}
|
}
|
|
} catch (Exception e) {
|
var s = e.Message;
|
}
|
}
|
|
} catch { }
|
});
|
MainPage.Loading.Hide ();
|
action ();
|
}
|
|
/// <summary>
|
/// 读取所有设备列表
|
/// </summary>
|
async void refreshDeviceList (Action action)
|
{
|
gateWay.Commons.Clear ();
|
await System.Threading.Tasks.Task.Run (() => {
|
try {
|
var uidList = Control.GetDevicesUidList ();
|
if (uidList == null) {
|
return;
|
}
|
|
foreach (var uid in uidList) {
|
var result = Control.GetDeviceByUID (uid.Replace (".json", ""));
|
if (result == null) {
|
continue;
|
}
|
var common = Newtonsoft.Json.JsonConvert.DeserializeObject<SuperGateWay.SuperCommon> (result);
|
if (common != null) {
|
foreach (var @object in common.objects) {
|
var functionString = @object ["function"]?.ToString ();
|
if (functionString == null) {
|
continue;
|
}
|
var functions = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Function>> (functionString);
|
if (functions == null) {
|
continue;
|
}
|
foreach (var function in functions) {
|
var device = SuperCommon.GetCommon (function.sid, gateWay);
|
if (device != null) {
|
//前找出当前回路的对象有没有存在
|
var dev = gateWay.Commons.Find ((c) => c.Type == device.Type && c.CommonLoopID == device.CommonLoopID);
|
if (dev == null) {
|
gateWay.Commons.Add (device);
|
if (@object ["name"] != null) {
|
device.Name = @object ["name"]?.ToString ();
|
} else {
|
device.Name = "";
|
}
|
gateWay.save ("DeviceListFilePath");
|
}
|
if (function.sid != null) {
|
device.functions.Add (function);
|
}
|
|
}
|
|
}
|
}
|
}
|
|
}
|
} catch { } finally {
|
Application.RunOnMainThread (() => {
|
action ();
|
});
|
}
|
});
|
}
|
|
|
void control (byte val, Logic logic)
|
{
|
try {
|
if (logic == null || logic.sid == null) {
|
return;
|
}
|
var sidUlong = Convert.ToUInt64 (logic.sid, 16);
|
var zoneId = (byte)((sidUlong >> 40) & 0xFF);
|
var logicId = (byte)((sidUlong >> 32) & 0xFF);
|
|
if (val == 0 || val == 1) {
|
Shared.Control.ControlBytesSend(Command.SetSeries, gateWay.SubnetID, gateWay.DeviceID, new byte [] { zoneId, logicId, val }, SendCount.Three);
|
} else {
|
var stateBytes = Shared.Control.ControlBytesSendHasReturn (Command.LogicstateControl, gateWay.SubnetID, gateWay.DeviceID, new byte [] { zoneId, logicId });
|
if (stateBytes != null) {
|
if (stateBytes [0] == zoneId && stateBytes [1] == logicId) {
|
logic.ByteState = stateBytes;
|
}
|
}
|
}
|
} catch { }
|
|
}
|
}
|
}
|