초기커밋
This commit is contained in:
163
GameServer/Global/Building/BuildingManager.cs
Normal file
163
GameServer/Global/Building/BuildingManager.cs
Normal file
@@ -0,0 +1,163 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user