using Shared.Phone.UserCenter; using System; using System.Collections.Generic; using System.Text; namespace Shared.Phone { /// /// 消息的逻辑 /// public class HdlMessageLogic { #region ■ 变量声明___________________________ /// /// 消息的逻辑 /// private static HdlMessageLogic m_Current = null; /// /// 消息的逻辑 /// public static HdlMessageLogic Current { get { if (m_Current == null) { m_Current = new HdlMessageLogic(); //初始化消息列表 m_Current.InitHttpMessageEnum(); } return m_Current; } } /// /// 消息列表 key:状态码 value:翻译名称 /// private Dictionary dicHttpMsg = null; #endregion #region ■ 初始化消息_________________________ /// /// 初始化设备的模块ID的枚举 /// private void InitHttpMessageEnum() { if (this.dicHttpMsg != null) { return; } this.dicHttpMsg = new Dictionary(); var listText = this.GetDeviceNameFileContent(); foreach (var dataText in listText) { if (dataText == string.Empty || dataText.StartsWith(";") == true) { //这是注释 continue; } string[] strArry1 = dataText.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries); if (strArry1.Length != 2) { //非法设置 continue; } this.dicHttpMsg[strArry1[0].Trim()] = strArry1[1].Trim(); } } /// /// 获取设备名字文件的内容 /// /// private List GetDeviceNameFileContent() { System.IO.StreamReader streamReader = null; var listText = new List(); try { #if iOS string textFile = Foundation.NSBundle.MainBundle.PathForResource("HttpMessage.ini", null); streamReader = new System.IO.StreamReader(textFile, Encoding.UTF8); string text; while ((text = streamReader.ReadLine()) != null) { listText.Add(text.Trim()); } return listText; #endif #if Android var stream = Application.Activity.Assets.Open("HttpMessage.ini"); streamReader = new System.IO.StreamReader(stream, Encoding.UTF8); string text; while ((text = streamReader.ReadLine()) != null) { listText.Add(text.Trim()); } stream.Close(); return listText; #endif } catch { return listText; } finally { try { streamReader?.Close(); } catch { } } } #endregion #region ■ 获取云端消息列表___________________ /// /// 获取云端消息列表(消息记录,可能会返回null) /// /// public List GetListMessageFromDb() { //如果没有极光id的话 if (string.IsNullOrEmpty(Common.Config.Instance.PushId) == true) { return null; } var pra = new { pushId = Common.Config.Instance.PushId, homeId = Common.Config.Instance.Home.Id }; var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/app/message/list", RestSharp.Method.POST, pra, null, null, CheckMode.A账号权限, false, 5); if (result == null || result.Code != HttpMessageEnum.A成功) { return null; } return Newtonsoft.Json.JsonConvert.DeserializeObject>(result.Data.ToString()); } #endregion #region ■ 标记消息已读_______________________ /// /// 标记云端消息已读 /// /// 消息的主键 public bool SetTickIsRead(string i_strId) { var pra = new { msgId = i_strId }; var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/app/message/read", RestSharp.Method.POST, pra, null, null, CheckMode.A账号权限); if (result == null || result.Code != HttpMessageEnum.A成功) { return false; } return true; } /// /// 设置云端消息全部为已读 /// public bool SetAllTickIsRead() { //如果没有极光id的话 if (string.IsNullOrEmpty(Common.Config.Instance.PushId) == true) { return true; } var pra = new { pushId = Common.Config.Instance.PushId, homeId = Common.Config.Instance.Home.Id }; var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/app/message/read_all", RestSharp.Method.POST, pra, null, null, CheckMode.A账号权限); if (result == null || result.Code != HttpMessageEnum.A成功) { return false; } return true; } #endregion #region ■ 删除信息记录_______________________ /// /// 删除云端信息记录 /// /// 消息的主键 public bool DeleteCloundMessage(string i_strId) { var pra = new { msgId = i_strId }; var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/app/message/delete_by_id", RestSharp.Method.POST, pra, null, null, CheckMode.A账号权限); if (result == null || result.Code != HttpMessageEnum.A成功) { return false; } return true; } /// /// 删除云端全部的消息 /// public bool DeleteAllCloundMessage() { //如果没有极光id的话 if (string.IsNullOrEmpty(Common.Config.Instance.PushId) == true) { return true; } var pra = new { pushId = Common.Config.Instance.PushId, homeId = Common.Config.Instance.Home.Id }; var result = HdlHttpLogic.Current.RequestResponseFromZigbeeHttps("smart-footstone/app/message/clear", RestSharp.Method.POST, pra, null, null, CheckMode.A账号权限); if (result == null || result.Code != HttpMessageEnum.A成功) { return false; } return true; } #endregion #region ■ 一般的方法_________________________ /// /// 显示信息框 /// /// 信息类型 /// 信息 /// 单击确认后执行的回调函数 /// 按钮的文本 /// 等待时间,单位为秒,设置确认按钮在多长时间后才能够点击 public void ShowMassage(ShowMsgType msgType, string msg, Action action = null, string buttonText = null, int i_waitTime = -1) { //空对象时,不显示 if (string.IsNullOrEmpty(msg)) { return; } HdlThreadLogic.Current.RunMain(() => { var alert = new ShowMsgControl(msgType, msg, buttonText, null, i_waitTime); if (action != null) { alert.ConfirmClickEvent += () => { try { //回调函数 action?.Invoke(); } catch (Exception ex) { //出现未知错误,数据丢失 this.ShowMassage(ShowMsgType.Error, Language.StringByID(R.MyInternationalizationString.uUnKnownError)); //Log出力 HdlLogLogic.Current.WriteLog(ex); } action = null; }; } alert.Show(); }); } /// /// 显示没有网络的tip消息 /// /// 显示模式 public void ShowNotNetTipMsg(ShowNetCodeMode i_mode) { if (i_mode == ShowNetCodeMode.No) { //节约代码量,这样整而已,外面就不用判断了 return; } //网关连接失败,请确认网络 this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.uGatewayIsNotLinkAndCheckNetwork)); } /// /// 显示访问接口返回的状态码的翻译tip消息 /// /// 显示模式 /// 云端返回的东西 public void ShowNetCodeTipMsg(ShowNetCodeMode i_mode, ResponsePack i_response) { if (i_mode == ShowNetCodeMode.No || i_response.Code == string.Empty) { //节约代码量,这样整而已,外面就不用判断了 return; } //翻译状态码 var strMsg = this.TranslateHttpCode(i_response.Code); if (strMsg != null) { this.ShowMassage(ShowMsgType.Tip, strMsg); } else { this.ShowMassage(ShowMsgType.Tip, i_response.Message + "(" + i_response.Code + ")"); } } /// /// 根据接口的状态码,翻译返回信息(出Log用的) /// /// 接口 /// 云端返回的数据 /// 承载在body里面的类对象 /// 存放文档上标签为【query】的变量,无此标签,则请设置为null /// 存放文档上标签为【path】的变量,无此标签,则请设置为null /// public string GetMsgByRequestName(string requestName, ResponsePack revertObj, object bodyObj, Dictionary dicQueryTip, Dictionary dicPathTip) { string errorMsg = "接口访问失败:" + requestName + " " + revertObj.Code + " " + revertObj.Message + "\r\n"; errorMsg += "当前激活的界面:" + HdlFormLogic.Current.NowActionFormID + "\r\n"; if (bodyObj != null) { //序列化对象 try { var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(bodyObj); errorMsg += "参数1:\r\n" + requestJson + "\r\n"; } catch { errorMsg += "参数1:序列化异常!\r\n"; } } if (dicQueryTip != null) { //序列化对象 try { var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(dicQueryTip); errorMsg += "参数2:\r\n" + requestJson + "\r\n"; } catch { errorMsg += "参数2:序列化异常!\r\n"; } } if (dicPathTip != null) { //序列化对象 try { var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(dicPathTip); errorMsg += "参数3:\r\n" + requestJson + "\r\n"; } catch { errorMsg += "参数3:序列化异常!\r\n"; } } HdlLogLogic.Current.WriteLog(-1, errorMsg + "\r\n"); return this.TranslateHttpCode(revertObj.Code); } /// /// 翻译云端的状态码(非在册的状态码,会直接返回状态码) /// /// /// public string TranslateHttpCode(string i_code) { if (this.dicHttpMsg.ContainsKey(i_code) == true) { return this.dicHttpMsg[i_code]; } return null; } #endregion } /// /// 信息显示的类型 /// public enum ShowMsgType { /// /// 普通提示类型 /// Normal = 1, /// /// 确认类型 /// Confirm = 2, /// /// 错误类型 /// Error = 3, /// /// Tip类型 /// Tip = 4, /// /// 提醒类型 /// Remind = 5 } }