164 lines
6.6 KiB
C#
164 lines
6.6 KiB
C#
using Amazon.S3.Model;
|
|
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
|
|
{
|
|
public class BuildingManager
|
|
{
|
|
ConcurrentDictionary<int, Building> m_buildings = new();
|
|
|
|
|
|
public async Task<Result> loadBuildings()
|
|
{
|
|
var result = new Result();
|
|
var err_msg = string.Empty;
|
|
|
|
var building_meta_ids = MapManager.Instance.getBuildingMetaIds();
|
|
foreach (var building_meta_id in building_meta_ids)
|
|
{
|
|
var building = new Building();
|
|
await building.onInit();
|
|
|
|
m_buildings.TryAdd(building_meta_id, building);
|
|
|
|
var building_action = building.getEntityAction<BuildingAction>();
|
|
NullReferenceCheckHelper.throwIfNull(building_action, () => $"building_action is null !!!");
|
|
|
|
result = await building_action.tryLoadBuildingFromDb(building_meta_id);
|
|
if (result.isFail())
|
|
{
|
|
err_msg = $"Failed to tryLoadBuildingFromDb() !!! : {result.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
|
|
return result;
|
|
}
|
|
|
|
var building_floor_agent_action = building.getEntityAction<BuildingFloorAgentAction>();
|
|
NullReferenceCheckHelper.throwIfNull(building_floor_agent_action, () => $"building_floor_agent_action is null !!!");
|
|
|
|
result = await building_floor_agent_action.tryLoadBuildingFloorFromDb(building_meta_id);
|
|
if (result.isFail())
|
|
{
|
|
err_msg = $"Failed to tryLoadBuildingFloorFromDb() !!! : {result.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
|
|
return result;
|
|
}
|
|
|
|
var building_profit_agent_action = building.getEntityAction<BuildingProfitAgentAction>();
|
|
NullReferenceCheckHelper.throwIfNull(building_profit_agent_action, () => $"building_profit_agent_action is null !!!");
|
|
|
|
result = await building_profit_agent_action.tryLoadBuildingProfitFromDb(building_meta_id);
|
|
if (result.isFail())
|
|
{
|
|
err_msg = $"Failed to tryLoadBuildingProfitFromDb() !!! : {result.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
|
|
return result;
|
|
}
|
|
|
|
var building_profit_history_agent_action = building.getEntityAction<BuildingProfitHistoryAgentAction>();
|
|
NullReferenceCheckHelper.throwIfNull(building_profit_history_agent_action, () => $"building_profit_history_agent_action is null !!!");
|
|
|
|
result = await building_profit_history_agent_action.tryLoadBuildingProfitHistoryFromDb(building_meta_id);
|
|
if (result.isFail())
|
|
{
|
|
err_msg = $"Failed to tryLoadBuildingProfitHistoryFromDb() !!! : {result.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
|
|
return result;
|
|
}
|
|
|
|
var building_rental_history_agent_action = building.getEntityAction<BuildingRentalHistoryAgentAction>();
|
|
NullReferenceCheckHelper.throwIfNull(building_rental_history_agent_action, () => $"building_rental_history_agent_action is null !!!");
|
|
|
|
result = await building_rental_history_agent_action.tryLoadBuildingRentalHistoryFromDb(building_meta_id);
|
|
if (result.isFail())
|
|
{
|
|
err_msg = $"Failed to tryLoadBuildingRentalHistoryFromDb() !!! : {result.toBasicString()}";
|
|
Log.getLogger().error(err_msg);
|
|
|
|
return result;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public bool tryGetBuilding(int buildingMetaId, [MaybeNullWhen(false)] out Building building)
|
|
{
|
|
return m_buildings.TryGetValue(buildingMetaId, out building);
|
|
}
|
|
|
|
public async Task<List<BuildingInfo>> tryGetBuildingInfos()
|
|
{
|
|
var building_infos = new List<BuildingInfo>();
|
|
|
|
foreach (var building in m_buildings.Values)
|
|
{
|
|
var building_info = await building.toBuildingInfo();
|
|
building_infos.Add(building_info);
|
|
}
|
|
|
|
return building_infos;
|
|
}
|
|
|
|
public List<(int, int, int)> checkRentalFinish()
|
|
{
|
|
var rental_finish_building_floors = new List<(int, int, int)>();
|
|
|
|
foreach (var building in m_buildings.Values)
|
|
{
|
|
var building_floor_agent_action = building.getEntityAction<BuildingFloorAgentAction>();
|
|
NullReferenceCheckHelper.throwIfNull(building_floor_agent_action, () => $"building_floor_agent_action is null !!!");
|
|
|
|
var building_floors = building_floor_agent_action.getBuildingFloors();
|
|
foreach (var building_floor in building_floors.Values)
|
|
{
|
|
var building_floor_action = building_floor.getEntityAction<BuildingFloorAction>();
|
|
NullReferenceCheckHelper.throwIfNull(building_floor_action, () => $"building_floor_action is null !!!");
|
|
|
|
if (building_floor_action.isRentalFinish())
|
|
{
|
|
var (land_meta_id, building_meta_id, floor) = building_floor_action.getAddress();
|
|
|
|
rental_finish_building_floors.Add((land_meta_id, (int)building_meta_id, floor));
|
|
}
|
|
}
|
|
}
|
|
|
|
return rental_finish_building_floors;
|
|
}
|
|
|
|
public Result tryRemoveBuildingFloor(int buildingMetaId, int floor)
|
|
{
|
|
var result = new Result();
|
|
var err_msg = string.Empty;
|
|
|
|
if (!m_buildings.TryGetValue(buildingMetaId, out var building))
|
|
{
|
|
err_msg = $"Failed to TryGetValue() !!! : buildingMetaId:{buildingMetaId} : {this.getTypeName()}";
|
|
result.setFail(ServerErrorCode.BuildingNotFound, err_msg);
|
|
Log.getLogger().error(result.toBasicString());
|
|
|
|
return result;
|
|
}
|
|
|
|
var building_floor_agent_action = building.getEntityAction<BuildingFloorAgentAction>();
|
|
NullReferenceCheckHelper.throwIfNull(building_floor_agent_action, () => $"building_floor_agent_action is null !!!");
|
|
|
|
building_floor_agent_action.removeBuildingFloor(floor);
|
|
|
|
return result;
|
|
}
|
|
}
|
|
}
|