using Shared.Phone.UserCenter;
|
using System;
|
using System.Collections.Generic;
|
using System.Text;
|
|
namespace Shared.Phone
|
{
|
/// <summary>
|
/// 消息的逻辑
|
/// </summary>
|
public class HdlMessageLogic
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 消息的逻辑
|
/// </summary>
|
private static HdlMessageLogic m_Current = null;
|
/// <summary>
|
/// 消息的逻辑
|
/// </summary>
|
public static HdlMessageLogic Current
|
{
|
get
|
{
|
if (m_Current == null)
|
{
|
m_Current = new HdlMessageLogic();
|
//初始化消息列表
|
m_Current.InitHttpMessageEnum();
|
}
|
return m_Current;
|
}
|
}
|
|
/// <summary>
|
/// 消息列表 key:状态码 value:翻译名称
|
/// </summary>
|
private Dictionary<string, string> dicHttpMsg = null;
|
|
#endregion
|
|
#region ■ 初始化消息_________________________
|
|
/// <summary>
|
/// 初始化设备的模块ID的枚举
|
/// </summary>
|
private void InitHttpMessageEnum()
|
{
|
if (this.dicHttpMsg != null)
|
{
|
return;
|
}
|
this.dicHttpMsg = new Dictionary<string, string>();
|
|
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();
|
}
|
}
|
|
/// <summary>
|
/// 获取设备名字文件的内容
|
/// </summary>
|
/// <returns></returns>
|
private List<string> GetDeviceNameFileContent()
|
{
|
System.IO.StreamReader streamReader = null;
|
var listText = new List<string>();
|
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 ■ 获取云端消息列表___________________
|
|
/// <summary>
|
/// 获取云端消息列表(消息记录,可能会返回null)
|
/// </summary>
|
/// <returns></returns>
|
public List<MessageRecordInfo> 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<List<MessageRecordInfo>>(result.Data.ToString());
|
}
|
|
#endregion
|
|
#region ■ 标记消息已读_______________________
|
|
/// <summary>
|
/// 标记云端消息已读
|
/// </summary>
|
/// <param name="i_strId">消息的主键</param>
|
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;
|
}
|
|
/// <summary>
|
/// 设置云端消息全部为已读
|
/// </summary>
|
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 ■ 删除信息记录_______________________
|
|
/// <summary>
|
/// 删除云端信息记录
|
/// </summary>
|
/// <param name="i_strId">消息的主键</param>
|
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;
|
}
|
|
/// <summary>
|
/// 删除云端全部的消息
|
/// </summary>
|
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 ■ 一般的方法_________________________
|
|
/// <summary>
|
/// 显示信息框
|
/// </summary>
|
/// <param name="msgType">信息类型</param>
|
/// <param name="msg">信息</param>
|
/// <param name="action">单击确认后执行的回调函数</param>
|
/// <param name="buttonText">按钮的文本</param>
|
/// <param name="i_waitTime">等待时间,单位为秒,设置确认按钮在多长时间后才能够点击</param>
|
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();
|
});
|
}
|
|
/// <summary>
|
/// 显示没有网络的tip消息
|
/// </summary>
|
/// <param name="i_mode">显示模式</param>
|
public void ShowNotNetTipMsg(ShowNetCodeMode i_mode)
|
{
|
if (i_mode == ShowNetCodeMode.No)
|
{
|
//节约代码量,这样整而已,外面就不用判断了
|
return;
|
}
|
//网关连接失败,请确认网络
|
this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.uGatewayIsNotLinkAndCheckNetwork));
|
}
|
|
/// <summary>
|
/// 显示访问接口返回的状态码的翻译tip消息
|
/// </summary>
|
/// <param name="i_mode">显示模式</param>
|
/// <param name="i_response">云端返回的东西</param>
|
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 + ")");
|
}
|
}
|
|
/// <summary>
|
/// 根据接口的状态码,翻译返回信息(出Log用的)
|
/// </summary>
|
/// <param name="requestName">接口</param>
|
/// <param name="revertObj">云端返回的数据</param>
|
/// <param name="bodyObj">承载在body里面的类对象</param>
|
/// <param name="dicQueryTip">存放文档上标签为【query】的变量,无此标签,则请设置为null</param>
|
/// <param name="dicPathTip">存放文档上标签为【path】的变量,无此标签,则请设置为null</param>
|
/// <returns></returns>
|
public string GetMsgByRequestName(string requestName, ResponsePack revertObj,
|
object bodyObj, Dictionary<string, object> dicQueryTip, Dictionary<string, object> 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);
|
}
|
|
/// <summary>
|
/// 翻译云端的状态码(非在册的状态码,会直接返回状态码)
|
/// </summary>
|
/// <param name="i_code"></param>
|
/// <returns></returns>
|
public string TranslateHttpCode(string i_code)
|
{
|
if (this.dicHttpMsg.ContainsKey(i_code) == true)
|
{
|
return this.dicHttpMsg[i_code];
|
}
|
return null;
|
}
|
|
#endregion
|
}
|
|
/// <summary>
|
/// 信息显示的类型
|
/// </summary>
|
public enum ShowMsgType
|
{
|
/// <summary>
|
/// 普通提示类型
|
/// </summary>
|
Normal = 1,
|
/// <summary>
|
/// 确认类型
|
/// </summary>
|
Confirm = 2,
|
/// <summary>
|
/// 错误类型
|
/// </summary>
|
Error = 3,
|
/// <summary>
|
/// Tip类型
|
/// </summary>
|
Tip = 4,
|
/// <summary>
|
/// 提醒类型
|
/// </summary>
|
Remind = 5
|
}
|
}
|