using System;
using Shared;
using Shared.SimpleControl;
namespace SmartHome
{
public class RemoteOnePort : FrameLayout
{
#region 文本
string text_Title = "远程连接";
string text_userName = "用户名";
string text_projectName ="工程名";
string text_password = "密码";
string text_entry_userName_tip = "请输入组名。";
string text_entry_projectName_tip = "请输入工程名。";
string text_entry_password_tip = "请输入密码。";
string text_link = "连接一端口";
string text_back = "后退";
string text_reading = "读取中";
///
/// 已升级
///
string text_Upgraded = "已升级";
///
/// 正在升级
///
string text_Upgrading = "正在升级";
///
/// 升级失败
///
string text_UpgradeFailed = "升级失败";
///
/// 未知版本
///
string text_UnknownVersion = "其他版本";
///
/// 读取失败
///
string text_readFailure = "读取失败";
string txt_breakLink = "断开连接";
string txt_connectionSucceeded = "连接成功";
string userName = "";
string projectName = "";
string password = "";
#endregion
///
/// 中间界面
///
public VerticalScrolViewLayout contentView;
public VerticalScrolViewLayout infoView;
public VerticalScrolViewLayout listView;
public override void RemoveFromParent ()
{
CommonPage.IsRemote = false;
base.RemoveFromParent ();
}
public RemoteOnePort (string userNameOut, string projectNameOut)
{
userName = userNameOut;
projectName = projectNameOut;
CommonPage.IsRemote = false;
if(Language.CurrentLanguage!= "Chinese") {
text_Title = "Remote connection";
text_userName = "User name";
text_projectName = "Project name";
text_password = "Password";
text_entry_userName_tip = "Please enter the group name.";
text_entry_projectName_tip = "Please enter the project name.";
text_entry_password_tip = "Please input a password.";
text_Upgraded = "Upgraded";
text_Upgrading = "Upgrading";
text_UpgradeFailed = "Upgrade failed";
text_UnknownVersion = "Other version";
text_readFailure = "Read failure";
text_back = "Back";
text_link = "Link";
text_reading = "Reading";
txt_breakLink = "Break link";
txt_connectionSucceeded = "Connection succeeded";
}
}
public void ShowPage()
{
BackgroundColor = SkinStyle.Current.MainColor;
initTop ();
initContentView ();
}
void initTop ()
{
FrameLayout topView = new FrameLayout () {
Height = Application.GetRealHeight (126),
};
AddChidren (topView);
Button NameButton = new Button () {
Width = Application.GetRealWidth (400),
Height = Application.GetMinReal (90),
Text = text_Title,
TextColor = SkinStyle.Current.TextColor1,
Gravity = Gravity.CenterHorizontal,
TextAlignment = TextAlignment.Center,
Y = Application.GetRealHeight (30),
TextSize = 20,
};
topView.AddChidren (NameButton);
var btnBack = new Button () {
X = Application.GetRealWidth (34),
Y = Application.GetRealHeight (30),
Width = Application.GetRealWidth (200),
Height = Application.GetMinReal (90),
TextAlignment = TextAlignment.CenterLeft,
Text = text_back,
TextColor = 0xCC0195F9,
};
topView.AddChidren (btnBack);
btnBack.MouseUpEventHandler = (sender, e) => {
this.RemoveFromParent ();
};
}
void initContentView ()
{
var remoteClient = new SystemRemote ();
contentView = new VerticalScrolViewLayout () {
Y = Application.GetRealHeight (126),
Height = Application.GetRealHeight (1136 - 126),
BackgroundColor = SkinStyle.Current.ViewColor,
ScrollEnabled = false,
};
AddChidren (contentView);
infoView = new VerticalScrolViewLayout () {
Height = Application.GetRealHeight (1136 - 126 - 90),
ScrollEnabled = false,
};
contentView.AddChidren (infoView);
#region
var userNameView = new FrameLayout () {
Height = Application.GetRealHeight (93),
BackgroundColor = SkinStyle.Current.ViewColor,
};
infoView.AddChidren (userNameView);
var btnUserNameTitle = new Button () {
X = Application.GetRealWidth (32),
Text = text_userName,
TextColor = SkinStyle.Current.TextColor1,
};
btnUserNameTitle.Width = btnUserNameTitle.GetTextWidth () + Application.GetRealWidth (30);
userNameView.AddChidren (btnUserNameTitle);
var tvUserName = new Button () {
Width = Application.GetRealWidth (400),
X = btnUserNameTitle.Right,
TextColor = SkinStyle.Current.TextColor1,
TextAlignment = TextAlignment.CenterLeft,
Text = userName,
};
userNameView.AddChidren (tvUserName);
var btnLine = new Button () {
Height = Application.GetRealHeight (1),
BackgroundColor = SkinStyle.Current.LineColor,
};
infoView.AddChidren (btnLine);
#endregion
#region
var projectNameView = new FrameLayout () {
Height = Application.GetRealHeight (93),
BackgroundColor = SkinStyle.Current.ViewColor,
};
infoView.AddChidren (projectNameView);
var btnProjuectNameTitle = new Button () {
X = Application.GetRealWidth (32),
Text = text_projectName,
TextColor = SkinStyle.Current.TextColor1,
};
btnProjuectNameTitle.Width = btnProjuectNameTitle.GetTextWidth () + Application.GetRealWidth (30);
projectNameView.AddChidren (btnProjuectNameTitle);
var tvProjectName = new Button () {
Width = Application.GetRealWidth (400),
X = btnProjuectNameTitle.Right,
TextColor = SkinStyle.Current.TextColor1,
TextAlignment = TextAlignment.CenterLeft,
Text = projectName,
};
projectNameView.AddChidren (tvProjectName);
var btnLine1 = new Button () {
Height = Application.GetRealHeight (1),
BackgroundColor = SkinStyle.Current.LineColor,
};
infoView.AddChidren (btnLine1);
#endregion
#region
var passwrodView = new FrameLayout () {
Height = Application.GetRealHeight (93),
BackgroundColor = SkinStyle.Current.ViewColor,
};
infoView.AddChidren (passwrodView);
var btnPasswordTitle = new Button () {
X = Application.GetRealWidth (32),
Text = text_password,
TextColor = SkinStyle.Current.TextColor1,
};
btnPasswordTitle.Width = btnPasswordTitle.GetTextWidth () + Application.GetRealWidth (30);
passwrodView.AddChidren (btnPasswordTitle);
var tvPassword = new EditText () {
Width = Application.GetRealWidth (400),
X = btnPasswordTitle.Right,
TextColor = SkinStyle.Current.TextColor1,
Foucs = true,
};
passwrodView.AddChidren (tvPassword);
var btnLine2 = new Button () {
Height = Application.GetRealHeight (1),
BackgroundColor = SkinStyle.Current.LineColor,
};
infoView.AddChidren (btnLine2);
#endregion
var rightButton1 = new Button () {
Height = Application.GetRealHeight (93),
TextAlignment = TextAlignment.Center,
};
infoView.AddChidren (rightButton1);
listView = new VerticalScrolViewLayout () {
Height = Application.GetRealHeight (1136 - 126 - 90 - 93 *4),
};
infoView.AddChidren (listView);
//--------------
var btnOption = new Button () {
TextAlignment = TextAlignment.Center,
TextColor = SkinStyle.Current.TextColor1,
BackgroundColor = SkinStyle.Current.MainColor,
Text = CommonPage.IsRemote ? txt_breakLink : text_link,
Height = Application.GetRealHeight (90),
};
contentView.AddChidren (btnOption);
#if DEBUG
//userName = tvUserName.Text = "gs";
//projectName = tvProjectName.Text = "gs";
password = tvPassword.Text = "666666";
#endif
btnOption.MouseUpEventHandler = (sender, e) => {
if (CommonPage.IsRemote) {
remoteClient.LinkRemote (userName, projectName, password, false);
CommonPage.IsRemote = false;
btnOption.Text = text_link;
rightButton1.Text = "";
listView.RemoveAll ();
return;
}
userName = tvUserName.Text.Trim ();
if (string.IsNullOrEmpty (userName)) {
MainPage.AddTip (text_entry_userName_tip);
return;
}
projectName = tvProjectName.Text.Trim ();
if (string.IsNullOrEmpty (projectName)) {
MainPage.AddTip (text_entry_projectName_tip);
return;
}
password = tvPassword.Text.Trim ();
if (string.IsNullOrEmpty (password)) {
MainPage.AddTip (text_entry_password_tip);
return;
}
new System.Threading.Thread (() => {
CommonPage.IsRemote = true;
Application.RunOnMainThread (() => {
MainPage.Loading.Start ();
});
var linkResult = remoteClient.LinkRemote (userName, projectName, password, true);
if (linkResult == "200") {
Application.RunOnMainThread (() => {
MainPage.Loading.Start ();
rightButton1.Text = txt_connectionSucceeded;
rightButton1.TextColor = SkinStyle.Current.TextColor1;
btnOption.Text = txt_breakLink;
});
try {
#region 搜索设备
CommonPage.LocalPhoneFindDevice = true;
CommonPage.RandomHigh = (byte)new Random ().Next (255);
CommonPage.RandomLow = (byte)new Random ().Next (255);
CommonPage.GateWayList.Clear ();
CommonPage.FindGateway = true;
//如果两次都没有数据反馈,就不读取
int readCount = 2;
while (0 < readCount) {
readCount--;
System.IO.MemoryStream ms = new System.IO.MemoryStream ();
ms.WriteByte (CommonPage.RandomHigh);
ms.WriteByte (CommonPage.RandomLow);
var list = CommonPage.GateWayList;
int tempCount = list.Count;
string s = ";";
for (int i = 0; i < list.Count; i++) {
Common common = list [i];
if (s.Contains (";" + common.SubnetID.ToString () + ":" + common.DeviceID.ToString ()))
continue;
s += common.SubnetID.ToString () + ":" + common.DeviceID.ToString () + ";";
ms.WriteByte (common.SubnetID);
ms.WriteByte (common.DeviceID);
}
Console.WriteLine ("搜索网关,搜索地址是:" + CommonPage.EndPoint.ToString () + " " + CommonPage.GateWayList.Count);
Control control = new Control ();
control.Send (new Target () {
IPEndPoint = CommonPage.EndPoint,
Command = Command.ReadGateway,
SubnetID = 0xFF,
DeviceID = 0xFF,
AddData = ms.ToArray ()
}, SendCount.Zero, false);
System.Threading.Thread.Sleep (800);
//如果数量不相等,就重置次数
if (tempCount != CommonPage.GateWayList.Count) {
readCount = 2;
}
}
CommonPage.FindGateway = false;
Application.RunOnMainThread (() => {
ShowGateWayView ();
});
CommonPage.LocalPhoneFindDevice = false;
#endregion
} catch (Exception ex) {
Console.WriteLine (ex.ToString ());
Application.RunOnMainThread (() => {
MainPage.Loading.Hide ();
});
} finally {
}
} else {
CommonPage.IsRemote = false;
Application.RunOnMainThread (() => {
MainPage.Loading.Hide ();
infoView.AddChidren (rightButton1);
rightButton1.Text = linkResult;
rightButton1.TextColor = 0x99ff0000;
});
}
}) { IsBackground = true }.Start ();
};
}
///
/// 显示出已经查找到的网关设备
///
public void ShowGateWayView ()
{
try {
foreach (var gateway in CommonPage.GateWayList) {
MainPage.Loading.Start ();
RowLayout wirelessView = new RowLayout () {
Height = Application.GetRealHeight (93),
BackgroundColor = SkinStyle.Current.ViewColor,
};
listView.AddChidren (wirelessView);
showGatewayRow (gateway, wirelessView);
}
} catch (Exception ex) {
Console.WriteLine (ex.ToString ());
} finally {
Application.RunOnMainThread (() => {
MainPage.Loading.Hide ();
});
}
}
///
/// 显示网关
///
void showGatewayRow (Common common, RowLayout wirelessView)
{
int subnetID = common.SubnetID;
string remark = common.Name;
Button pointButton1 = new Button () {
Width = Application.GetRealHeight (13),
Height = Application.GetRealHeight (13),
X = Application.GetRealWidth (60),
UnSelectedImagePath = "Item/Point.png",
SelectedImagePath = "Item/PointSelected.png",
Gravity = Gravity.CenterVertical,
};
wirelessView.AddChidren (pointButton1);
Button nameButton1 = new Button () {
Width = Application.GetRealWidth (342),
Height = LayoutParams.MatchParent,
Text = remark,
TextAlignment = TextAlignment.CenterLeft,
X = pointButton1.Right + Application.GetRealWidth (20),
TextColor = SkinStyle.Current.TextColor1,
};
wirelessView.AddChidren (nameButton1);
Button rightButton1 = new Button () {
X = Application.GetRealWidth (480),
Width = Application.GetRealWidth (100),
Height = Application.GetRealHeight (40),
Gravity = Gravity.CenterVertical,
TextAlignment = TextAlignment.CenterLeft,
TextColor = SkinStyle.Current.TextColor1,
IsMoreLines = true,
TextSize = 12,
Text = text_reading
};
wirelessView.AddChidren (rightButton1);
new System.Threading.Thread (() => {
var serverIPBytes = Control.ControlBytesSendHasReturn (Command.ReadGatewayServerIP, common.SubnetID, common.DeviceID, new byte [] { });
if (serverIPBytes != null) {
try {
string serverIP1 = serverIPBytes [0].ToString () + "." + serverIPBytes [1].ToString () + "." +
serverIPBytes [2].ToString () + "." + serverIPBytes [3].ToString ();
string serverIP1Point = ((serverIPBytes [4] * 256) + serverIPBytes [5]).ToString ();
string serverIP2 = serverIPBytes [6].ToString () + "." + serverIPBytes [7].ToString () + "." +
serverIPBytes [8].ToString () + "." + serverIPBytes [9].ToString ();
string serverIP2Point = ((serverIPBytes [10] * 256) + serverIPBytes [11]).ToString ();
if (serverIP1 == "118.31.3.103" || serverIP2 == "118.31.3.103") {
Application.RunOnMainThread (() => {
rightButton1.Text = text_Upgraded;
rightButton1.TextColor = 0xFF00FF00;
return;
});
} else if (serverIP1 != "115.29.251.24" && serverIP2 != "115.29.251.24") {
Application.RunOnMainThread (() => {
rightButton1.Text = text_UnknownVersion;
rightButton1.TextColor = 0xFF00FF00;
return;
});
} else {
Application.RunOnMainThread (() => {
rightButton1.Text = text_Upgrading;
rightButton1.TextColor = 0xFF0000FF;
});
if (serverIP1 == "115.29.251.24") {
serverIP1 = "118.31.3.103";
serverIP1Point = "9999";
serverIPBytes [0] = 118;
serverIPBytes [1] = 31;
serverIPBytes [2] = 3;
serverIPBytes [3] = 103;
serverIPBytes [4] = Convert.ToByte (9999 / 256);
serverIPBytes [5] = Convert.ToByte (9999 % 256);
}
if (serverIP2 == "115.29.251.24") {
serverIP2 = "118.31.3.103";
serverIP2Point = "9999";
serverIPBytes [0 + 6] = 118;
serverIPBytes [1 + 6] = 31;
serverIPBytes [2 + 6] = 3;
serverIPBytes [3 + 6] = 103;
serverIPBytes [4 + 6] = Convert.ToByte (9999 / 256);
serverIPBytes [5 + 6] = Convert.ToByte (9999 % 256);
}
#if DEBUG
return;
#endif
var mobytes = Control.ControlBytesSendHasReturn (Command.SetGateWayModelInternetInfo, common.SubnetID, common.DeviceID, serverIPBytes);
if (mobytes == null || mobytes [0] == 0xF5) {
Application.RunOnMainThread (() => {
Application.RunOnMainThread (() => {
rightButton1.Text = text_UpgradeFailed;
rightButton1.TextColor = 0x99ff0000;
});
});
} else {
Application.RunOnMainThread (() => {
Application.RunOnMainThread (() => {
rightButton1.Text = text_Upgraded;
rightButton1.TextColor = 0xFF00FF00;
});
});
}
}
} catch (Exception ex) {
Console.WriteLine ("一端口远程ip信息转译失败.");
}
} else {
Application.RunOnMainThread (() => {
rightButton1.Text = text_UnknownVersion;
rightButton1.TextColor = 0xFF00FF00;
});
}
}) { IsBackground = true }.Start ();
}
}
}