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.
234 lines
9.4 KiB
234 lines
9.4 KiB
1 month ago
|
using Org.BouncyCastle.Ocsp;
|
||
|
using ProtoCSStruct;
|
||
|
using Sog;
|
||
|
using System;
|
||
|
|
||
|
namespace Game
|
||
|
{
|
||
|
public class HomeAdHandler : BasePacketHandler
|
||
|
{
|
||
|
public override void Dispose()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public override int GetServiceType()
|
||
|
{
|
||
|
return GameServiceType.HomeAdHandler;
|
||
|
}
|
||
|
|
||
|
public override void HandlerClientPacket(PlayerSession playerSession, StructPacket packet)
|
||
|
{
|
||
|
PlayerOnGame player = playerSession.Player;
|
||
|
if (player == null)
|
||
|
{
|
||
|
TraceLog.Error($"HomeAdHandler.HandlerClientPacket player is null sessionid {playerSession.SessionID}");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
switch (packet.MsgID)
|
||
|
{
|
||
|
case (int)CSGameMsgID.AdGetInfoReq: //获取信息
|
||
|
OnAdGetInfo(player, packet);
|
||
|
break;
|
||
|
case (int)CSGameMsgID.HomeadAdPassReq:
|
||
|
OnHomeadAdPassReq(player, packet);
|
||
|
break;
|
||
|
case (int)CSGameMsgID.AdStartReq:
|
||
|
OnADStart(player, packet);
|
||
|
break;
|
||
|
case (int)CSGameMsgID.AdEndReq:
|
||
|
OnADEnd(player, packet);
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public override void HandlerServerPacket(uint serverID, StructPacket packet)
|
||
|
{
|
||
|
switch (packet.MsgID)
|
||
|
{
|
||
|
case (int)SSGameMsgID.HomeAdSendAwardSyn:
|
||
|
OnCallBackHomeAdSendAwardSyn(serverID, packet);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void OnCallBackHomeAdSendAwardSyn(uint serverID, StructPacket packet)
|
||
|
{
|
||
|
var player = GameServerUtils.GetPlayerTableOp().GetPlayerByUid(packet.ObjectID);
|
||
|
if (player == null)
|
||
|
{
|
||
|
TraceLog.Error("HomeAdHandler.OnCallBackHomeAdSendAwardSyn player is null:{0}", packet.ObjectID);
|
||
|
return;
|
||
|
}
|
||
|
var type = player.RoleData.HomeAd.AdvId;
|
||
|
OnHomeAdSendAwardSyn(player, type);
|
||
|
}
|
||
|
|
||
|
private void OnHomeAdSendAwardSyn(PlayerOnGame player, int advId)
|
||
|
{
|
||
|
//判断次数,冷却
|
||
|
AdvertisementConfigDesc infoDesc = AdvertisementConfigDescMgr.Instance.GetConfigByInternal(advId);
|
||
|
if (infoDesc == null)
|
||
|
{
|
||
|
TraceLog.Error("HomeAdHandler.OnHomeAdSendAwardSyn noConf userId {0} type {1}", player.UserID, advId);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
int index = -1;
|
||
|
for (int i = 0; i < player.RoleData.HomeAd.Infos.Count; i++)
|
||
|
{
|
||
|
if (player.RoleData.HomeAd.Infos[i].Id == advId)
|
||
|
{
|
||
|
index = i;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
long nowTime = GameServerUtils.GetTimeSecond();
|
||
|
if (index != -1)
|
||
|
{
|
||
|
var times=HomeAdSvc.GetAdvTimes(player, infoDesc);
|
||
|
|
||
|
if (player.RoleData.HomeAd.Infos[index].GetCount >=times)
|
||
|
{
|
||
|
TraceLog.Error(
|
||
|
"HomeAdHandler.OnHomeAdSendAwardSyn adverTimes userId {0} type {1} index {2} AdId {3} GetCount {4} adverTimes {5}",
|
||
|
player.UserID, advId, index, player.RoleData.HomeAd.AdvToken.GetString(),
|
||
|
player.RoleData.HomeAd.Infos[index].GetCount, times);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (player.RoleData.HomeAd.Infos[index].ColdTime > nowTime)
|
||
|
{
|
||
|
TraceLog.Error(
|
||
|
"HomeAdHandler.OnHomeAdSendAwardSyn coldTime userId {0} type {1} index {2} AdId {3} ColdTime {4} nowTime {5}",
|
||
|
player.UserID, advId, index, player.RoleData.HomeAd.AdvToken.GetString(),
|
||
|
player.RoleData.HomeAd.Infos[index].ColdTime, nowTime);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
TraceLog.Trace("HomeAdHandler.OnHomeAdSendAwardSyn into userId {0} type {1} index {2} AdId {3}",
|
||
|
player.UserID, advId, index, player.RoleData.HomeAd.AdvToken.GetString());
|
||
|
//发送广告已经播放完毕的协议
|
||
|
CSHomeAdLoadSyn adEndSyn = new CSHomeAdLoadSyn();
|
||
|
adEndSyn.AdToken.SetString(player.RoleData.HomeAd.AdvToken.GetString());
|
||
|
player.SendToClient((int)CSGameMsgID.HomeadAdLoadSyn, ref adEndSyn);
|
||
|
|
||
|
TraceLog.Trace("HomeAdHandler.OnHomeAdSendAwardSyn res userId {0} type {1} index {2} AdId {3}",
|
||
|
player.UserID, advId, index, player.RoleData.HomeAd.AdvToken.GetString());
|
||
|
|
||
|
//添加次数,刷新冷却
|
||
|
if (index == -1)
|
||
|
{
|
||
|
DBADInfo tempData = new DBADInfo();
|
||
|
tempData.Id = advId;
|
||
|
tempData.ColdTime = nowTime + infoDesc.adverCd;
|
||
|
tempData.GetCount = 1;
|
||
|
player.RoleData.HomeAd.Infos.Add(ref tempData);
|
||
|
|
||
|
TraceLog.Trace(
|
||
|
"HomeAdHandler.OnHomeAdSendAwardSyn add userId {0} type {1} index {2} AdId {3} GetCount {4} ColdTime {5}",
|
||
|
player.UserID, advId, index, player.RoleData.HomeAd.AdvToken.GetString(), tempData.GetCount,
|
||
|
tempData.ColdTime);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
player.RoleData.HomeAd.Infos[index].ColdTime = nowTime + infoDesc.adverCd;
|
||
|
player.RoleData.HomeAd.Infos[index].GetCount += 1;
|
||
|
|
||
|
TraceLog.Trace(
|
||
|
"HomeAdHandler.OnHomeAdSendAwardSyn add userId {0} type {1} index {2} AdId {3} GetCount {4} ColdTime {5}",
|
||
|
player.UserID, advId, index, player.RoleData.HomeAd.AdvToken.GetString(),
|
||
|
player.RoleData.HomeAd.Infos[index].GetCount, player.RoleData.HomeAd.Infos[index].ColdTime);
|
||
|
}
|
||
|
|
||
|
player.RoleData.HomeAd.AdvId = 0;
|
||
|
HomeAdSvc.SendAdInfo(player);
|
||
|
HomeAdSvc.SendAdvReward(player, infoDesc.InternalId);
|
||
|
player.MakeDirty();
|
||
|
}
|
||
|
|
||
|
private void OnHomeadAdPassReq(PlayerOnGame player, StructPacket packet)
|
||
|
{
|
||
|
ref CSHomeAdPassReq req = ref packet.GetMessage<CSHomeAdPassReq>();
|
||
|
CSHomeAdPassRes res = new CSHomeAdPassRes();
|
||
|
res.Type = req.Type;
|
||
|
|
||
|
//判断次数,冷却
|
||
|
AdvertisementConfigDesc infoDesc = AdvertisementConfigDescMgr.Instance.GetConfigByInternal(req.Type);
|
||
|
if (infoDesc == null)
|
||
|
return;
|
||
|
int index = -1;
|
||
|
for (int i = 0; i < player.RoleData.HomeAd.Infos.Count; i++)
|
||
|
{
|
||
|
if (player.RoleData.HomeAd.Infos[i].Id == req.Type)
|
||
|
{
|
||
|
index = i;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
long nowTime = GameServerUtils.GetTimeSecond();
|
||
|
if (index != -1)
|
||
|
{
|
||
|
if ((player.RoleData.HomeAd.Infos[index].GetCount >= HomeAdSvc.GetAdvTimes(player,infoDesc)) ||
|
||
|
(req.Type != 2 && player.RoleData.HomeAd.Infos[index].ColdTime > nowTime))
|
||
|
{
|
||
|
res.Type = (int)CSErrCode.Fail;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
res.Ret = HomeAdSvc.PassAd(player, req.Type);
|
||
|
//添加次数
|
||
|
if (res.Ret == (int)CSErrCode.None)
|
||
|
{
|
||
|
if (req.Type != 2)
|
||
|
player.RoleData.HomeAd.Infos[index].ColdTime = nowTime + infoDesc.adverCd;
|
||
|
player.RoleData.HomeAd.Infos[index].GetCount += 1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
res.Ret = CSErrCode.Fail;
|
||
|
}
|
||
|
|
||
|
HomeAdSvc.SendAdInfo(player);
|
||
|
player.SendToClient((int)CSGameMsgID.HomeadAdPassRes, ref res);
|
||
|
TraceLog.Trace("HomeAdHandler.OnHomeadAdPassReq userId {0} type {1} index {2}", player.UserID, req.Type,
|
||
|
index);
|
||
|
}
|
||
|
|
||
|
private void OnADStart(PlayerOnGame player, StructPacket packet)
|
||
|
{
|
||
|
ref CSAdStartReq req = ref packet.GetMessage<CSAdStartReq>();
|
||
|
CSAdStartRes res = new CSAdStartRes();
|
||
|
player.RoleData.HomeAd.AdvId = req.AdInternalId;
|
||
|
player.RoleData.HomeAd.AdvToken.SetString(req.AdvCode.GetString());
|
||
|
TraceLog.Trace("HomeAdHandler.OnADStart userId {0} type {1} AdID {2}", player.UserID, req.AdInternalId, req.AdvCode);
|
||
|
player.SendToClient((int)CSGameMsgID.AdStartRes, ref res);
|
||
|
|
||
|
var httpReq = new SSHomeAdSendHttpSyn();
|
||
|
GameServerUtils.GetPacketSender()
|
||
|
.SendToWorldServer((int)SSGameMsgID.HomeAdSendHttpSyn, ref httpReq, player.UserID);
|
||
|
}
|
||
|
|
||
|
private void OnADEnd(PlayerOnGame player, StructPacket packet)
|
||
|
{
|
||
|
CSAdEndRes res = new CSAdEndRes();
|
||
|
OnHomeAdSendAwardSyn(player, player.RoleData.HomeAd.AdvId);
|
||
|
player.SendToClient((int)CSGameMsgID.AdEndRes, ref res);
|
||
|
}
|
||
|
|
||
|
private void OnAdGetInfo(PlayerOnGame player, StructPacket packet)
|
||
|
{
|
||
|
ref CSAdGetInfoReq req = ref packet.GetMessage<CSAdGetInfoReq>();
|
||
|
HomeAdSvc.SendAdInfo(player, req.Id);
|
||
|
//将登录天数逻辑在这里发送,因为在登录时候发送前端无法解析
|
||
|
HomeAdSvc.CheckLoginCount(player);
|
||
|
}
|
||
|
}
|
||
|
}
|