초기커밋

This commit is contained in:
2025-05-01 07:20:41 +09:00
commit 98bb2e3c5c
2747 changed files with 646947 additions and 0 deletions

View File

@@ -0,0 +1,102 @@
using ServerCommon;
using ServerCore; using ServerBase;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GameServer
{
internal class BuildingProfitAction : EntityActionBase
{
public BuildingProfitAction(BuildingProfit owner)
: base(owner)
{ }
public override async Task<Result> onInit()
{
var result = new Result();
return await Task.FromResult(result);
}
public override void onClear()
{
return;
}
public Result tryLoadBuildingProfitFromDoc(BuildingProfitDoc buildingProfitDoc)
{
var result = new Result();
var err_msg = string.Empty;
var building_profit = getOwner() as BuildingProfit;
NullReferenceCheckHelper.throwIfNull(building_profit, () => $"building_profit is null !!!");
var building_profit_attribute = building_profit.getEntityAttribute<BuildingProfitAttribute>();
NullReferenceCheckHelper.throwIfNull(building_profit_attribute, () => $"building_profit_attribute is null !!!");
if (!building_profit_attribute.copyEntityAttributeFromDoc(buildingProfitDoc))
{
err_msg = $"Failed to copyEntityAttributeFromDoc() !!! to:{building_profit_attribute.getTypeName()}, from:{buildingProfitDoc.getTypeName()} : {this.getTypeName()}";
result.setFail(ServerErrorCode.DynamoDbDocCopyToEntityAttributeFailed, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
return result;
}
public int getFloor()
{
var building_profit = getOwner() as BuildingProfit;
NullReferenceCheckHelper.throwIfNull(building_profit, () => $"building_profit is null !!!");
var building_profit_attribute = building_profit.getEntityAttribute<BuildingProfitAttribute>();
NullReferenceCheckHelper.throwIfNull(building_profit_attribute, () => $"building_profit_attribute is null !!!");
return building_profit_attribute.Floor;
}
public Dictionary<CurrencyType, double> getProfits()
{
var building_profit = getOwner() as BuildingProfit;
NullReferenceCheckHelper.throwIfNull(building_profit, () => $"building_profit is null !!!");
var building_profit_attribute = building_profit.getEntityAttribute<BuildingProfitAttribute>();
NullReferenceCheckHelper.throwIfNull(building_profit_attribute, () => $"building_profit_attribute is null !!!");
var profits = new Dictionary<CurrencyType, double>(building_profit_attribute.Profits);
return profits;
}
public double getProfit(CurrencyType currencyType)
{
var building_profit = getOwner() as BuildingProfit;
NullReferenceCheckHelper.throwIfNull(building_profit, () => $"building_profit is null !!!");
var building_profit_attribute = building_profit.getEntityAttribute<BuildingProfitAttribute>();
NullReferenceCheckHelper.throwIfNull(building_profit_attribute, () => $"building_profit_attribute is null !!!");
building_profit_attribute.Profits.TryGetValue(currencyType, out var currency_amount);
return currency_amount;
}
public void modifyProfit(CurrencyType currencyType, double deltaAmount)
{
var building_profit = getOwner() as BuildingProfit;
NullReferenceCheckHelper.throwIfNull(building_profit, () => $"building_profit is null !!!");
var building_profit_attribute = building_profit.getEntityAttribute<BuildingProfitAttribute>();
NullReferenceCheckHelper.throwIfNull(building_profit_attribute, () => $"building_profit_attribute is null !!!");
building_profit_attribute.Profits.TryGetValue(currencyType, out var currency_amount);
currency_amount += deltaAmount;
building_profit_attribute.Profits[currencyType] = currency_amount;
}
}
}

View File

@@ -0,0 +1,136 @@
using NeoSmart.AsyncLock;
using ServerCommon;
using ServerCore; using ServerBase;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GameServer
{
internal class BuildingProfitAgentAction : EntityActionBase
{
ConcurrentDictionary<int, BuildingProfit> m_building_profits = new();
AsyncLock m_lock = new();
public BuildingProfitAgentAction(Building owner)
: base(owner)
{ }
public override async Task<Result> onInit()
{
var result = new Result();
return await Task.FromResult(result);
}
public override void onClear()
{
return;
}
public AsyncLock getAsyncLock() => m_lock;
public async Task<Result> tryLoadBuildingProfitFromDb(int buildingMetaId)
{
var result = new Result();
var err_msg = string.Empty;
var server_logic = GameServerApp.getServerLogic();
var db_client = server_logic.getDynamoDbClient();
var doc = new BuildingProfitDoc();
doc.setCombinationKeyForPK(buildingMetaId.ToString());
var error_code = doc.onApplyPKSK();
if (error_code.isFail())
{
err_msg = $"Failed to onApplyPKSK() !!! : {error_code.toBasicString()}";
result.setFail(error_code, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
var query_config = db_client.makeQueryConfigWithPKSKBySKBeginWith(doc.getPK(), BuildingProfitDoc.getPrefixOfSK());
(result, var read_docs) = await db_client.simpleQueryDocTypesWithQueryOperationConfig<BuildingProfitDoc>(query_config);
if (result.isFail())
{
err_msg = $"Failed to simpleQueryDocTypesWithQueryOperationConfig() !!! : {result.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
var building = getOwner() as Building;
NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!");
foreach (var read_doc in read_docs)
{
var building_profit = new BuildingProfit(building);
await building_profit.onInit();
var building_profit_action = building_profit.getEntityAction<BuildingProfitAction>();
NullReferenceCheckHelper.throwIfNull(building_profit_action, () => $"building_profit_action is null !!!");
result = building_profit_action.tryLoadBuildingProfitFromDoc(read_doc);
if (result.isFail())
{
err_msg = $"Failed to tryLoadBuildingProfitFromDoc() !!! : {result.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
var building_profit_attribute = building_profit.getEntityAttribute<BuildingProfitAttribute>();
NullReferenceCheckHelper.throwIfNull(building_profit_attribute, () => $"building_profit_attribute is null !!!");
if (!m_building_profits.TryAdd(building_profit_attribute.Floor, building_profit))
{
err_msg = $"Failed to TryAdd() !!! : {building_profit.toBasicString()} : {this.getTypeName()}";
result.setFail(ServerErrorCode.RentalDocLoadDuplicatedRental, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
}
return result;
}
public Dictionary<int, FloorProfitInfo> getBuildingProfitInfos()
{
var floor_profit_infos = new Dictionary<int, FloorProfitInfo>();
foreach (var building_profit in m_building_profits.Values)
{
var building_profit_attribute = building_profit.getEntityAttribute<BuildingProfitAttribute>();
NullReferenceCheckHelper.throwIfNull(building_profit_attribute, () => $"building_profit_history_attribute is null !!!");
var floor_profit = building_profit.toFloorProfitInfo();
floor_profit_infos.Add(building_profit_attribute.Floor, floor_profit);
}
return floor_profit_infos;
}
public bool tryGetBuildingProfit(int floor, [MaybeNullWhen(false)] out BuildingProfit buildingProfit)
{
return m_building_profits.TryGetValue(floor, out buildingProfit);
}
public List<BuildingProfit> getAllBuildingProfit()
{
return m_building_profits.Values.ToList();
}
public void addBuildingProfit(int floor, BuildingProfit buildingProfit)
{
m_building_profits[floor] = buildingProfit;
}
}
}