You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
235 lines
8.0 KiB
235 lines
8.0 KiB
/*
|
|
Sog 游戏基础库
|
|
2016 by zouwei
|
|
*/
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading;
|
|
|
|
using Sog;
|
|
using SimpleHttpServer;
|
|
using Sog.Service;
|
|
using Sog.Log;
|
|
|
|
namespace HttpProxyPay
|
|
{
|
|
// 服务器入口
|
|
public class HttpProxyPayServer : IScript
|
|
{
|
|
private Guid m_guid;
|
|
private ServerApp m_app;
|
|
private HttpProxyPayMsgHandler m_messageHandler;
|
|
|
|
private long m_tickSecondMs;
|
|
|
|
public HttpProxyPayServer()
|
|
{
|
|
m_guid = Guid.NewGuid();
|
|
}
|
|
public IScriptHotfixCheck GetScriptHotfixCheck()
|
|
{
|
|
return new ServerScriptHotfixCheck();
|
|
}
|
|
private void CommInitOnCreateReload(ServerApp app)
|
|
{
|
|
m_app = app;
|
|
|
|
RegisterAllService();
|
|
|
|
DBServerSelect.Init(app);
|
|
}
|
|
|
|
private void StartSimpleHttpServer()
|
|
{
|
|
var route_config = new List<Route>()
|
|
{
|
|
new Route {Name = "HeroPay", UrlRegex = @"^/heropay_sea/$", Method = "POST",
|
|
Callable = HeroPayHttpHandler.HeroPayCallback_SEA},
|
|
new Route {Name = "HeroPay", UrlRegex = @"^/heropay_jp/$", Method = "POST",
|
|
Callable = HeroPayHttpHandler.HeroPayCallback_JP},
|
|
new Route {Name = "HeroPay", UrlRegex = @"^/heropay_kr/$", Method = "POST",
|
|
Callable = HeroPayHttpHandler.HeroPayCallback_KR},
|
|
new Route {Name = "HeroPay", UrlRegex = @"^/heropay_zh/$", Method = "POST",
|
|
Callable = HeroPayHttpHandler.HeroPayCallback_ZH},
|
|
new Route {Name = "HeroPay", UrlRegex = @"^/heropay_jp2/$", Method = "POST",
|
|
Callable = HeroPayHttpHandler.HeroPayCallback_JP2},
|
|
new Route {Name = "HeroPay", UrlRegex = @"^/heropay_en/$", Method = "POST",
|
|
Callable = HeroPayHttpHandler.HeroPayCallback_EN},
|
|
new Route {Name = "Hero AD Playback", UrlRegex = @"^/AdPlayback/",Method = "GET",
|
|
Callable = HeroPayHttpHandler.HomeAdCallBack},
|
|
new Route {Name = "Mini pay", UrlRegex = @"/MiniPayback",Method = "POST",
|
|
Callable = HeroPayHttpHandler.HomeMiniCallBack},
|
|
new Route {Name = "Mini pay", UrlRegex = @"/MiniPayback",Method = "GET",
|
|
Callable = HeroPayHttpHandler.HomeMiniCallBack},
|
|
new Route {Name = "Mini pay", UrlRegex = @"/MiniJSAPIPayback",Method = "POST",
|
|
Callable = WXHandler.HomeMiniJSAPICallBack},
|
|
new Route {Name = "Mini pay", UrlRegex = @"/MiniJSAPICall",Method = "GET",
|
|
Callable = WXHandler.MiniJSAPICall}
|
|
};
|
|
|
|
HttpServer httpServer = new HttpServer(31006, route_config);
|
|
//等待5秒钟再关系线程,防止线程结束网络对象被垃圾回收
|
|
httpServer.ProcessorThreadEndWaitTimeMs = 5000;
|
|
Thread thread = new Thread(httpServer.Listen);
|
|
//设置成后台线程,如果不是后台线程,线程不是主动关闭,则会一直运行,那怕进程主线程退出也没用
|
|
thread.IsBackground = true;
|
|
thread.Start();
|
|
|
|
TraceLog.Debug("HttpProxyPayServer.StartSimpleHttpServer listen on 31006");
|
|
}
|
|
|
|
public virtual void OnCreate(ServerApp app)
|
|
{
|
|
TraceLog.Debug("HttpProxyPayServer.OnCreate at {0}, guid {1}", DateTime.Now, m_guid);
|
|
|
|
app.GetCluster().NeedLogMsgStat = true;
|
|
|
|
//多线程特殊需求
|
|
app.GetCluster().EnableMultiThreadSendSafe();
|
|
|
|
m_app = app;
|
|
|
|
RegisterAllDataObj();
|
|
|
|
CommInitOnCreateReload(app);
|
|
|
|
// 注意httpsvr目前不支持reload
|
|
StartSimpleHttpServer();
|
|
}
|
|
|
|
public virtual void OnHotfix(ServerApp app)
|
|
{
|
|
TraceLog.Debug("HttpProxyPayServer.OnHotfix at {0}, guid {1}", DateTime.Now, m_guid);
|
|
|
|
m_app = app;
|
|
|
|
ReadServerConfig();
|
|
CommInitOnCreateReload(app);
|
|
}
|
|
|
|
public virtual void OnReloadConfig(string excelConfigFile)
|
|
{
|
|
TraceLog.Debug("HttpProxyPayServer.OnReloadConfig at {0}", DateTime.Now);
|
|
|
|
ReadServerConfig();
|
|
}
|
|
|
|
private void TickSecond(long nowMs, long nowSec)
|
|
{
|
|
if (nowMs < m_tickSecondMs + 1000)
|
|
{
|
|
return;
|
|
}
|
|
|
|
m_tickSecondMs = nowMs;
|
|
|
|
HeroUSDKSvc.Tick(nowMs);
|
|
HttpContextCache.TickTimeoutClient(nowSec);
|
|
}
|
|
|
|
public virtual void OnTick(long nowMs)
|
|
{
|
|
ServerStat.Instance.Tick(nowMs);
|
|
|
|
long nowSec = m_app.GetTimeSecond();
|
|
TickSecond(nowMs, nowSec);
|
|
}
|
|
|
|
public virtual void OnMessage(uint remoteAppID, MessageData message)
|
|
{
|
|
m_messageHandler.HandlerMessage(remoteAppID, message);
|
|
}
|
|
|
|
public virtual void OnStop()
|
|
{
|
|
//很多服务器停服可以直接退出
|
|
m_app.SetStopSuccess();
|
|
|
|
//关闭所有消息处理任务
|
|
MessageTaskDistributor.Instance.CloseAllTask();
|
|
}
|
|
|
|
//所有引用对象置空
|
|
public void Dispose()
|
|
{
|
|
TraceLog.Debug("HttpProxyPayServer.Dispose");
|
|
|
|
m_app = null;
|
|
m_messageHandler = null;
|
|
|
|
//关闭所有消息处理任务
|
|
MessageTaskDistributor.Instance.CloseAllTask();
|
|
}
|
|
|
|
private void ReadServerConfig()
|
|
{
|
|
//读取配置文件
|
|
string strLogicServerConfig = m_app.GetCluster().GetAppConfigPath() + "/" + m_app.AppParam.ServerConfig.configfile;
|
|
HttpProxyPayServerConfig serverConfig = ServerConfigMgr.Instance.ReloadServerConfig<HttpProxyPayServerConfig>(m_app,strLogicServerConfig);
|
|
|
|
var svrData = HttpProxyPayServerUtils.GetHttpProxyServerData();
|
|
svrData.selfPayId = serverConfig.selfPayId;
|
|
svrData.SetPayUrlConfig(serverConfig.payUrls);
|
|
}
|
|
|
|
private void RegisterAllDataObj()
|
|
{
|
|
HttpProxyPayServerData serverData = new HttpProxyPayServerData(m_app);
|
|
ServerDataObjMgr.Instance.RegisterDataObj(serverData);
|
|
|
|
PlayerTable playerTable = new PlayerTable();
|
|
ServerDataObjMgr.Instance.RegisterDataObj(playerTable);
|
|
|
|
ReadServerConfig();
|
|
|
|
GameConfigMgr.Instance.ReadAllConfig();
|
|
AppTime.UpdateGameResetHour(CommParamDescMgr.Instance.CrossDaysTime.int_val);
|
|
}
|
|
|
|
private void RegisterAllService()
|
|
{
|
|
TraceLog.Debug("HttpProxyPayServer.RegisterAllService");
|
|
|
|
InitMessageTask();
|
|
|
|
m_messageHandler = new HttpProxyPayMsgHandler(m_app);
|
|
ServiceMgr.Instance.RegisterService(m_messageHandler);
|
|
|
|
GmCmdSvc gmCmdSvc = new GmCmdSvc();
|
|
ServiceMgr.Instance.RegisterService(gmCmdSvc);
|
|
|
|
PlayerTableOp playerTableOp = new PlayerTableOp(HttpProxyPayServerUtils.GetPlayerTable());
|
|
ServiceMgr.Instance.RegisterService(playerTableOp);
|
|
|
|
HttpProxyPayServerConfig config = HttpProxyPayServerUtils.GetServerConfig();
|
|
|
|
// 英雄usdk
|
|
HeroUSDKSvc.Init(config);
|
|
|
|
// 英雄支付回调的key
|
|
HeroPayHttpHandler.Init(config);
|
|
|
|
// 华为支付
|
|
HuaweiPaySvc.Init(config.huaweiClientId, config.huaweiClientSecret
|
|
, config.huaweiPayCheckUrl, config.huaweiGetTokenUrl);
|
|
// 获取一次Token
|
|
HuaweiPaySvc.GetAppAccessToken();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 初始化消息处理任务
|
|
/// </summary>
|
|
private void InitMessageTask()
|
|
{
|
|
uint iTotalTaskCount = HttpProxyPayServerUtils.HttpWorkThreadCount;
|
|
|
|
TraceLog.Debug("HttpProxyPayServer.InitMessageTask messageTaskCount is {0}", iTotalTaskCount);
|
|
|
|
MessageTaskDistributor.Instance.InitTask(iTotalTaskCount);
|
|
|
|
MessageTaskDistributor.Instance.StartAllTask(MessageTaskHandler.HandlerPacket);
|
|
}
|
|
|
|
}
|
|
}
|
|
|