using GameServer.PacketHandler; using ServerCommon; using ServerCore; using ServerBase; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GameServer { public class LanguageAction : EntityActionBase { public LanguageAction(EntityBase owner) : base(owner) { } public override Task onInit() { var result = new Result(); return Task.FromResult(result); } public override void onClear() { return; } public async Task saveLanguage(LanguageType language_type) { var result = new Result(); var err_msg = string.Empty; var player = getOwner() as Player; NullReferenceCheckHelper.throwIfNull(player, () => "player is null !!!"); var server_logic = GameServerApp.getServerLogic(); var fn_save_language = async delegate () { var result = new Result(); var account_attribute = player.getEntityAttribute(); if (account_attribute == null) { err_msg = $"Failed to get account attribute : {nameof(AccountAttribute)}"; result.setFail(ServerErrorCode.EntityAttributeIsNull, err_msg); Log.getLogger().error(err_msg); SaveLanguagePacketHandler.send_S2C_ACK_SAVE_LANGUAGE(player, result); return result; } account_attribute.LanguageType = language_type; account_attribute.modifiedEntityAttribute(); var batch = new QueryBatchEx(player, LogActionType.UpdateLanguage , server_logic.getDynamoDbClient()); { batch.addQuery(new DBQWriteToAttributeAllWithTransactionRunner()); } result = await QueryHelper.sendQueryAndBusinessLog(batch); if (result.isFail()) { SaveLanguagePacketHandler.send_S2C_ACK_SAVE_LANGUAGE(player, result); return result; } SaveLanguagePacketHandler.send_S2C_ACK_SAVE_LANGUAGE(player, result); return result; }; result = await player.runTransactionRunnerSafely(TransactionIdType.PrivateContents, "SaveLanguage", fn_save_language); if (result.isFail()) { err_msg = $"Failed to runTransactionRunnerSafely()!!! : {result.toBasicString()} - {player.toBasicString()}"; Log.getLogger().error(err_msg); } return result; } } }