using System; using UnityEngine; using UnityGameFramework.Runtime; using Newtonsoft.Json.Linq; using System.Threading.Tasks; using System.Threading; /// /// 通讯代理类,基类 /// /// public class ProxyBase where T : ProxyBase, new() { ///// ///// 客户端版本号 ///// //private string Clientver = ""; /// /// 操作码,各个实例拥有自己的操作码 /// public int opeCode { get; protected set; } = 0; #region 单例 private static T mInst = default(T); public static T Instance { get { if (null == mInst) { mInst = new T(); } return mInst; } } #endregion /// /// 向服务端发送消息 /// /// /// /// /// public void Post(int cmd, object[] args, Action callback, Action onfail = null) { Post(cmd, args, callback, msg => onfail?.Invoke(msg)); } /// /// 向服务端发送消息 /// /// /// /// /// /// /// public void Post(int cmd, string uid, int zoneid, object[] args, Action callback, Action onfail = null) { Post(cmd, uid, zoneid, args, callback, msg => onfail?.Invoke(msg)); return; #region //if (GameCfg.CloseServer) //{ // LogHelper.Log("游戏停服"); // return; //} //NetHelper.Instance.Post(0, new ReqVo(opeCode, cmd, uid, zoneid, args), // GlobalConfig.Net_Connect_TimeOut_sec, // resp => // { // if (resp.err == ErrCode.succeed) // { // if (!(cmd == CmdCode.cmd_user_loginuserinfo || cmd == CmdCode.cmd_user_registerNewRole) && resp.result.TryGetValue("store", out var store)) // { // UserProxy.Instance.player.InitFromStore((JObject)store); // } // callback?.Invoke(resp); // 先执行结果通知 // EventComponent eventCmpt = GameEntry.GetComponent(); // resp.events.ForEach(ev => // { // switch (ev.name) // { // case Enum_EventType.TaskCardFinished: // 任务卡完成dwddd // eventCmpt?.FireNow(this, new TaskCardEventFinish(ev.arg1, ev.arg2)); // break; // case Enum_EventType.TaskCardActived: // 任务卡激活 // eventCmpt?.FireNow(this, new TaskCardEventAtive(ev.arg1, ev.arg2)); // break; // case Enum_EventType.TaskCardReward: // 任务卡领取奖励 // eventCmpt?.FireNow(this, new TaskCardEventReward(ev.arg1, ev.arg2)); // break; // case Enum_EventType.MissionStepComplete: // 任务卡-任务步骤完成 // eventCmpt?.FireNow(this, new TaskEventStepFinish(ev.arg1, ev.arg2)); // break; // case Enum_EventType.MissionStepProcess: // 任务卡 - 进度更新 // eventCmpt?.FireNow(this, new TaskEventStepProcess(ev.arg1, ev.arg2)); // break; // case Enum_EventType.AddItem: // 获得道具 // eventCmpt?.FireNow(this, new User_AddItemEvent(ev.arg1, ev.arg2)); // break; // case Enum_EventType.RemoveItem: // 移除道具 // break; // case Enum_EventType.AddTaskItem: // 添加任务卡 // eventCmpt?.FireNow(this, new TaskCardEventAdd(ev.arg1, ev?.arg2 ?? null)); // break; // case Enum_EventType.RemoveTaskItem: // 移除任务卡 // break; // case Enum_EventType.StartPlot: // 开启剧情对话 // eventCmpt?.FireNow(this, new StartPlotScene(Convert.ToInt32(ev.arg1), Convert.ToInt32(ev.arg2))); // break; // case Enum_EventType.NpcDialog: // 开启NPC对话 // eventCmpt?.FireNow(this, new StartPlotNPC(Convert.ToInt32(ev.arg1), Convert.ToInt32(ev.arg2))); // break; // case Enum_EventType.UnlockBuild: // UserProxy.Instance.player.PrivateState.unlockedBuild.Add(Convert.ToInt32(ev.arg1)); // 同步已解锁建筑id // BuildManager.UnlockBuild(Convert.ToInt32(ev.arg1)); // eventCmpt?.FireNow(this, new BuildUnlockEvent(ev.arg1, ev.arg2)); // break; // case Enum_EventType.UnlockMap: // eventCmpt?.FireNow(this, new MapUnlockEvent(ev.arg1, ev.arg2)); // break; // case Enum_EventType.UserLvlUP: // eventCmpt?.FireNow(this, new UserLvlUpEvent(ev.arg1, ev.arg2)); // break; // case Enum_EventType.HeroLvlUp: // eventCmpt?.FireNow(this, new HeroLvlUpEvent(ev.arg1, ev.arg2)); // eventCmpt?.FireNow(this, new HeroHPMPRefreshEvent()); // break; // case Enum_EventType.HeroTupo: // eventCmpt?.FireNow(this, new HeroTupoEvent(ev.arg1, ev.arg2)); // eventCmpt?.FireNow(this, new HeroHPMPRefreshEvent()); // break; // case Enum_EventType.WeaponLvUp: // eventCmpt?.FireNow(this, new WuqiLvlUpEvent()); // eventCmpt?.FireNow(this, new HeroHPMPRefreshEvent()); // break; // case Enum_EventType.WeaponTuPo: // eventCmpt?.FireNow(this, new WuqiTupoEvent()); // eventCmpt?.FireNow(this, new HeroHPMPRefreshEvent()); // break; // case Enum_EventType.YanLingLvUp: // eventCmpt?.FireNow(this, new YanLingLvlUpEvent()); // eventCmpt?.FireNow(this, new HeroHPMPRefreshEvent()); // break; // case Enum_EventType.YanLingTuPo: // eventCmpt?.FireNow(this, new YanLingTupoEvent()); // eventCmpt?.FireNow(this, new HeroHPMPRefreshEvent()); // break; // case Enum_EventType.PaySuccess: // eventCmpt?.FireNow(this, new PaySuccessEvent()); // break; // } // }); // } // else // { // onfail?.Invoke(resp); // 先回调业务层错误处理 // var errNo = resp.err; // var msg = resp.tag.TryGetValue("errmsg",out var j)?j.ToString() : ""; // if (errNo == 3510) // 糊了一个补丁, 任务卡未找到是因为重复发送领取奖励导致的,但是流程上不好处理,-gwang 2021年3月4日17:22:55 // { // } // else if (errNo == 1021) // { // UI_CueDialog.Instance().Open("消息超时,或者本地设备时间与现实时间差距较大!", "错误", E_DialogType.OneButton, () => // { // LogHelper.Log("Exiting"); // Application.Quit(); // }); // } // if (GameConfigData.IsReady) // { // 错误处理模块 // if (GameConfigData.Ins.errmsg.ContainsKey(resp.err)) // { // var errInfo = GameConfigData.Ins.errmsg[resp.err]; // if (null != errInfo) // { // msg = string.IsNullOrEmpty(msg) ? errInfo.msg : msg; // if (errInfo.type == 1) // { // 错误类型为重启 // UI_CueDialog.Instance().Open(msg, "错误", E_DialogType.OneButton, () => // { // LogHelper.Log("Exiting"); // Application.Quit(); // }); // } // else if (errInfo.type == 0) // { // UI_TipsWindow.InitFloatWaringDialog("警告:" + msg); // } // } // } // } // } // }); #endregion } /// /// 向服务端发送消息 /// /// /// /// /// /// /// public void Post(int cmd, string uid, int zoneid, object[] args, Action callback, Action onfail = null) { if (GameCfg.CloseServer) { LogHelper.Log("游戏停服"); return; } HttpHelper.Instance.SendMsg(new ReqVo(opeCode, cmd, uid, zoneid, args), callback); } public void Post(int cmd, object[] args, Action callback, Action onfail = null) { if (GameCfg.CloseServer) { LogHelper.Log("游戏停服"); return; } var p = UserProxy.Instance.player; string uid = p.uid; int zoneid = p.zoneid; HttpHelper.Instance.SendMsg(new ReqVo(opeCode, cmd, uid, zoneid, args, p.TK), callback); } }