using System;
|
using System.Collections.Generic;
|
using Shared;
|
using Shared.SimpleControl;
|
using Shared.SimpleControl.R;
|
|
namespace Shared
|
{
|
/// <summary>
|
/// 接口类的返回信息
|
/// </summary>
|
public class IMessageCommon
|
{
|
|
/// <summary>
|
/// 接口类的返回信息
|
/// </summary>
|
private static IMessageCommon m_Current = null;
|
/// <summary>
|
/// 接口类的返回信息
|
/// </summary>
|
public static IMessageCommon Current
|
{
|
get
|
{
|
if (m_Current == null)
|
{
|
m_Current = new IMessageCommon();
|
//初始化全部的信息
|
m_Current.InitAllMsg();
|
}
|
return m_Current;
|
}
|
}
|
|
/// <summary>
|
/// 是否在获取token
|
/// </summary>
|
public bool isGetingToken;
|
|
/// <summary>
|
/// 无视错误(访问云端时,此操作将不会弹出错误)
|
/// </summary>
|
public bool IgnoreError = false;
|
|
///// <summary>
|
///// 全部信息
|
///// </summary>
|
//private Dictionary<string, Dictionary<string, int>> dicMsg = null;
|
|
/// <summary>
|
/// 通用错误码
|
/// </summary>
|
private Dictionary<string, int> stateCodeDic = null;
|
|
|
/// <summary>
|
/// 初始化全部的信息
|
/// </summary>
|
public void InitAllMsg()
|
{
|
//dicMsg = new Dictionary<string, Dictionary<string, int>>();
|
#region 共通错误码
|
stateCodeDic = new Dictionary<string, int>();
|
////与服务器通讯失败
|
//stateCodeDic ["NETWORK_ERROR"] = MyInternationalizationString.FailedRequestServer;
|
////数据异常
|
//stateCodeDic ["DATA_EXCEPTION"] = MyInternationalizationString.DataExceptionPleaseTryAgain;
|
//与服务器通讯失败
|
stateCodeDic [StateCode.NETWORK_ERROR] = MyInternationalizationString.FailedRequestServer;
|
//数据异常
|
stateCodeDic [StateCode.DATA_EXCEPTION] = MyInternationalizationString.DataExceptionPleaseTryAgain;
|
#region 基础服务 新错误码 2020-12-07
|
//系统繁忙~请稍后再试~
|
stateCodeDic ["1"] = MyInternationalizationString.SystemIsBusy;
|
//系统维护中~请稍后再试~
|
stateCodeDic ["2"] = MyInternationalizationString.SystemMaintenance;
|
////服务异常
|
//stateCodeDic["3"] = MyInternationalizationString.SystemIsBusy;
|
//签名错误
|
stateCodeDic ["4"] = MyInternationalizationString.SignatureError;
|
//请求失败,参数异常!
|
stateCodeDic ["9"] = MyInternationalizationString.RequestFailedParameterException;
|
//验证码校验失败
|
stateCodeDic [StateCode.VERIFICATION_CODE_WRONG] = MyInternationalizationString.VerificationCodeWrong;
|
//验证码发送频繁,请稍后再试!
|
stateCodeDic ["15"] = MyInternationalizationString.VerificationCodeSentFrequently;
|
//验证码发送失败
|
stateCodeDic ["16"] = MyInternationalizationString.FailedToSendVerificationCode;
|
|
//会话超时,请更新token
|
stateCodeDic [StateCode.TOKEN_EXPIRED] = MyInternationalizationString.NotLogin;
|
//解析用户身份错误,请重新登录
|
stateCodeDic ["10006"] = MyInternationalizationString.InvalidToken;
|
//您已在另一个设备登录
|
stateCodeDic ["10007"] = MyInternationalizationString.LoggedOnOtherDevices;
|
//登录失败,账号或者密码错误
|
stateCodeDic ["10008"] = MyInternationalizationString.LoginFailed_AccountOrPasswordError;
|
//用户已经被禁用
|
stateCodeDic ["10009"] = MyInternationalizationString.TheAccountHasBeenDisabled;
|
//账号不存在
|
stateCodeDic [StateCode.ACCOUNT_NOT_EXIST] = MyInternationalizationString.AccountNotExist;
|
//用户未登录
|
stateCodeDic ["10011"] = MyInternationalizationString.InvalidToken;
|
//账号已存在
|
stateCodeDic ["10012"] = MyInternationalizationString.AccountExist;
|
//手机号已注册
|
stateCodeDic ["10013"] = MyInternationalizationString.AccountExist;
|
//邮箱已注册
|
stateCodeDic ["10014"] = MyInternationalizationString.AccountExist;
|
//原密码错误
|
stateCodeDic ["10015"] = MyInternationalizationString.OldPwdNoYes;
|
//绑定号码重复
|
stateCodeDic ["10016"] = MyInternationalizationString.DuplicateBindingNumber;
|
//注册失败
|
stateCodeDic ["10017"] = MyInternationalizationString.RegistrationFailedPleaseTryAgain;
|
////租户不存在
|
//stateCodeDic["10018"] = MyInternationalizationString.10018;
|
//密码错误次数过多,账号被锁定!
|
stateCodeDic ["10019"] = MyInternationalizationString.AccountLoginLock;
|
//没有权限
|
stateCodeDic ["10105"] = MyInternationalizationString.PermissionDenied;
|
//验证码已经发送
|
stateCodeDic ["10207"] = MyInternationalizationString.VerificationCodePrompt;
|
//发送验证码错误
|
stateCodeDic ["10210"] = MyInternationalizationString.VerificationCodeWrong;
|
//////数据重复
|
//stateCodeDic ["10107"] = MyInternationalizationString.DataExceptionPleaseTryAgain;
|
|
|
|
|
////枚举类型错误
|
//stateCodeDic["11003"] = MyInternationalizationString.11003;
|
|
//-------------------子账号模块-------------------
|
//子账号已经存在
|
stateCodeDic ["10301"] = MyInternationalizationString.BindSubAccount_Exist;
|
//子账号不存在
|
stateCodeDic ["10302"] = MyInternationalizationString.SubAccount_NoExists;
|
//不能把自己添加为成员
|
stateCodeDic ["10303"] = MyInternationalizationString.BindSubAccount_SameAccount;
|
////相同的远程控制
|
//stateCodeDic["10304"] = MyInternationalizationString.uOperationFailed;
|
////子账号昵称已经存在
|
//stateCodeDic["10305"] = MyInternationalizationString.BindSubAccount_Exist;
|
//-------------------住宅模块-------------------
|
//当前住宅不属于该账号
|
stateCodeDic ["10401"] = MyInternationalizationString.HomeIdAndTokenNoConsistent;
|
//住宅名称已存在
|
stateCodeDic ["10402"] = MyInternationalizationString.HomeName_Exist;
|
////住宅ID已存在
|
//stateCodeDic["10403"] = MyInternationalizationString.HOME_ID_EXISTS;
|
//住宅不存在
|
stateCodeDic ["10404"] = MyInternationalizationString.Home_NoExists;
|
//住宅没有绑定网关
|
stateCodeDic ["10503"] = MyInternationalizationString.PleaseBindTheGatewayFirst;
|
|
////调用用户模块接口失败
|
//stateCodeDic["10213"] = HDL_ON.MyInternationalizationString;
|
|
//*********网关*********
|
//网关不存在
|
stateCodeDic ["10506"] = MyInternationalizationString.GatewayDoesNotExist;
|
//mac已被绑定
|
stateCodeDic ["10510"] = MyInternationalizationString.MacHasBeenBound;
|
|
|
|
//控制失败
|
stateCodeDic ["14007"] = MyInternationalizationString.ControlFailure2;
|
//网关离线
|
stateCodeDic ["14005"] = MyInternationalizationString.GatewayOffline;
|
//设备离线
|
stateCodeDic ["14006"] = MyInternationalizationString.DeviceOffline;
|
|
//*********场景/自动化*********
|
//场景已存在
|
stateCodeDic ["14501"] = MyInternationalizationString.SceneAlreadyExists;
|
//自动化已存在
|
stateCodeDic ["14502"] = MyInternationalizationString.AutomationAlreadyExists;
|
|
//-------------------备份模块-------------------
|
//备注名称已经存在,请更换后重试!文件夹名称已经存在
|
stateCodeDic ["10601"] = SimpleControl.R.MyInternationalizationString.FileNamehasExisted;
|
//备份文件夹不存在
|
stateCodeDic ["10602"] = SimpleControl.R.MyInternationalizationString.FolderNoExist;
|
//备份文件不存在
|
stateCodeDic ["10603"] = SimpleControl.R.MyInternationalizationString.FileNoExist;
|
//备份失败
|
stateCodeDic ["10607"] = SimpleControl.R.MyInternationalizationString.FailedToBackupFile;
|
|
|
|
//*********设备*********
|
//设备目标重复
|
stateCodeDic ["10801"] = MyInternationalizationString.DuplicateDeviceTarget;
|
//没有远程控制权限
|
stateCodeDic ["10802"] = MyInternationalizationString.NoRemoteControlPermission;
|
//设备不能为空
|
stateCodeDic ["10803"] = MyInternationalizationString.TheDeviceCannotBeEmpty;
|
//用户没有设备的权限
|
stateCodeDic ["10804"] = MyInternationalizationString.NotHavePermissionToTheDevice;
|
//设备不存在
|
stateCodeDic ["10805"] = MyInternationalizationString.TheDeviceDoesNotExist;
|
|
//控制失败
|
stateCodeDic ["20000"] = MyInternationalizationString.ControlFailure;
|
//网关离线
|
stateCodeDic ["20001"] = MyInternationalizationString.GatewayOffline;
|
//设备离线
|
stateCodeDic ["20002"] = MyInternationalizationString.DeviceOffline;
|
//spk不支持该功能
|
stateCodeDic ["20101"] = MyInternationalizationString.SpkNotSupportThisFeature;
|
//spk功能不支持此功能值
|
stateCodeDic ["20102"] = MyInternationalizationString.SpkNotSupportThisFunctionValue;
|
|
|
|
#endregion
|
|
#endregion
|
|
|
}
|
|
/// <summary>
|
/// 根据接口的状态码,翻译返回信息
|
/// </summary>
|
/// <param name="requestName">接口</param>
|
/// <param name="revertObj">云端返回的数据</param>
|
/// <param name="pra">请求参数</param>
|
/// <returns></returns>
|
public string GetMsgByRequestName(string statuCode)
|
{
|
if (IgnoreError == true)
|
{
|
//无视错误
|
return null;
|
}
|
|
//共通码
|
if (stateCodeDic.ContainsKey(statuCode) == true)
|
{
|
return Language.StringByID(stateCodeDic[statuCode]);
|
}
|
|
//if (dicMsg.ContainsKey(requestName) == true && dicMsg[requestName].ContainsKey(statuCode) == true)
|
//{
|
// //在册的Msg
|
// return Language.StringByID(dicMsg[requestName][statuCode]);
|
//}
|
|
return ErrorCode.FailedRequestServer + "\n(" + statuCode + ")";
|
}
|
|
|
/// <summary>
|
/// 弹窗提示网络请求错误信息
|
/// </summary>
|
/// <param name="requestName"></param>
|
/// <param name="statuCode"></param>
|
/// <param name="isTipStyle"></param>
|
/// <param name="tipStr">补充的错误提示</param>
|
public void ShowErrorInfoAlter(string statuCode, bool isTipStyle = true, int closeTime = 2, string tipStr = "")
|
{
|
try
|
{
|
//如果是token过期则刷新token
|
if (statuCode == StateCode.TOKEN_EXPIRED)
|
{
|
StartRefreshToken();
|
}
|
else
|
{
|
string mes = GetMsgByRequestName(statuCode);
|
if (mes == null) return;
|
if (!string.IsNullOrEmpty(tipStr))
|
{
|
mes = tipStr + "\n" + mes;
|
}
|
if (isTipStyle)
|
{
|
Application.RunOnMainThread(() =>
|
{
|
//弹出Tip提示
|
Utlis.ShowTip (mes);
|
});
|
}
|
else
|
{
|
Application.RunOnMainThread(() =>
|
{
|
new Alert("", mes+$" \r\nCode:{statuCode}", Language.StringByID(MyInternationalizationString.Close)).Show();
|
});
|
}
|
}
|
}
|
catch { }
|
}
|
|
/// <summary>
|
/// StartRefreshToken
|
/// </summary>
|
public void StartRefreshToken()
|
{
|
if (isGetingToken) return;
|
|
new System.Threading.Thread(() =>
|
{
|
isGetingToken = true;
|
|
try
|
{
|
var success = new HttpServerRequest().RefreshToken();
|
if (success == StateCode.SUCCESS) {
|
Utlis.WriteLine("RefreshToken success");
|
}
|
}
|
catch
|
{
|
}
|
finally
|
{
|
isGetingToken = false;
|
}
|
})
|
{ IsBackground = true }.Start();
|
|
}
|
}
|
|
/// <summary>
|
/// 常用状态码管理
|
/// </summary>
|
public class StateCode
|
{
|
/// <summary>
|
/// 网络请求异常
|
/// APP自定义错误码
|
/// </summary>
|
public const string NETWORK_ERROR = "-1";
|
/// <summary>
|
/// 数据解析错误
|
/// APP自定义错误码
|
/// </summary>
|
public const string DATA_EXCEPTION = "-2";
|
/// <summary>
|
/// 请求成功的状态码
|
/// </summary>
|
public const string SUCCESS = "0";
|
/// <summary>
|
/// 验证码校验失败
|
/// </summary>
|
public const string VERIFICATION_CODE_WRONG = "14";
|
/// <summary>
|
/// 会话超时,请更新token
|
/// </summary>
|
public const string TOKEN_EXPIRED = "10001";
|
/// <summary>
|
/// 账号不存在的错误码
|
/// </summary>
|
public const string ACCOUNT_NOT_EXIST = "10010";
|
/// <summary>
|
/// 登录锁定,密码错误次数过多
|
/// 密码输入错误超过10次,请30分钟后重试!
|
/// </summary>
|
public const string AccountLoginLock = "10019";
|
|
|
|
}
|
}
|