using System;
using System.Collections.Generic;
using System.Net;
using System.IO;
using System.Text;
namespace Shared.SimpleControl.Phone
{
public class DoorLockAlarmScene : FrameLayout
{
DoorLock doorLock;
DoorLockSceneTargets sceneTargetsInfo;
Button btn;
public DoorLockAlarmScene (DoorLock doorLock)
{
this.doorLock = doorLock;
BackgroundColor = SkinStyle.Current.MainColor;
}
public int SceneID;//场景类型
public string SceneName = Language.StringByID (R.MyInternationalizationString.NotConfigured);//场景名称
Button btnEditedName;
///
/// 读门锁所有报警场景信息
///
/// Door lock.
public void DoorLockAlarmSceneShow ()
{
#region 标题
var topView = new FrameLayout () {
Height = Application.GetRealHeight (130),
BackgroundColor = SkinStyle.Current.MainColor,
};
AddChidren (topView);
var title = new Button () {
TextAlignment = TextAlignment.Center,
TextID = R.MyInternationalizationString.SceneAlarmSetting,
TextSize = 19,
Y = Application.GetRealHeight (10),
TextColor = SkinStyle.Current.TextColor1,
};
topView.AddChidren (title);
var back = new Button () {
Height = Application.GetRealHeight (90),
Width = Application.GetRealWidth (85),
UnSelectedImagePath = "Item/Back.png",
SelectedImagePath = "Item/BackSelected.png",
Y = Application.GetRealHeight (30),
};
topView.AddChidren (back);
back.MouseUpEventHandler += (sender, e) => {
this.RemoveFromParent ();
};
#endregion
var middleVerticalScrolViewLayout = new VerticalScrolViewLayout () {
Height = Application.GetRealHeight (Application.DesignHeight - 126),
Y = topView.Bottom,
BackgroundColor = SkinStyle.Current.ViewColor,
};
AddChidren (middleVerticalScrolViewLayout);
for (int i = 0; i < 5; i++) {
var RowView = new FrameLayout () {
Height = Application.GetRealHeight (110),
};
middleVerticalScrolViewLayout.AddChidren (RowView);
var btnIcon = new Button () {
Width = Application.GetRealHeight (13),
Height = Application.GetRealHeight (13),
X = Application.GetRealWidth (40),
UnSelectedImagePath = "Item/Point.png",
SelectedImagePath = "Item/PointSelected.png",
Gravity = Gravity.CenterVertical,
};
RowView.AddChidren (btnIcon);
var sceneAlarmType = new Button () {
X = btnIcon.Right + Application.GetRealWidth (20),
Width = Application.GetRealWidth (300),
Height = Application.GetRealHeight (110),
TextAlignment = TextAlignment.CenterLeft,
TextColor = SkinStyle.Current.TextColor1,
};
RowView.AddChidren (sceneAlarmType);
var btnSwitch = new Button () {
X = sceneAlarmType.Right + Application.GetRealWidth (145),
Gravity = Gravity.CenterVertical,
Width = Application.GetMinRealAverage (90),
Height = Application.GetMinRealAverage (53),
UnSelectedImagePath = "Item/SwitchClose.png",
SelectedImagePath = "Item/SwitchOpen.png",
};
RowView.AddChidren (btnSwitch);
if (i == 0) {
sceneAlarmType.TextID = R.MyInternationalizationString.DoorUncloseAlarm;
} else if (i == 1) {
sceneAlarmType.TextID = R.MyInternationalizationString.LowVoltageAlarm;
} else if (i == 2) {
sceneAlarmType.TextID = R.MyInternationalizationString.ErrorAlarm;
} else if (i == 3) {
sceneAlarmType.TextID = R.MyInternationalizationString.KeyUnlockAlarm;
} else if (i == 4) {
sceneAlarmType.TextID = R.MyInternationalizationString.TamperResistantAlarm;
}
btn = new Button () {
Y = RowView.Height - 1,
Height = 1,
BackgroundColor = SkinStyle.Current.LineColor,
};
RowView.AddChidren (btn);
int sceneType = 0;//当前场景类型
string alarmMessage = null;
int currentTypeIndex = i;
if (currentTypeIndex == 0) {
sceneType = 0x02;
alarmMessage = Language.StringByID (R.MyInternationalizationString.DoorUncloseAlarm);
} else if (currentTypeIndex == 1) {
sceneType = 0x03;
alarmMessage = Language.StringByID (R.MyInternationalizationString.LowVoltageAlarm);
} else if (currentTypeIndex == 2) {
sceneType = 0x04;
alarmMessage = Language.StringByID (R.MyInternationalizationString.ErrorAlarm);
} else if (currentTypeIndex == 3) {
sceneType = 0x05;
alarmMessage = Language.StringByID (R.MyInternationalizationString.KeyUnlockAlarm);
} else if (currentTypeIndex == 4) {
sceneType = 0x06;
alarmMessage = Language.StringByID (R.MyInternationalizationString.TamperResistantAlarm);
}
int alarmID = currentTypeIndex;
readStatus ((obj) => {
Application.RunOnMainThread (() => {
if (obj) {
btnSwitch.IsSelected = true;
} else {
btnSwitch.IsSelected = false;
}
});
},sceneType);
EventHandler eHandler = (sender, e) => {
btnSwitch.IsSelected = !btnSwitch.IsSelected;
if (btnSwitch.IsSelected) {
var alert = new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.SureToOpenAlarmNotice), Language.StringByID (R.MyInternationalizationString.Cancel), Language.StringByID (R.MyInternationalizationString.Confrim));
alert.ResultEventHandler += (sender1, e1) => {
if (e1) {
System.Threading.Tasks.Task.Run (() => {
var sendBytes = new byte [12];
sendBytes [0] = doorLock.PhysicsLoopID;
sendBytes [1] = 2;//报警
sendBytes [2] = (byte)sceneType;
sendBytes [3] = 0;//用户ID
sendBytes [4] = 0;
sendBytes [5] = 0x58;
sendBytes [6] = doorLock.SubnetID;
sendBytes [7] = 0;
sendBytes [8] = (byte)(alarmID + 210);//密码10以下,指纹ID+10,感应卡id+100
sendBytes [9] = 0;
sendBytes [10] = 0;
sendBytes [11] = 0;
var result = Control.ControlBytesSendHasReturn (Command.SetDoorLockSceneObj, doorLock.SubnetID, doorLock.DeviceID, sendBytes);
if (result == null) {
Application.RunOnMainThread (() => {
new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.TipEquipmentNotOnline), Direction = AMPopTipDirection.Down, CloseTime = 2 }.Show (btnSwitch);
});
return;
} else {
var result1 = result [0];
if (result1 == 0xF8) {
Application.RunOnMainThread (() => {
new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.OpenDoorLockNotificationsSuccessfully), Direction = AMPopTipDirection.Down, CloseTime = 1 }.Show (btnSwitch);
});
NoticePushServer (alarmMessage, alarmID, btnSwitch );
} else {
Application.RunOnMainThread (() => {
new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.OpenDoorLockNotificationsUnSuccessfully), Direction = AMPopTipDirection.Down, CloseTime = 2 }.Show (btnSwitch);
});
btnSwitch.IsSelected = false;
}
}
});
}
};
alert.Show ();
} else {
var alert = new Alert (Language.StringByID (R.MyInternationalizationString.Tip), Language.StringByID (R.MyInternationalizationString.SureToCloseAlarmNotice), Language.StringByID (R.MyInternationalizationString.Cancel), Language.StringByID (R.MyInternationalizationString.Confrim));
alert.ResultEventHandler += (sender1, e1) => {
if (e1) {
System.Threading.Tasks.Task.Run (() => {
var sendBytes = new byte [12];
sendBytes [0] = doorLock.PhysicsLoopID;
sendBytes [1] = 2;//报警
sendBytes [2] = (byte)sceneType;
sendBytes [3] = 0;//用户ID
sendBytes [4] = 0;
sendBytes [5] = 0;
sendBytes [6] = doorLock.SubnetID;
sendBytes [7] = 0;
sendBytes [8] = (byte)(alarmID + 210);//密码10以下,指纹ID+10,感应卡id+100
sendBytes [9] = 0;
sendBytes [10] = 0;
sendBytes [11] = 0;
var result = Control.ControlBytesSendHasReturn (Command.SetDoorLockSceneObj, doorLock.SubnetID, doorLock.DeviceID, sendBytes);
if (result == null) {
Application.RunOnMainThread (() => {
new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.TipEquipmentNotOnline), Direction = AMPopTipDirection.Down, CloseTime = 2 }.Show (btnSwitch);
});
return;
} else {
var result1 = result [0];
if (result1 == 0xF8) {
Application.RunOnMainThread (() => {
new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.CloseDoorLockNotificationsSuccessfully), Direction = AMPopTipDirection.Down, CloseTime = 2 }.Show (btnSwitch);
});
} else {
Application.RunOnMainThread (() => {
new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.CloseDoorLockNotificationsUnSuccessfully), Direction = AMPopTipDirection.Down, CloseTime = 2 }.Show (btnSwitch);
});
btnSwitch.IsSelected = true;
}
}
});
}
};
alert.Show ();
}
};
btnSwitch.MouseUpEventHandler += eHandler;
}
}
public void readStatus (Action action,int type)
{
System.Threading.Tasks.Task.Run (() => {
var sceneTargetInfoBytes = Control.ControlBytesSendHasReturn (Command.ReadDoorLockSceneObj, doorLock.SubnetID, doorLock.DeviceID, new byte [] { doorLock.PhysicsLoopID, 2, (byte)type, 0, 0 });
if (sceneTargetInfoBytes == null) {
action (false);
} else {
var sceneTargetsInfo = new DoorLockSceneTargets ();
sceneTargetsInfo.TargetSerialNum = sceneTargetInfoBytes [4];
sceneTargetsInfo.ControlType = sceneTargetInfoBytes [5];//通用开关0x58,无效0
sceneTargetsInfo.TargetSunbetID = sceneTargetInfoBytes [6];
sceneTargetsInfo.TargetDeviceID = sceneTargetInfoBytes [7];
sceneTargetsInfo.TargetLoopID = sceneTargetInfoBytes [8];
var command = sceneTargetInfoBytes [5];
if (sceneTargetsInfo.TargetSunbetID == doorLock.SubnetID &&
sceneTargetsInfo.TargetDeviceID == 0 &&
command == 0x58) {
action (true);
} else {
action (false);
}
}
});
}
///
/// 服务器请求
///
/// The web.
/// URL.
/// Data.
string requestWeb (string data)
{
var webClient = new WebClient { };
webClient.Headers.Remove ("ContentType");
webClient.Headers.Add ("ContentType", "application/json");
var bytes = webClient.UploadData ("https://developer.hdlcontrol.com/api/AddPushMessage", "POST", Encoding.UTF8.GetBytes (data));
if (bytes == null) {
return null;
} else {
return Encoding.UTF8.GetString (bytes);
}
}
public static string messageJson (PushMessageEntity pushMessage)
{
if (pushMessage == null) {
return null;
}
return Newtonsoft.Json.JsonConvert.SerializeObject (pushMessage);
}
///
/// 消息推送到服务器
///
/// Message.
public async void NoticePushServer (string message,int alarmID,Button btnSwitch)
{
string result = null;
await System.Threading.Tasks.Task.Run (() => {
//获取一端口交换机的mac
var gateWayString = CommonPage.MyEncodingUTF8.GetString (IO.FileUtils.ReadFile (UserConfig.Instance.RemoteModeFile));
if (gateWayString == null || UserConfig.Instance.RemoteModeFile.Split ('_').Length < 2) {
result = Language.StringByID (R.MyInternationalizationString.NoGateway);
return;
}
var common = Newtonsoft.Json.JsonConvert.DeserializeObject (gateWayString);
if (common == null) {
result = Language.StringByID (R.MyInternationalizationString.NoGateway);
return;
}
string mac = null;
if (common.Type == DeviceType.OnePortWirelessFR) {
var gateWay = Newtonsoft.Json.JsonConvert.DeserializeObject (gateWayString);
mac = gateWay.MAC.Replace (".", "");
} else if (common.Type == DeviceType.OnePortBus) {
var gateWay = Newtonsoft.Json.JsonConvert.DeserializeObject (gateWayString);
mac = gateWay.MAC.Replace (".", "");
} else {
result = Language.StringByID (R.MyInternationalizationString.NoGateway);
return;
}
var pushMessage = new PushMessageEntity ();
pushMessage.Mac = mac;
pushMessage.SubnetID = doorLock.SubnetID;
pushMessage.DeviceID = doorLock.DeviceID;
pushMessage.SwitchNum = alarmID + 210;
pushMessage.MessageMode = 1;
pushMessage.AlarmEmail = new byte [] { 2 };
pushMessage.DetailMessage = message;
var mess = messageJson (pushMessage);
try {
var recevieResult = requestWeb (mess);
var obj = Newtonsoft.Json.JsonConvert.DeserializeObject (recevieResult);
if (obj.StateCode == "SUCCESS") {
Application.RunOnMainThread (() => {
new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.SynchronousNotificationsSuccessfully), Direction = AMPopTipDirection.Down, CloseTime = 2 }.Show (btn);
});
} else {
Application.RunOnMainThread (() => {
new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.SynchronousNotificationsUnsuccessfully), Direction = AMPopTipDirection.Down, CloseTime = 2 }.Show (btn);
//btnSwitch.IsSelected = false;跟服务器状态没有关系,这里状态是有发到门锁的数据确定
});
}
} catch (Exception ex) {
Application.RunOnMainThread (() => {
new Tip () { MaxWidth = 150, Text = Language.StringByID (R.MyInternationalizationString.SynchronousNotificationsUnsuccessfully), Direction = AMPopTipDirection.Down, CloseTime = 2 }.Show (btn);
});
}
});
if (result != null) {
Application.RunOnMainThread (() => {
new Tip () { MaxWidth = 150, Text = result, Direction = AMPopTipDirection.Down, CloseTime = 2 }.Show (btn);
});
}
}
}
}