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();
}
//public static string RequestHttpsHost = "https://global.hdlcontrol.com/HangZhouHdlCloudApi";
public static string RequestHttpsHost = "https://global.hdlcontrol.com/ProposedProductionApi";
///
/// 版本号
///
public static string CodeIDString = "1.1.0120072004";
///
/// 注册来源(0:HDL On 1:Zigbee)
///
public static int RegisterSoruceFromZIGBEE = 0;
public static string Source = "ZIGBEE";
///
/// 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
/// 请求的的数据
/// 超时,默认10秒
/// 得到响应的数据
public ResponseEntity.ResponsePack RequestHttpsZigbeeAsync(string requestUrl, byte[] byteData, int timeout = 10)
{
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
/// 请求的的数据
/// 超时,默认10秒
/// 得到响应的数据
public string RequestHttpsZigbeeResultAsync(string requestUrl, byte[] byteData, int timeout = 10)
{
var result = RequestHttpsZigbeeBytesResultAsync(requestUrl, byteData, "POST", timeout);
if (result != null)
{
return Encoding.UTF8.GetString(result);
}
return null;
}
///
/// 请求服务器方法
/// 指定一个Url,和请求方法,数据,Cookie,得到响应的数据
///
/// 请求Url
/// 请求的的数据
/// POST 或者 GET 等等
/// 超时,默认10秒
/// 得到响应的数据
public byte[] RequestHttpsZigbeeBytesResultAsync(string requestUrl, byte[] byteData, string requestMethod = "POST", int timeout = 10)
{
//请求Url的完成路径
var fullUrl = $"{RequestHttpsHost}/{requestUrl}";
return this.DoRequestZigbeeHttpsInterface(fullUrl, byteData, Config.Instance.Token, requestMethod, timeout);
}
///
/// 请求服务器方法,指定一个Url,和请求方法,数据,Cookie,得到响应的数据
/// 注意!!此方法仅限【拥有管理员权限的成员】调用
///
/// 请求Url
/// 请求的的数据
/// POST 或者 GET 等等
/// 超时,默认10秒
/// 得到响应的数据
public byte[] RequestZigbeeHttpsByAdmin(string requestUrl, byte[] byteData, string requestMethod = "POST", int timeout = 10)
{
//请求Url的完成路径
var fullUrl = $"{Config.Instance.AdminRequestBaseUrl}/{requestUrl}";
return this.DoRequestZigbeeHttpsInterface(fullUrl, byteData, Config.Instance.AdminRequestToken, requestMethod, timeout);
}
///
/// 请求服务器方法
/// 指定一个Url,和请求方法,数据,Cookie,得到响应的数据
///
/// 请求Url的完成路径
/// 请求的的数据
/// token
/// POST 或者 GET 等等
/// 超时,默认10秒
/// 得到响应的数据
public byte[] DoRequestZigbeeHttpsInterface(string requestFullUrl, byte[] byteData, string token, string requestMethod = "POST", int timeout = 10)
{
try
{
//初始化新的webRequst
//1. 创建httpWebRequest对象
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(requestFullUrl));
//2. 初始化HttpWebRequest对象
webRequest.Method = requestMethod;
webRequest.Timeout = timeout * 1000;
//取消使用代理访问
webRequest.Proxy = null;
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 SingOut()
{
try
{
Application.RunOnMainThread(() =>
{
//设定一个时间
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()
{
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);
var reverObj = CommonPage.Instance.RequestHttpsZigbeeAsync("ZigbeeUsers/SignZigbeeNeedPushRegID", System.Text.Encoding.UTF8.GetBytes(requestJson));
if (reverObj == null)
{
return null;
}
return reverObj.StateCode;
}
catch
{
return null;
}
}
}
}