using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; namespace Shared.Common { public class CommonPage : UIDrawerLayout { static CommonPage commonPage; public static CommonPage Instance { get { if (commonPage == null) { commonPage = new CommonPage { }; } return commonPage; } } /// /// 显示加载界面 /// public static Loading Loading = new Loading(); public void Show() { Application.DesignWidth = 1080; Application.DesignHeight = 1920; Application.MainPage.AddChidren(this); AddChidren(Phone.UserView.HomePage.Instance); Application.MainPage.AddChidren(Loading); Phone.UserView.HomePage.Instance.InitPage(); //设置顶部状态栏文字为黑色 Application.SetStatusBarTextBlack(true); } //public static string RequestHttpsHost = "https://global.hdlcontrol.com/HangZhouHdlCloudApi"; public static string RequestHttpsHost = "https://global.hdlcontrol.com/ProposedProductionApi"; /// /// 版本号 /// //public static string CodeIDString = "1.1.0121070801"; public static string CodeIDString = "1.2.1"; /// /// 注册来源(0:HDL On 1:Zigbee) /// public static int RegisterSoruceFromZIGBEE = 0; /// /// Company 用户公司用于公司App定制版 默认0 /// public static int Company = 0; /// /// 海外 注册时API调用和国内区分 /// public static int CompanyForINTERNETION = 4; /// /// 请求版本号 /// public static string RequestVersion = "2.0"; /// /// 左边距离屏幕的宽度--58 /// public static int XLeft = 58; /// /// 使用的语言 /// public static string ZigBeeLanguage { get { return Language.CurrentLanguage; } } /// /// 默认手机区号为86中国大陆 /// public static string PhoneZoneStr = "86"; /// /// APP宽度 -- 1080 /// public static int AppRealWidth = 1080; /// /// 用于中国大陆验证手机号正则表达式 /// public static string PhoneRegexStr = "^[1][0-9]{10}$"; /// /// 用于验证非中国大陆手机号正则表达式 /// public static string PhoneForForeignRegexStr = "^[0-9]*$"; /// /// 用于验证邮箱正则表达式 /// public static string EmailRegexStr = "^\\s*([A-Za-z0-9_-]+(\\.\\w+)*@(\\w+\\.)+\\w{2,5})\\s*$"; /// /// 安卓的系统返回按键能否按下(比如在备份还原时,不能按下返回键) /// public static bool BackKeyCanClick = true; /// /// 请求服务器方法 /// 指定一个Url,和请求方法,数据,Cookie,得到响应的数据 /// /// 请求Url /// 请求的的数据 /// 超时,默认5秒 /// 得到响应的数据 public ResponseEntity.ResponsePack RequestHttpsZigbeeAsync(string requestUrl, byte[] byteData, int timeout = 5) { string result = this.RequestHttpsZigbeeResultAsync(requestUrl, byteData, timeout); if (result != null) { try { var data = Newtonsoft.Json.JsonConvert.DeserializeObject(result); return data; } catch (Exception ex) { System.Console.WriteLine(ex.Message); } } return null; } /// /// 请求服务器方法 /// 指定一个Url,和请求方法,数据,Cookie,得到响应的数据 /// /// 请求Url /// 请求的的数据 /// 超时,默认5秒 /// 得到响应的数据 public string RequestHttpsZigbeeResultAsync(string requestUrl, byte[] byteData, int timeout = 5) { var result = RequestHttpsZigbeeBytesResultAsync(requestUrl, byteData, "POST", timeout); if (result != null) { return Encoding.UTF8.GetString(result); } return null; } /// /// 请求服务器方法 /// 指定一个Url,和请求方法,数据,Cookie,得到响应的数据 /// /// 请求Url /// 请求的的数据 /// POST 或者 GET 等等 /// 超时,默认5秒 /// 得到响应的数据 public byte[] RequestHttpsZigbeeBytesResultAsync(string requestUrl, byte[] byteData, string requestMethod = "POST", int timeout = 5) { //请求Url的完成路径 var fullUrl = $"{RequestHttpsHost}/{requestUrl}"; return this.DoRequestZigbeeHttpsInterface(fullUrl, byteData, Config.Instance.Token, requestMethod, timeout); } /// /// 请求服务器方法,指定一个Url,和请求方法,数据,Cookie,得到响应的数据 /// 注意!!此方法仅限【拥有管理员权限的成员】调用 /// /// 请求Url /// 请求的的数据 /// POST 或者 GET 等等 /// 超时,默认5秒 /// 得到响应的数据 public byte[] RequestZigbeeHttpsByAdmin(string requestUrl, byte[] byteData, string requestMethod = "POST", int timeout = 5) { //请求Url的完成路径 var fullUrl = $"{Config.Instance.AdminRequestBaseUrl}/{requestUrl}"; return this.DoRequestZigbeeHttpsInterface(fullUrl, byteData, Config.Instance.AdminRequestToken, requestMethod, timeout); } /// /// 请求服务器方法 /// 指定一个Url,和请求方法,数据,Cookie,得到响应的数据 /// /// 请求Url的完成路径 /// 请求的的数据 /// token /// POST 或者 GET 等等 /// 超时,默认5秒 /// 得到响应的数据 public byte[] DoRequestZigbeeHttpsInterface(string requestFullUrl, byte[] byteData, string token, string requestMethod = "POST", int timeout = 5) { try { //初始化新的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 (token != null) { //对应微信网址 webRequest.Headers.Add(HttpRequestHeader.Authorization, token); } 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 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(); } } 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; } } /// /// 服务器获取数据失败提示 /// public void FailureToServer() { Application.RunOnMainThread(() => { var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.RequestServerFailed), Language.StringByID(R.MyInternationalizationString.Confrim)); alert.Show(); }); } /// /// 显示错误提示 /// /// Error string identifier. public void ShowErrorInfoAlert(int errorStringID) { Application.RunOnMainThread(() => { var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(errorStringID), Language.StringByID(R.MyInternationalizationString.Confrim)); alert.Show(); }); } /// /// Get服务器方法1 /// public string GetMethod(string requestUrl) { string requestMethod = "get"; string urlHead = $"{RequestHttpsHost}/FeerView/"; string url = urlHead + requestUrl; HttpWebRequest httpWebRequestObj = WebRequest.CreateHttp(url); httpWebRequestObj.Method = requestMethod; using (HttpWebResponse httpWebResponseObj = httpWebRequestObj.GetResponse() as HttpWebResponse) { if (httpWebResponseObj == null) { return null; } else { Stream ResponseStream = httpWebResponseObj.GetResponseStream(); using (StreamReader Sr = new StreamReader(ResponseStream)) { string responseString = Sr.ReadToEnd(); return responseString; } } } } //清除角标数值 public void clearBadgeNum() { try { //this.RequestHttpsZigbeeResultAsync("ZigbeeUsers/CornerClear", null, 10); this.RequestHttpsZigbeeBytesResultAsync("ZigbeeUsers/CornerClear", null, "GET", 10); } catch { } } /// /// 登出 /// public void SingOut() { try { Application.RunOnMainThread(() => { #if iOS //全视通退出登录 Shared.IOS.HDLFVSDK.Video.Logout(); #endif //设定一个时间 Config.Instance.LoginDateTime = new DateTime(1970, 1, 1); Config.Instance.Save(); CommonPage.Instance.RemoveAll(); CommonPage.Instance.Show(); var login = new Phone.Login.AccountLoginForm(); CommonPage.Instance.AddChidren(login); login.ShowForm(); }); } catch { } } /// /// 退出登录时调用,清除推送数据 /// public void SignOutClearData() { try { System.Threading.Tasks.Task.Run(() => { using (var client = new System.Net.Http.HttpClient()) { client.DefaultRequestHeaders.Add("ContentType", "application/json"); client.DefaultRequestHeaders.Add("Authorization", Shared.Common.Config.Instance.Token); var responseString = client.GetStringAsync($"{CommonPage.RequestHttpsHost}/ZigbeeUsers/SignOut"); } }); } catch { } } /// /// 登录成功后上报设备id等相关信息给后端 /// /// 返回状态码 public string PushRegID() { //#if DEBUG // //调试不需要发送这个东西 // return null; //#endif try { string deviceAlias; string deviceType; #if iOS deviceAlias = UIKit.UIDevice.CurrentDevice.Name; deviceType = "iphone"; #elif Android deviceAlias = Android.OS.Build.Manufacturer; deviceType = "android"; #endif var RegIDObj = new SendDataToServer.SignZigbeeNeedPushRegIDObj() { RegID = Shared.Common.Config.Instance.RegistrationID, DeviceAlias = deviceAlias, DeviceType = deviceType }; var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(RegIDObj); Console.WriteLine(requestJson); var reverObj = CommonPage.Instance.RequestHttpsZigbeeAsync("ZigbeeUsers/SignZigbeeNeedPushRegID", System.Text.Encoding.UTF8.GetBytes(requestJson), 4); if (reverObj == null) { //调试:记录极光ID Phone.UserCenter.HdlLogLogic.Current.WriteOtherText(Shared.Phone.UserCenter.DirNameResourse.JiguangFile, "send:" + RegIDObj.RegID + " fail,receive obj is null", false, true); return null; } //调试:记录极光ID Phone.UserCenter.HdlLogLogic.Current.WriteOtherText(Shared.Phone.UserCenter.DirNameResourse.JiguangFile, "send:" + RegIDObj.RegID + " result:" + reverObj.StateCode, false, true); return reverObj.StateCode; } catch { return null; } } } }