ProxyBase.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. using System;
  2. using UnityEngine;
  3. using UnityGameFramework.Runtime;
  4. using Newtonsoft.Json.Linq;
  5. using System.Threading.Tasks;
  6. using System.Threading;
  7. /// <summary>
  8. /// 通讯代理类,基类
  9. /// </summary>
  10. /// <typeparam name="T"></typeparam>
  11. public class ProxyBase<T> where T : ProxyBase<T>, new()
  12. {
  13. ///// <summary>
  14. ///// 客户端版本号
  15. ///// </summary>
  16. //private string Clientver = "";
  17. /// <summary>
  18. /// 操作码,各个实例拥有自己的操作码
  19. /// </summary>
  20. public int opeCode { get; protected set; } = 0;
  21. #region 单例
  22. private static T mInst = default(T);
  23. public static T Instance
  24. {
  25. get
  26. {
  27. if (null == mInst)
  28. {
  29. mInst = new T();
  30. }
  31. return mInst;
  32. }
  33. }
  34. #endregion
  35. /// <summary>
  36. /// 向服务端发送消息
  37. /// </summary>
  38. /// <param name="cmd"></param>
  39. /// <param name="args"></param>
  40. /// <param name="callback"></param>
  41. /// <param name="onfail"></param>
  42. public void Post(int cmd, object[] args, Action<RespVo> callback, Action<object> onfail = null)
  43. {
  44. Post<RespVo>(cmd, args, callback, msg => onfail?.Invoke(msg));
  45. }
  46. /// <summary>
  47. /// 向服务端发送消息
  48. /// </summary>
  49. /// <param name="cmd"></param>
  50. /// <param name="uid"></param>
  51. /// <param name="zoneid"></param>
  52. /// <param name="args"></param>
  53. /// <param name="callback"></param>
  54. /// <param name="onfail"></param>
  55. public void Post(int cmd, string uid, int zoneid, object[] args, Action<RespVo> callback, Action<object> onfail = null)
  56. {
  57. Post<RespVo>(cmd, uid, zoneid, args, callback, msg => onfail?.Invoke(msg));
  58. return;
  59. #region
  60. //if (GameCfg.CloseServer)
  61. //{
  62. // LogHelper.Log("游戏停服");
  63. // return;
  64. //}
  65. //NetHelper.Instance.Post(0, new ReqVo(opeCode, cmd, uid, zoneid, args),
  66. // GlobalConfig.Net_Connect_TimeOut_sec,
  67. // resp =>
  68. // {
  69. // if (resp.err == ErrCode.succeed)
  70. // {
  71. // if (!(cmd == CmdCode.cmd_user_loginuserinfo || cmd == CmdCode.cmd_user_registerNewRole) && resp.result.TryGetValue("store", out var store))
  72. // {
  73. // UserProxy.Instance.player.InitFromStore((JObject)store);
  74. // }
  75. // callback?.Invoke(resp); // 先执行结果通知
  76. // EventComponent eventCmpt = GameEntry.GetComponent<EventComponent>();
  77. // resp.events.ForEach(ev =>
  78. // {
  79. // switch (ev.name)
  80. // {
  81. // case Enum_EventType.TaskCardFinished: // 任务卡完成dwddd
  82. // eventCmpt?.FireNow(this, new TaskCardEventFinish(ev.arg1, ev.arg2));
  83. // break;
  84. // case Enum_EventType.TaskCardActived: // 任务卡激活
  85. // eventCmpt?.FireNow(this, new TaskCardEventAtive(ev.arg1, ev.arg2));
  86. // break;
  87. // case Enum_EventType.TaskCardReward: // 任务卡领取奖励
  88. // eventCmpt?.FireNow(this, new TaskCardEventReward(ev.arg1, ev.arg2));
  89. // break;
  90. // case Enum_EventType.MissionStepComplete: // 任务卡-任务步骤完成
  91. // eventCmpt?.FireNow(this, new TaskEventStepFinish(ev.arg1, ev.arg2));
  92. // break;
  93. // case Enum_EventType.MissionStepProcess: // 任务卡 - 进度更新
  94. // eventCmpt?.FireNow(this, new TaskEventStepProcess(ev.arg1, ev.arg2));
  95. // break;
  96. // case Enum_EventType.AddItem: // 获得道具
  97. // eventCmpt?.FireNow(this, new User_AddItemEvent(ev.arg1, ev.arg2));
  98. // break;
  99. // case Enum_EventType.RemoveItem: // 移除道具
  100. // break;
  101. // case Enum_EventType.AddTaskItem: // 添加任务卡
  102. // eventCmpt?.FireNow(this, new TaskCardEventAdd(ev.arg1, ev?.arg2 ?? null));
  103. // break;
  104. // case Enum_EventType.RemoveTaskItem: // 移除任务卡
  105. // break;
  106. // case Enum_EventType.StartPlot: // 开启剧情对话
  107. // eventCmpt?.FireNow(this, new StartPlotScene(Convert.ToInt32(ev.arg1), Convert.ToInt32(ev.arg2)));
  108. // break;
  109. // case Enum_EventType.NpcDialog: // 开启NPC对话
  110. // eventCmpt?.FireNow(this, new StartPlotNPC(Convert.ToInt32(ev.arg1), Convert.ToInt32(ev.arg2)));
  111. // break;
  112. // case Enum_EventType.UnlockBuild:
  113. // UserProxy.Instance.player.PrivateState.unlockedBuild.Add(Convert.ToInt32(ev.arg1)); // 同步已解锁建筑id
  114. // BuildManager.UnlockBuild(Convert.ToInt32(ev.arg1));
  115. // eventCmpt?.FireNow(this, new BuildUnlockEvent(ev.arg1, ev.arg2));
  116. // break;
  117. // case Enum_EventType.UnlockMap:
  118. // eventCmpt?.FireNow(this, new MapUnlockEvent(ev.arg1, ev.arg2));
  119. // break;
  120. // case Enum_EventType.UserLvlUP:
  121. // eventCmpt?.FireNow(this, new UserLvlUpEvent(ev.arg1, ev.arg2));
  122. // break;
  123. // case Enum_EventType.HeroLvlUp:
  124. // eventCmpt?.FireNow(this, new HeroLvlUpEvent(ev.arg1, ev.arg2));
  125. // eventCmpt?.FireNow(this, new HeroHPMPRefreshEvent());
  126. // break;
  127. // case Enum_EventType.HeroTupo:
  128. // eventCmpt?.FireNow(this, new HeroTupoEvent(ev.arg1, ev.arg2));
  129. // eventCmpt?.FireNow(this, new HeroHPMPRefreshEvent());
  130. // break;
  131. // case Enum_EventType.WeaponLvUp:
  132. // eventCmpt?.FireNow(this, new WuqiLvlUpEvent());
  133. // eventCmpt?.FireNow(this, new HeroHPMPRefreshEvent());
  134. // break;
  135. // case Enum_EventType.WeaponTuPo:
  136. // eventCmpt?.FireNow(this, new WuqiTupoEvent());
  137. // eventCmpt?.FireNow(this, new HeroHPMPRefreshEvent());
  138. // break;
  139. // case Enum_EventType.YanLingLvUp:
  140. // eventCmpt?.FireNow(this, new YanLingLvlUpEvent());
  141. // eventCmpt?.FireNow(this, new HeroHPMPRefreshEvent());
  142. // break;
  143. // case Enum_EventType.YanLingTuPo:
  144. // eventCmpt?.FireNow(this, new YanLingTupoEvent());
  145. // eventCmpt?.FireNow(this, new HeroHPMPRefreshEvent());
  146. // break;
  147. // case Enum_EventType.PaySuccess:
  148. // eventCmpt?.FireNow(this, new PaySuccessEvent());
  149. // break;
  150. // }
  151. // });
  152. // }
  153. // else
  154. // {
  155. // onfail?.Invoke(resp); // 先回调业务层错误处理
  156. // var errNo = resp.err;
  157. // var msg = resp.tag.TryGetValue("errmsg",out var j)?j.ToString() : "";
  158. // if (errNo == 3510) // 糊了一个补丁, 任务卡未找到是因为重复发送领取奖励导致的,但是流程上不好处理,-gwang 2021年3月4日17:22:55
  159. // {
  160. // }
  161. // else if (errNo == 1021)
  162. // {
  163. // UI_CueDialog.Instance().Open("消息超时,或者本地设备时间与现实时间差距较大!", "错误", E_DialogType.OneButton, () =>
  164. // {
  165. // LogHelper.Log("Exiting");
  166. // Application.Quit();
  167. // });
  168. // }
  169. // if (GameConfigData.IsReady)
  170. // { // 错误处理模块
  171. // if (GameConfigData.Ins.errmsg.ContainsKey(resp.err))
  172. // {
  173. // var errInfo = GameConfigData.Ins.errmsg[resp.err];
  174. // if (null != errInfo)
  175. // {
  176. // msg = string.IsNullOrEmpty(msg) ? errInfo.msg : msg;
  177. // if (errInfo.type == 1)
  178. // { // 错误类型为重启
  179. // UI_CueDialog.Instance().Open(msg, "错误", E_DialogType.OneButton, () =>
  180. // {
  181. // LogHelper.Log("Exiting");
  182. // Application.Quit();
  183. // });
  184. // }
  185. // else if (errInfo.type == 0)
  186. // {
  187. // UI_TipsWindow.InitFloatWaringDialog("警告:" + msg);
  188. // }
  189. // }
  190. // }
  191. // }
  192. // }
  193. // });
  194. #endregion
  195. }
  196. /// <summary>
  197. /// 向服务端发送消息
  198. /// </summary>
  199. /// <param name="cmd"></param>
  200. /// <param name="uid"></param>
  201. /// <param name="zoneid"></param>
  202. /// <param name="args"></param>
  203. /// <param name="callback"></param>
  204. /// <param name="onfail"></param>
  205. public void Post<T>(int cmd, string uid, int zoneid, object[] args, Action<T> callback, Action<string> onfail = null)
  206. {
  207. if (GameCfg.CloseServer)
  208. {
  209. LogHelper.Log("游戏停服");
  210. return;
  211. }
  212. HttpHelper.Instance.SendMsg(new ReqVo(opeCode, cmd, uid, zoneid, args), callback);
  213. }
  214. public void Post<T>(int cmd, object[] args, Action<T> callback, Action<string> onfail = null)
  215. {
  216. if (GameCfg.CloseServer)
  217. {
  218. LogHelper.Log("游戏停服");
  219. return;
  220. }
  221. var p = UserProxy.Instance.player;
  222. string uid = p.uid;
  223. int zoneid = p.zoneid;
  224. HttpHelper.Instance.SendMsg(new ReqVo(opeCode, cmd, uid, zoneid, args, p.TK), callback);
  225. }
  226. }