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.
 
 
 
 
 
 

142 lines
5.1 KiB

using Sog;
using Sog.Log;
using ProtoCSStruct;
using TencentCloud.Scf.V20180416.Models;
using System.Collections.Generic;
namespace Game
{
class ExchangeCodeHandler : BasePacketHandler
{
public ExchangeCodeHandler(RootMessageHandler mgr)
{
RegisterMsgs(mgr);
}
public override void Dispose()
{
}
public override int GetServiceType()
{
return GameServiceType.ExchangeCodeHandler;
}
protected void RegisterMsgs(RootMessageHandler mgr)
{
mgr.RegisterPacketHandler((int)CSGameMsgID.ExchangeCodeTakeReq, this);
mgr.RegisterPacketHandler((int)SSGameMsgID.ExchangeCodeSynNotify, this);
mgr.RegisterPacketHandler((int)SSGameMsgID.ExchangeCodeTakeRes, this);
}
public override void HandlerClientPacket(PlayerSession playerSession, StructPacket packet)
{
PlayerOnGame player = playerSession.Player;
if (player == null)
{
TraceLog.Error("ExchangeCodeHandler.HandlerClientPacket can not find PlayerOnGame sessionid {0}", playerSession.SessionID);
return;
}
switch (packet.MsgID)
{
case (int)CSGameMsgID.ExchangeCodeTakeReq:
OnExchangeCodeTakeReq(player, packet);
break;
default:
TraceLog.Error("ExchangeCodeHandler.HandlerClientPacket msg {0} not handle", packet.MsgID);
break;
}
}
public override void HandlerServerPacket(uint serverID, StructPacket packet)
{
switch(packet.MsgID)
{
//case (int)SSGameMsgID.ExchangeCodeSynNotify:
//OnExchangeCodeSynNotify(packet);
//break;
case (int)SSGameMsgID.ExchangeCodeTakeRes:
OnExchangeCodeTakeRes(packet);
break;
default:
break;
}
}
public static void SendExchangeCodeTakeReq(PlayerOnGame player, string code)
{
TraceLog.Debug("ExchangeCodeHandler.SendExchangeCodeTakeReq: uid:{0}, exchageCode:{1}", player.UserID, code);
//转给playeropsvr处理
SSExchangeCodeTakeReq ssreq = new SSExchangeCodeTakeReq()
{
Uid = player.UserID
};
ssreq.Code.SetString(code);
GameServerUtils.GetPacketSender().SendToWorldServer((int)SSGameMsgID.ExchangeCodeTakeReq, ref ssreq, player.UserID, 0);
}
private void OnExchangeCodeTakeReq(PlayerOnGame player, StructPacket packet)
{
ref CSExchangeCodeTakeReq req = ref packet.GetMessage<CSExchangeCodeTakeReq>();
SendExchangeCodeTakeReq(player, req.Code.GetString());
}
private void OnExchangeCodeTakeRes(StructPacket packet)
{
var player = GameServerUtils.GetPlayerTableOp().GetPlayerByUid(packet.ObjectID);
if (player == null)
{
TraceLog.Error("ExchangeCodeHandler.OnExchangeCodeTakeRes no player:{0}", packet.ObjectID);
return;
}
ref SSExchangeCodeTakeRes svrRes = ref packet.GetMessage<SSExchangeCodeTakeRes>();
CSExchangeCodeTakeRes csRes = new CSExchangeCodeTakeRes();
csRes.Ret = svrRes.Ret;
if(csRes.Ret != 0)
{
SendToPlayer(player, (int)CSGameMsgID.ExchangeCodeTakeRes, ref csRes);
return;
}
//UnifyOp op = new UnifyOp(player, BillChangeItemReason.ExchangeCodeRewards);
//string billLogStr = "";
csRes.RewardList.CopyFrom(ref svrRes.RewardList);
//for (int i = 0; i < csRes.RewardList.Count; i++)
//{
// ref var it = ref csRes.RewardList[i];
// billLogStr += it.Reward.Id.GetString() + ":" + it.Reward.Type.ToString() + ":" + it.Reward.Value.ToString() + "#";
// op.AddGoods(it.Reward.Type, it.Reward.Id.ToString(), it.Reward.Value);
//}
//csRes.Ret = (int)op.DoOp(true, true, true);
//if(csRes.Ret != 0) //op失败了,要回退吗?
//{
// TraceLog.Error("ExchangeCodeHandler.OnExchangeCodeTakeRes DoOp failed: uid:{0} codeId:{1}", packet.ObjectID, svrRes.CodeId);
//}
List<RewardItemRW> res = new List<RewardItemRW>();
for (int i = 0; i < csRes.RewardList.Count; i++)
{
ref var it = ref csRes.RewardList[i];
RewardItemRW r = new RewardItemRW();
r.type = it.Reward.Type;
r.amount = it.Reward.Value;
r.code = it.Reward.Id.GetString();
res.Add(r);
}
MailSender.SendNewMailToPlayer(player, 3, res);
//op失败,但实际已经认为领取成功,概率很低,反馈后补发吧
SendToPlayer(player, (int)CSGameMsgID.ExchangeCodeTakeRes, ref csRes);
return;
}
}
}