초기커밋
This commit is contained in:
@@ -0,0 +1,158 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
using static ClientToGameReq.Types;
|
||||
using static ClientToGameRes.Types;
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(UseRandomBoxItemReq), typeof(UseRandomBoxItemPacketHandler), typeof(GameLoginListener))]
|
||||
internal class UseRandomBoxItemPacketHandler : PacketRecvHandler
|
||||
{
|
||||
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
|
||||
{
|
||||
var player = session as Player;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!");
|
||||
var req_msg = recvMessage as ClientToGame;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(req_msg, () => $"req_msg is null !!! - {player.toBasicString()}");
|
||||
var request = req_msg.Request.UseRandomBoxItemReq;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = new Result();
|
||||
|
||||
var item_guid = request.ItemGuid;
|
||||
#pragma warning disable CS0219 // 변수가 할당되었지만 해당 값이 사용되지 않았습니다.
|
||||
ushort num = 1;
|
||||
#pragma warning restore CS0219 // 변수가 할당되었지만 해당 값이 사용되지 않았습니다.
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
ArgumentNullException.ThrowIfNull(server_logic);
|
||||
|
||||
var random_box_action = player.getEntityAction<RandomBoxItemUseAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(random_box_action, () => $"random_box_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
RandomBoxItemReference random_box_item_ref = new();
|
||||
random_box_item_ref.m_item_guid = item_guid;
|
||||
|
||||
result = random_box_action.conditionCheck(ref random_box_item_ref);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_S2C_ACK_RANDOM_BOX_ITEM_FAIL(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "RandomBoxItemUse", delegateRandomBoxItemUse);
|
||||
if (result.isFail())
|
||||
{
|
||||
var err_msg = $"Failed to runTransactionRunnerSafely() !!! : {result.toBasicString()} - {player.toBasicString()}";
|
||||
Log.getLogger().error(err_msg);
|
||||
|
||||
send_S2C_ACK_RANDOM_BOX_ITEM_FAIL(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
send_S2C_ACK_RANDOM_BOX_ITEM(player, result, random_box_item_ref);
|
||||
|
||||
|
||||
return result;
|
||||
|
||||
async Task<Result> delegateRandomBoxItemUse() => await randomBoxItemUse(player, random_box_item_ref);
|
||||
}
|
||||
|
||||
private async Task<Result> randomBoxItemUse(Player player, RandomBoxItemReference randomBoxItemRef)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
var random_box_action = player.getEntityAction<RandomBoxItemUseAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(random_box_action, () => $"random_box_action is null !!! - {player.toBasicString()}");
|
||||
|
||||
result = await random_box_action.deleteRandomBox(randomBoxItemRef);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
var gacha_data = randomBoxItemRef.m_gacha_data;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(gacha_data, () => $"gacha_data is null !!! - {player.toBasicString()}");
|
||||
|
||||
var gacha = gacha_data.getRandomReward();
|
||||
randomBoxItemRef.m_rewards.Add(gacha.Reward);
|
||||
|
||||
result = await random_box_action.getGachaReward(randomBoxItemRef);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
|
||||
var batch = new QueryBatchEx<QueryRunnerWithDocument>(player, LogActionType.ItemRandomBoxUse, server_logic.getDynamoDbClient());
|
||||
{
|
||||
batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner());
|
||||
}
|
||||
|
||||
var deleted_item = randomBoxItemRef.m_deleted_item_nullable;
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(deleted_item, () => $"deleted_item is null !!! - {player.toBasicString()}");
|
||||
var item_meta = deleted_item.getItemMeta();
|
||||
ArgumentNullReferenceCheckHelper.throwIfNull(item_meta, () => $"item_meta is null !!! - {player.toBasicString()}");
|
||||
|
||||
var info = new RandomBoxItemUseInfo(randomBoxItemRef.m_item_guid, item_meta.ItemId, 1, gacha);
|
||||
var invoker = new RandomBoxItemUseBusinessLog(info);
|
||||
|
||||
batch.appendBusinessLog(invoker);
|
||||
result = await QueryHelper.sendQueryAndBusinessLog(batch);
|
||||
|
||||
var found_transaction_runner = player.findTransactionRunner(TransactionIdType.PrivateContents);
|
||||
NullReferenceCheckHelper.throwIfNull(found_transaction_runner, () => $"found_transaction_runner is null !!! - {player.toBasicString()}");
|
||||
|
||||
var common_result = found_transaction_runner.getCommonResult();
|
||||
randomBoxItemRef.m_common_result = common_result;
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public static bool send_S2C_ACK_RANDOM_BOX_ITEM_FAIL(Player owner, Result result)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.UseRandomBoxItemRes = new();
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public static bool send_S2C_ACK_RANDOM_BOX_ITEM(Player owner, Result result, RandomBoxItemReference random_box_item_ref)
|
||||
{
|
||||
var ack_packet = new ClientToGame();
|
||||
ack_packet.Response = new ClientToGameRes();
|
||||
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.UseRandomBoxItemRes = new();
|
||||
ack_packet.Response.UseRandomBoxItemRes.CommonResult = random_box_item_ref.m_common_result;
|
||||
|
||||
//var rewarded_items = random_box_item_ref.m_rewarded_items;
|
||||
//var rewarded_money = random_box_item_ref.m_rewarded_money;
|
||||
|
||||
//var items = RewardManager.Instance.convertItemAndMoneyToItem(rewarded_items, rewarded_money);
|
||||
//ack_packet.Response.UseRandomBoxItemRes.Items.AddRange(items);
|
||||
|
||||
//var deleted_refactoring_items = new List<Item>();
|
||||
//if (null != random_box_item_ref.m_deleted_item_nullable)
|
||||
//{
|
||||
// deleted_refactoring_items.Add(random_box_item_ref.m_deleted_item_nullable);
|
||||
//}
|
||||
|
||||
//var deleted_items = RewardManager.Instance.convertItemAndMoneyToItem(deleted_refactoring_items, new());
|
||||
//ack_packet.Response.UseRandomBoxItemRes.Items.AddRange(deleted_items);
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user