using System; using System.Text; using System.Collections.Generic; using System.Net; using System.IO; using Shared.SimpleControl.Phone; // // 程序主入口 // //using SystemConfiguration; namespace Shared.SimpleControl { /// /// 主页面 /// public static class MainPage { /// /// 主页面,根界面 /// public static FrameLayout MainFrameLayout { get; internal set; } public static bool Showed; static Loading loading; /// /// 显示加载界面 /// public static Loading Loading { get { if (loading == null) { loading = new Loading (); } return loading; } } //public static Button LogoButton = new Button (); public static string RequestVersion = "2.601071"; public static UserInfo LoginUser; /// /// 是否是管理员权限(变更了,成员的时候,这个也为ture。为什么会声明这样变量,因为有些接口必须使用原来的Token) /// public static bool IsAdministrator { get { if (UserConfig.Instance == null || UserConfig.Instance.CurrentRegion == null) { return false; } else { return UserConfig.Instance.CurrentRegion.IsOthreShare; } } } ///// ///// 是否账号在其它设备登录了 ///// //public static bool IsOtherDevicesLogin = false; //#if __IOS__ // public static readonly string PhoneType = "iOS"; //#else // public static readonly string PhoneType = "Android"; //#endif public static string SoftPadTitle = "Crabtree"; public static string SoftTitle = "Crabtree"; public static int SoftSmsType = 0; public static string RequestSource = "1"; //0:Zigbee、1:HdlOn、2:GraphicsMonitor、3:BusproSoft、4:AgentWeb public static string LogoString = "";//"Logo/Logo.png"; public static string WiFiStatus = "CrabtreeAdd/WiFi.png";//"CrabtreeAdd/WiFi.png"; public static string RegisterLogoString = "Logo/Register_logo.png"; public static string SeviceIP = "52.172.25.151"; public static string RequestHttpsHost = "https://smarth-api.havells.com/HangZhouHdlCloudApi"; //public static string RequestHttpsHost = "https://global.hdlcontrol.com/HangZhouHdlCloudApi"; //public static string RequestHttpsHostMqtt = "https://smarth-api.havells.com"; //public static string RequestHttpsHost = "https://developer.hdlcontrol.com"; #region GetDesignHeight /// /// 获取view的计算高度,ON软件为了适配全面特殊使用的比例方法,由于一些背景图片是直接全部填充的,改动成三层的(view-button-button)的工作量很大,不禁需要增加一个view,还需要修改图片 /// /// The view height. public static int GetDesignHeight (int height) { int ss = Convert.ToInt32 (height / PixelScale); return Application.GetRealHeight (ss); } #endregion public static double PixelScale { get { #if __IOS__ switch (Application.PhoneType) { case 3: case 4: case 5: case 6: case 7: case 8: case 9: return 1.0; case 10: return 1.1; case 11: case 12: return 1.2; //case 13: // return 1.3; } var widthScale = Application.CurrentWidth / 640.0f; var heightScale = Application.CurrentHeight / 1136.0f; var scale = Math.Round (System.Math.Abs (widthScale - heightScale), 2); return scale + 1; #else return 1; #endif } } /// /// 显示当前界面 /// public static void Show () { try { Showed = true; UserConfig.Instance.SkinCode = 1; if (Shared.Application.IsPad) { Application.DesignWidth = 2048; Application.DesignHeight = 1536; } else { Application.DesignWidth = 640; Application.DesignHeight = 1136; } //印度客户定制APP默认使用英文 Language.CurrentLanguage = "English"; Shared.BusSocket.Start (6000); CommonPage.InitReceiveEvent (); MainFrameLayout = Application.MainPage; MainFrameLayout.AddChidren (Loading); if (Shared.Application.IsPad) { //Pad.UserHomePage.Init (); } else { Phone.UserHomePage.Init (); #if __IOS__ //Loading.LodingBackgroundColor = 0x10777777; #else //Loading.LodingBackgroundColor = SkinStyle.Current.MainColor; #endif Loading.TextColor = 0xFFA9A9A9; Loading.LodingBackgroundColor = SkinStyle.Current.MainColor; } CommonUtlis.Current.CheckIfJailBreak (); } catch (Exception ex) { //new Alert ("Eorr", ex.Message, "Close").Show(); } } /// /// 弹出错误提示 /// /// Tip. /// Time. public static void AddTip (string tip, int time = 2000) { if (MainFrameLayout == null) { return; } Application.RunOnMainThread (() => { var button = new TextView { Gravity = Gravity.Center, Width = Application.GetRealWidth (560), Height = Application.GetRealHeight (126), //BackgroundColor = SkinStyle.Current.AddTipButtonColor, BackgroundColor = SkinStyle.Current.MainColor, Radius = 10, IsMoreLines = true, Text = tip, TextSize = 16, TextColor = 0xFF000000 }; MainFrameLayout.AddChidren (button); button.MouseUpEventHandler += (sender, e) => { button.RemoveFromParent (); }; System.Threading.Tasks.Task.Run (() => { System.Threading.Thread.Sleep (time); Application.RunOnMainThread (() => { button.RemoveFromParent (); }); }); }); } static DateTime requesTime = DateTime.MinValue; static bool isShowLoading = true; ///// ///// 请求服务器方法 ///// ///// The https. ///// 请求方法. ///// 请求的参数. ///// 是否需要包头. //public static ResponsePack RequestHttpsOld (string methodType, string dataStringJson, string urlHead = "") //{ // ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, error) => { // return true; // }; // #region // var webClient = new WebClient (); // if (urlHead == "") { // urlHead = RequestHttpsHost; // } // //else { // // webClient.Headers.Add ("CONTENT-TYPE", "application/json"); // //} // webClient.Headers.Add ("CONTENT-TYPE", "application/json"); // string url = urlHead + methodType; // if (LoginUser != null) {/* 如果不需要验证Token可以不用传入 */ // webClient.Headers.Add ("Authorization", LoginUser.LoginTokenString); // } // byte [] bytes = null; // try { // bytes = webClient.UploadData (url, Encoding.UTF8.GetBytes (dataStringJson)); // } catch (System.Net.WebException webEx) { // //Application.RunOnMainThread (() => { // // MainPage.Loading.Hide (); // //}); // return new ResponsePack () { StateCode = ErrorCode.NetworkError }; // } // string responseString = Encoding.UTF8.GetString (bytes); // try { // return Newtonsoft.Json.JsonConvert.DeserializeObject (responseString); // } catch (Exception ex) { // Utlis.WriteLine (ex.ToString ()); // return new ResponsePack () { StateCode = "Data exception" }; // } // #endregion //} ///// ///// 请求服务器方法 ///// ///// The https. ///// 请求方法. ///// 请求的参数. ///// 是否需要包头. //public static byte [] RequestHttpsReturnByte (string methodType, string dataStringJson, bool needHeaders = false, string urlHead = "") //{ // ResponsePack revertObj = null; // try { // ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, error) => { // return true; // }; // #region // var webClient = new WebClient (); // if (urlHead == "") { // urlHead = RequestHttpsHost; // } // //else { // // webClient.Headers.Add ("CONTENT-TYPE", "application/json"); // //} // webClient.Headers.Add ("CONTENT-TYPE", "application/json"); // string url = urlHead + methodType; // if (needHeaders && LoginUser != null) {/* 如果不需要验证Token可以不用传入 */ // webClient.Headers.Add ("Authorization", LoginUser.LoginTokenString); // } // byte [] bytes = null; // try { // bytes = webClient.UploadData (url, Encoding.UTF8.GetBytes (dataStringJson)); // } catch (System.Net.WebException webEx) { // return bytes; // } // return bytes; // #endregion // } catch (Exception ex) { // Utlis.WriteLine (ex.Message); // return null; // } finally { // //requesTime = requesTime.AddDays(1); // } //} /// /// 请求服务器方法 /// /// The https. /// 请求方法. public static ResponsePack RequestHttpsNewBig (string methodType, byte [] byteData, UploadHomeAppGatewaySubFilesBigObj mUploadHomeAppGatewaySubFilesBigObj, string urlHead = "", int mTimeout = 10, string requestMethod = "POST") { ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, error) => { return true; }; #region HttpWebRequest try { if (urlHead == "") { urlHead = RequestHttpsHost; } string requestFullUrl = urlHead + methodType; //初始化新的webRequst //1. 创建httpWebRequest对象 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create (new Uri (requestFullUrl)); //2. 初始化HttpWebRequest对象 webRequest.Method = requestMethod; //webRequest.Timeout = mTimeout * 1000; webRequest.Headers.Add (HttpRequestHeader.Authorization, LoginUser.LoginTokenString); webRequest.Headers.Add ("RequestVersion", mUploadHomeAppGatewaySubFilesBigObj.RequestVersion); webRequest.Headers.Add ("LoginAccessToken", LoginUser.LoginTokenString); webRequest.Headers.Add ("HomeId", mUploadHomeAppGatewaySubFilesBigObj.HomeId); webRequest.Headers.Add ("BackupClassId", mUploadHomeAppGatewaySubFilesBigObj.BackupClassId); webRequest.Headers.Add ("FileName", mUploadHomeAppGatewaySubFilesBigObj.FileName); webRequest.Headers.Add ("IsOtherAccountCtrl", mUploadHomeAppGatewaySubFilesBigObj.IsOtherAccountCtrl.ToString ()); //var byteData = new byte [] { };//Encoding.UTF8.GetBytes (dataStringJson); //if (LoginUser != null) {/* 如果不需要验证Token可以不用传入 */ // //对应微信网址 //} if (requestMethod == "GET") { //webRequest.ContentType = "text/html"; webRequest.ContentType = "application/json"; } else { webRequest.ContentType = "application/octet-stream"; //webRequest.ContentType = "application/json"; webRequest.ContentLength = byteData.Length; //3. 附加要POST给服务器的数据到HttpWebRequest对象(附加POST数据的过程比较特殊,它并没有提供一个属性给用户存取,需要写入HttpWebRequest对象提供的一个stream里面。) var newStream = webRequest.GetRequestStream ();//创建一个Stream,赋值是写入HttpWebRequest对象提供的一个stream里面 newStream.Write (byteData, 0, byteData.Length); newStream.Flush (); newStream.Close (); } //4. 读取服务器的返回信息 var response = (HttpWebResponse)webRequest.GetResponse (); using (var stream = response.GetResponseStream ()) { if (stream == null) { return new ResponsePack () { StateCode = ErrorCode.NetworkError }; } var ms = new MemoryStream (); var bytes = new byte [1024]; var len = int.MaxValue; while (stream.CanRead && 0 < len) { len = stream.Read (bytes, 0, bytes.Length); ms.Write (bytes, 0, len); } //var backBytes = ms.ToArray (); string responseString = Encoding.UTF8.GetString (ms.ToArray ()); try { ResponsePack revertObj = new ResponsePack () { }; revertObj = Newtonsoft.Json.JsonConvert.DeserializeObject (responseString); if (revertObj.StateCode == null) { revertObj.StateCode = "Data Exception"; } return revertObj; } catch (Exception ex) { Shared.Utlis.WriteLine (ex.ToString ()); return new ResponsePack () { StateCode = "Data Exception" }; } //return ms.ToArray (); } } catch (Exception ex) { #if DEBUG System.Console.WriteLine (ex.Message); #endif //The operation has timed out return new ResponsePack () { StateCode = ErrorCode.NetworkError }; } #endregion } /// /// 请求服务器方法 /// 2020-06-22 带自定义请求超时 时间方法 /// /// The https. /// 请求方法. /// 请求的参数. /// 是否需要包头. public static ResponsePack RequestHttps (string methodType, string dataStringJson, string urlHead = "", int mTimeout = 10, string requestMethod = "POST") { ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, error) => { return true; }; #region HttpWebRequest try { if (urlHead == "") { urlHead = RequestHttpsHost; } string requestFullUrl = urlHead + methodType; //初始化新的webRequst //1. 创建httpWebRequest对象 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create (new Uri (requestFullUrl)); //2. 初始化HttpWebRequest对象 webRequest.Method = requestMethod; webRequest.Timeout = mTimeout * 1000; var byteData = Encoding.UTF8.GetBytes (dataStringJson); if (LoginUser != null) {/* 如果不需要验证Token可以不用传入 */ //对应微信网址 webRequest.Headers.Add (HttpRequestHeader.Authorization, LoginUser.LoginTokenString); } if (requestMethod == "GET") { //webRequest.ContentType = "text/html"; webRequest.ContentType = "application/json"; } else { webRequest.ContentType = "application/json"; webRequest.ContentLength = byteData.Length; //3. 附加要POST给服务器的数据到HttpWebRequest对象(附加POST数据的过程比较特殊,它并没有提供一个属性给用户存取,需要写入HttpWebRequest对象提供的一个stream里面。) var newStream = webRequest.GetRequestStream ();//创建一个Stream,赋值是写入HttpWebRequest对象提供的一个stream里面 newStream.Write (byteData, 0, byteData.Length); newStream.Flush (); newStream.Close (); } //4. 读取服务器的返回信息 var response = (HttpWebResponse)webRequest.GetResponse (); using (var stream = response.GetResponseStream ()) { if (stream == null) { return new ResponsePack () { StateCode = ErrorCode.NetworkError }; } var ms = new MemoryStream (); var bytes = new byte [1024]; var len = int.MaxValue; while (stream.CanRead && 0 < len) { len = stream.Read (bytes, 0, bytes.Length); ms.Write (bytes, 0, len); } //var backBytes = ms.ToArray (); string responseString = Encoding.UTF8.GetString (ms.ToArray ()); try { ResponsePack revertObj = new ResponsePack () { }; revertObj = Newtonsoft.Json.JsonConvert.DeserializeObject (responseString); if (revertObj.StateCode == null) { revertObj.StateCode = "Data Exception"; } return revertObj; } catch (Exception ex) { Shared.Utlis.WriteLine (ex.ToString ()); return new ResponsePack () { StateCode = "Data Exception" }; } //return ms.ToArray (); } } catch (Exception ex) { #if DEBUG System.Console.WriteLine (ex.Message); #endif //The operation has timed out return new ResponsePack () { StateCode = ErrorCode.NetworkError }; } #endregion } public const int TIME_OUT_20 = 30; /// /// 下载文件方法 /// /// /// /// /// /// /// public static byte [] RequestHttpsReturnByteNew (string methodType, string dataStringJson, string urlHead = "", int mTimeout = 20, string requestMethod = "POST") { try { #region if (urlHead == "") { urlHead = RequestHttpsHost; } string requestFullUrl = urlHead + methodType; //初始化新的webRequst //1. 创建httpWebRequest对象 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create (new Uri (requestFullUrl)); //2. 初始化HttpWebRequest对象 webRequest.Method = requestMethod; //webRequest.Timeout = timeout * 1000; //取消使用代理访问 webRequest.Proxy = null; webRequest.UseDefaultCredentials = false; if (requestMethod == "GET") { webRequest.ContentType = "application/json"; } else { var byteData = Encoding.UTF8.GetBytes (dataStringJson); webRequest.ContentType = "application/json"; webRequest.ContentLength = byteData.Length; //3. 附加要POST给服务器的数据到HttpWebRequest对象(附加POST数据的过程比较特殊,它并没有提供一个属性给用户存取,需要写入HttpWebRequest对象提供的一个stream里面。) var newStream = webRequest.GetRequestStream ();//创建一个Stream,赋值是写入HttpWebRequest对象提供的一个stream里面 newStream.Write (byteData, 0, byteData.Length); newStream.Flush (); newStream.Close (); } //4. 读取服务器的返回信息 var response = (HttpWebResponse)webRequest.GetResponse (); using (var stream = response.GetResponseStream ()) { if (stream == null) { return null; } var ms = new MemoryStream (); var bytes = new byte [1024]; var len = int.MaxValue; while (stream.CanRead && 0 < len) { len = stream.Read (bytes, 0, bytes.Length); ms.Write (bytes, 0, len); } return ms.ToArray (); } #endregion } catch (WebException e) { //if (e.Status == WebExceptionStatus.ConnectFailure//由有网络切换到无网络时触发 // || e.Status == WebExceptionStatus.Timeout//超时 // || e.Status == WebExceptionStatus.NameResolutionFailure)//本身就是无网络时启动时触发 //{ // //Phone.UserCenter.HdlWifiLogic.Current.CanAccessHttp = false; //} return null; } catch (Exception e) { return null; } } #region LoadingTipMsg 远程连接Tip static Button btnLoadingTipMsg; public static void LoadingTipShow (string tip) { if (MainFrameLayout == null) { return; } Application.RunOnMainThread (() => { try { if (btnLoadingTipMsg == null) { btnLoadingTipMsg = new Button () { Height = Application.GetRealHeight (90), BackgroundColor = SkinStyle.Current.MainColor, //BackgroundColor = 0xFF000000, Y = Application.GetRealHeight (36), TextAlignment = TextAlignment.Center, TextColor = 0xFF000000, }; } if (btnLoadingTipMsg.Parent == null) { MainFrameLayout.AddChidren (btnLoadingTipMsg); if (btnLoadingTipMsg.MouseUpEventHandler == null) { btnLoadingTipMsg.MouseUpEventHandler += (sender, e) => { if (btnLoadingTipMsg.Parent != null) btnLoadingTipMsg.RemoveFromParent (); }; } } btnLoadingTipMsg.Text = tip; } catch { } }); } public static void LoadingTipHide () { if (MainFrameLayout == null) { return; } Application.RunOnMainThread (() => { try { if (btnLoadingTipMsg != null) { if (btnLoadingTipMsg.Parent != null) btnLoadingTipMsg.RemoveFromParent (); } } catch { } }); } #endregion /// /// 连接服务器失败 /// public static void FailureToServer () { //Application.RunOnMainThread (() => { // new Alert ("", Language.StringByID (R.MyInternationalizationString.FailureToServer), // Language.StringByID (R.MyInternationalizationString.Close)).Show (); //}); ShowAlertOnMainThread (ErrorCode.FailedRequestServer); } /// /// 2020-01-11 弹窗提示 /// /// public static void ShowAlertOnMainThread (string mes) { Application.RunOnMainThread (() => { new Alert ("", mes, Language.StringByID (R.MyInternationalizationString.Close)).Show (); }); } /// /// 设备不在线,无响应 /// public static void DeviceNotOnline () { Application.RunOnMainThread (() => { new Alert ("", Language.StringByID (R.MyInternationalizationString.TipEquipmentNotOnline), Language.StringByID (R.MyInternationalizationString.Close)).Show (); MainPage.Loading.Hide (); }); } public static void LoadingStart (string showString = "") { Application.RunOnMainThread (() => { MainPage.Loading.Start (showString); }); } public static void LoadingSetText (string showString = "") { Application.RunOnMainThread (() => { MainPage.Loading.Text = showString; }); } public static void LoadingHide () { Application.RunOnMainThread (() => { MainPage.Loading.Hide (); }); } } }