Files
caliverse_server/GameServer/Entity/CustomDefinedUi/Action/CustomDefinedUiAction.cs
2025-05-01 07:20:41 +09:00

295 lines
11 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Google.Protobuf.Collections;
using Nettention.Proud;
using Amazon.Runtime.Internal;
using Amazon.Runtime.Internal.Endpoints.StandardLibrary;
using ServerCommon;
using ServerCore; using ServerBase;
using GameServer.PacketHandler;
using Microsoft.AspNetCore.DataProtection.KeyManagement;
using static Pipelines.Sockets.Unofficial.SocketConnection;
using UI_KEY = System.String;
using MongoDB.Bson;
using Amazon.S3.Model;
using System.Diagnostics.CodeAnalysis;
namespace GameServer
{
public class CustomDefinedUiAction : EntityActionBase
{
private readonly ConcurrentDictionary<string, CustomDefinedUi> m_custom_defined_uis = new();
public CustomDefinedUiAction(EntityBase owner)
: base(owner)
{
}
public override Task<Result> onInit()
{
var result = new Result();
return Task.FromResult(result);
}
public override void onClear()
{
return;
}
public async Task<Result> tryLoadCustomDefinedUiFromDoc(CustomDefinedUiDoc toLoadCustomDefinedUiDoc)
{
await Task.CompletedTask;
var owner = getOwner();
var root_parent = owner.getRootParent();
var result = new Result();
var err_msg = string.Empty;
var to_load_custom_defined_ui_attrib = toLoadCustomDefinedUiDoc.getAttrib<CustomDefinedUiAttrib>();
NullReferenceCheckHelper.throwIfNull(to_load_custom_defined_ui_attrib, () => $"to_load_custom_defined_ui_attrib is null !!! - {owner.toBasicString()}, {root_parent.toBasicString()}");
var ui_key = to_load_custom_defined_ui_attrib.UiKey;
var ui_value = to_load_custom_defined_ui_attrib.CustomDefinedUi;
result = await tryUpdateCustomDefinedUi(ui_key, ui_value, false);
if(result.isFail())
{
return result;
}
return result;
}
public async Task<Result> tryUpdateCustomDefinedUi(UI_KEY uiKey, string customDefinedUi, bool isApplyToDb = true)
{
await Task.CompletedTask;
var owner = getOwner();
var root_parent = owner.getRootParent();
var result = new Result();
var err_msg = string.Empty;
var item_string = uiKey + customDefinedUi;
result = await checkCustomDefinedUiSize(item_string);
if(result.isFail())
{
return result;
}
var add_custom_defined_ui = delegate (string uiKey)
{
var custom_defined_ui = new CustomDefinedUi(owner);
result = custom_defined_ui.onInit().GetAwaiter().GetResult();
if(result.isFail())
{
err_msg = $"Failed to CustomDefinedUi.onInit() !!!, CustomDefinedUIAction.updateCustomDefinedUi() - {owner.toBasicString()}, {root_parent.toBasicString()}";
Log.getLogger().error(err_msg);
return null;
}
var custom_defined_attribute = custom_defined_ui.getEntityAttribute<CustomDefinedUiAttribute>();
NullReferenceCheckHelper.throwIfNull(custom_defined_attribute, () => $"custom_defined_attribute is null !!! - {owner.toBasicString()}, {root_parent.toBasicString()}");
custom_defined_attribute.UiKey = uiKey;
custom_defined_attribute.CustomDefinedUi = customDefinedUi;
if(true == isApplyToDb)
{
custom_defined_attribute.newEntityAttribute();
}
return custom_defined_ui;
};
var update_custom_defined_ui = delegate (string uiKey, CustomDefinedUi currCustomDefinedUi)
{
var custom_defined_ui_attribute = currCustomDefinedUi.getEntityAttribute<CustomDefinedUiAttribute>();
NullReferenceCheckHelper.throwIfNull(custom_defined_ui_attribute, () => $"custom_defined_ui_attribute is null !!! - {owner.toBasicString()}, {root_parent.toBasicString()}");
custom_defined_ui_attribute.UiKey = uiKey;
custom_defined_ui_attribute.CustomDefinedUi = customDefinedUi;
if (true == isApplyToDb)
{
custom_defined_ui_attribute.modifiedEntityAttribute();
}
return currCustomDefinedUi;
};
m_custom_defined_uis.AddOrUpdate(uiKey, add_custom_defined_ui, update_custom_defined_ui);
return result;
}
public void removeCustomDefinedUi(UI_KEY uiKey)
{
var owner = getOwner();
var root_parent = owner.getRootParent();
var result = new Result();
var err_msg = string.Empty;
if (false == m_custom_defined_uis.TryRemove(uiKey, out _))
{
err_msg = $"Failed to Remove() !!!, not found UIKey : UIKey:{uiKey} - {owner.toBasicString()}, {root_parent.toBasicString()}";
Log.getLogger().error(err_msg);
}
}
public bool findCustomDefinedUi(UI_KEY uiKey, [MaybeNullWhen(false)] out CustomDefinedUi customDefinedUi)
{
return m_custom_defined_uis.TryGetValue(uiKey, out customDefinedUi);
}
public bool getTattooVisible(TattooSlotType slotType, out bool foundVisible)
{
var owner = getOwner();
var root_parent = owner.getRootParent();
var err_msg = string.Empty;
foundVisible = false;
var ui_key = slotType.convertEnumToEnumTypeAndValueString();
if (false == m_custom_defined_uis.TryGetValue(ui_key, out var found_custom_defined_ui))
{
err_msg = $"Failed to TryGetValue() !!!, CustomDefinedUIAction.getTattooVisible() : uiKey:{ui_key} - {owner.toBasicString()}, {root_parent.toBasicString()}";
Log.getLogger().info(err_msg);
return false;
}
var custom_defined_ui_attribute = found_custom_defined_ui.getEntityAttribute<CustomDefinedUiAttribute>();
NullReferenceCheckHelper.throwIfNull(custom_defined_ui_attribute, () => $"custom_defined_ui_attribute is null !!! - uiKey:{ui_key}, {owner.toBasicString()}, {root_parent.toBasicString()}");
if(false == custom_defined_ui_attribute.CustomDefinedUi.toBool(out var is_visible))
{
err_msg = $"Failed to toBool() !!!, CustomDefinedUIAction.getTattooVisible() - uiKey:{ui_key}, {owner.toBasicString()}, {root_parent.toBasicString()}";
Log.getLogger().error(err_msg);
return false;
}
foundVisible = is_visible;
return true;
}
public async Task<Result> setTattooVisible(TattooSlotType slotType, bool foundVisible)
{
var owner = getOwner();
var root_parent = owner.getRootParent();
var result = new Result();
var err_msg = string.Empty;
var ui_key = slotType.convertEnumToEnumTypeAndValueString();
var item_string = ui_key + foundVisible.ToString();
result = await checkCustomDefinedUiSize(item_string);
if (result.isFail())
{
return result;
}
var add_custom_defined_ui = delegate (string uiKey)
{
var result = new Result();
var err_msg = string.Empty;
var custom_defined_ui = new CustomDefinedUi(owner);
result = custom_defined_ui.onInit().GetAwaiter().GetResult();
if(result.isFail())
{
err_msg = $"Failed to CustomDefinedUi.onInit() !!!, CustomDefinedUIAction.setTattooVisible() - {owner.toBasicString()}, {root_parent.toBasicString()}";
Log.getLogger().error(err_msg);
return null;
}
var custom_defined_ui_attribute = custom_defined_ui.getEntityAttribute<CustomDefinedUiAttribute>();
NullReferenceCheckHelper.throwIfNull(custom_defined_ui_attribute, () => $"custom_defined_ui_attribute is null !!! - {owner.toBasicString()}, {root_parent.toBasicString()}");
custom_defined_ui_attribute.UiKey = uiKey;
custom_defined_ui_attribute.CustomDefinedUi = foundVisible.ToString();
custom_defined_ui_attribute.newEntityAttribute();
return custom_defined_ui;
};
var update_custom_defined_ui = delegate (string uiKey, CustomDefinedUi currValue)
{
var custom_defined_ui_attribute = currValue.getEntityAttribute<CustomDefinedUiAttribute>();
NullReferenceCheckHelper.throwIfNull(custom_defined_ui_attribute, () => $"custom_defined_ui_attribute is null !!! - {owner.toBasicString()}, {root_parent.toBasicString()}");
custom_defined_ui_attribute.UiKey = uiKey;
custom_defined_ui_attribute.CustomDefinedUi = foundVisible.ToString();
custom_defined_ui_attribute.modifiedEntityAttribute();
return currValue;
};
m_custom_defined_uis.AddOrUpdate(ui_key, add_custom_defined_ui, update_custom_defined_ui);
return result;
}
public async Task<Result> checkCustomDefinedUiSize(string itemString)
{
var owner = getOwner();
var root_parent = owner.getRootParent();
var result = new Result();
var err_msg = string.Empty;
var to_save_data = itemString + CustomDefinedUiDoc.getPrefixOfPK() + CustomDefinedUiDoc.getPrefixOfSK();
if (false == DynamoDbConnectorBase.checkItemSizeLimit(to_save_data))
{
err_msg = $"Failed to DynamoDbConnectorBase.checkItemSizeLimit() !!! - {owner.toBasicString()}, {root_parent.toBasicString()}";
result.setFail(ServerErrorCode.DynamoDbItemSizeExceeded, err_msg);
Log.getLogger().error(err_msg);
return result;
}
return await Task.FromResult(result);
}
public MapField<UI_KEY, string> toCustomDefinedUiAll()
{
var map_field = new MapField<UI_KEY, string>();
foreach (var each in m_custom_defined_uis)
{
var custom_defined_ui_attribute = each.Value.getEntityAttribute<CustomDefinedUiAttribute>();
NullReferenceCheckHelper.throwIfNull(custom_defined_ui_attribute, () => $"custom_defined_ui_attribute is null !!!");
var ui_key = each.Key;
var ui_value = custom_defined_ui_attribute.CustomDefinedUi;
map_field.Add(each.Key, ui_value);
}
return map_field;
}
}
}