using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using ServerCommon; using static ClientToGameReq.Types; using static ClientToGameRes.Types; namespace GameServer.PacketHandler; [PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.C2GS_REQ_CALIUM_EXCHANGER_INFO), typeof(GetCaliumExchangerInfoPacketHandler), typeof(GameLoginListener))] public class GetCaliumExchangerInfoPacketHandler : PacketRecvHandler { private async Task send_S2C_ACK_CALIUM_EXCHANGER_INFO(Player owner, Result result, double inflationRate, DateTime nextEpochTime) { var ack_packet = new ClientToGame { Response = new ClientToGameRes { ErrorCode = result.ErrorCode, AckCaliumExchangerInfo = new () } }; if (result.isSuccess()) { ack_packet.Response.AckCaliumExchangerInfo.InflationRate = inflationRate; ack_packet.Response.AckCaliumExchangerInfo.FixedExchangeRate = CaliumStorageHelper.FixedExchangeRate; var time = new DateTime(nextEpochTime.Year, nextEpochTime.Month, nextEpochTime.Day, nextEpochTime.Hour, nextEpochTime.Minute, nextEpochTime.Second, DateTimeKind.Utc); ack_packet.Response.AckCaliumExchangerInfo.NextEpochTime = time.ToTimestamp(); } GameServerApp.getServerLogic().onSendPacket(owner, ack_packet); await Task.CompletedTask; } public override async Task onProcessPacket(ISession entityWithSession, IMessage recvMessage) { var result = new Result(); string err_msg; var player = entityWithSession as Player; NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !!!"); // 1. 기본 정보 체크 var request = (recvMessage as ClientToGame)?.Request.ReqCaliumExchangerInfo; if (null == request) { err_msg = $"Failed to get request type !!! : {nameof(ClientToGame.Request.ReqCaliumExchangerInfo)}"; result.setFail(ServerErrorCode.InvalidArgument, err_msg); Log.getLogger().error(result.toBasicString()); await send_S2C_ACK_CALIUM_EXCHANGER_INFO(player, result, 0, DateTimeHelper.MinTime); return result; } // 2. 정보 조회 var calium_storage_entity = GameServerApp.getServerLogic().findGlobalEntity(); NullReferenceCheckHelper.throwIfNull(calium_storage_entity, () => $"calium_storage_entity is null !!! - {player.toBasicString()}"); var calium_storage_action = calium_storage_entity.getEntityAction(); NullReferenceCheckHelper.throwIfNull(calium_storage_action, () => $"calium_storage_action is null !!! - {calium_storage_entity.toBasicString()} / {player.toBasicString()}"); var info = await calium_storage_action.getCaliumStorageInfo(); await send_S2C_ACK_CALIUM_EXCHANGER_INFO(player, result, info.DailyInflationRate, info.DailyPivotDate.AddDays(1)); return result; } }