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 = "读取中";
|
/// <summary>
|
/// 已升级
|
/// </summary>
|
string text_Upgraded = "已升级";
|
/// <summary>
|
/// 正在升级
|
/// </summary>
|
string text_Upgrading = "正在升级";
|
/// <summary>
|
/// 升级失败
|
/// </summary>
|
string text_UpgradeFailed = "升级失败";
|
/// <summary>
|
/// 未知版本
|
/// </summary>
|
string text_UnknownVersion = "其他版本";
|
/// <summary>
|
/// 读取失败
|
/// </summary>
|
string text_readFailure = "读取失败";
|
|
string txt_breakLink = "断开连接";
|
string txt_connectionSucceeded = "连接成功";
|
|
|
|
string userName = "";
|
string projectName = "";
|
string password = "";
|
#endregion
|
|
|
/// <summary>
|
/// 中间界面
|
/// </summary>
|
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 = "Connect and configure";
|
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 ();
|
};
|
|
|
|
|
|
|
}
|
|
|
|
/// <summary>
|
/// 显示出已经查找到的网关设备
|
/// </summary>
|
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 ();
|
});
|
}
|
}
|
|
/// <summary>
|
/// 显示网关
|
/// </summary>
|
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 ();
|
}
|
}
|
}
|