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
}
}