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