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

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