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 (); } } }