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