초기커밋

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,241 @@

using ServerCore;
using ServerBase;
using ServerCommon;
namespace GameServer;
internal class BuildingAction : EntityActionBase
{
public BuildingAction(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 async Task<Result> tryLoadBuildingFromDb(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 BuildingDoc();
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.makeQueryConfigForReadByPKSK(doc.getPK());
(result, var read_docs) = await db_client.simpleQueryDocTypesWithQueryOperationConfig<BuildingDoc>(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 !!!");
var building_attribute = building.getEntityAttribute<BuildingAttribute>();
NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!");
foreach (var read_doc in read_docs)
{
if (!building_attribute.copyEntityAttributeFromDoc(read_doc))
{
err_msg = $"Failed to copyEntityAttributeFromDoc() !!! to:{building_attribute.getTypeName()}, from:{read_doc.getTypeName()} : {this.getTypeName()}";
result.setFail(ServerErrorCode.DynamoDbDocCopyToEntityAttributeFailed, err_msg);
Log.getLogger().error(result.toBasicString());
return result;
}
}
if (building_attribute.BuildingMetaId == 0)
{
(result, var land_meta_data, var rental_fee_meta_data) = BuildingHelper.validCheckBuilding((uint)buildingMetaId);
if (result.isFail())
{
err_msg = $"Failed to validCheckOwnerLand() !!! : {result.toBasicString()}";
Log.getLogger().error(err_msg);
return result;
}
NullReferenceCheckHelper.throwIfNull(land_meta_data, () => $"land_meta_data is null !!!");
NullReferenceCheckHelper.throwIfNull(rental_fee_meta_data, () => $"rental_fee_meta_data is null !!!");
building_attribute.BuildingMetaId = (uint)buildingMetaId;
building_attribute.RentalCurrencyType = (CurrencyType)rental_fee_meta_data.CurrencyType;
building_attribute.RentalCurrencyAmount = rental_fee_meta_data.CurrencyValue;
building_attribute.IsRentalOpen = land_meta_data.RentalAvailable;
if (read_docs.Count != 0)
{
Log.getLogger().info($"BuildingDoc.BuildingAtrib.BuildingMetaId is 0 !!! - buildingMetaId:{buildingMetaId}");
}
}
return result;
}
public async Task<(Result, DynamoDbDocBase?)> modifyBuildingInfo(string buildingName, string buildingDescription, CurrencyType rentalCurrencyType, double rentalCurrencyAmount, bool isRantalOpen)
{
var result = new Result();
var err_msg = string.Empty;
var currency_amount = rentalCurrencyAmount;
if (rentalCurrencyType != CurrencyType.Calium)
{
currency_amount = (int)rentalCurrencyAmount;
}
var building = getOwner() as Building;
NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!");
var building_attribute = building.getEntityAttribute<BuildingAttribute>();
NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!");
building_attribute.BuildingName = buildingName;
building_attribute.Description = buildingDescription;
building_attribute.RentalCurrencyType = rentalCurrencyType;
building_attribute.RentalCurrencyAmount = currency_amount;
building_attribute.IsRentalOpen = isRantalOpen;
building_attribute.modifiedEntityAttribute();
(result, var building_doc) = await building_attribute.toDocBase();
if (result.isFail())
{
err_msg = $"Failed to toDocBase() !!! : {result.toBasicString()}";
Log.getLogger().error(err_msg);
return (result, null);
}
return (result, building_doc);
}
public void modifyBuildingInfo(BuildingInfo buildingInfo)
{
var currency_amount = buildingInfo.RentalCurrencyAmount;
if (buildingInfo.RentalCurrencyType != CurrencyType.Calium)
{
currency_amount = (int)buildingInfo.RentalCurrencyAmount;
}
var building = getOwner() as Building;
NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!");
var building_attribute = building.getEntityAttribute<BuildingAttribute>();
NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!");
building_attribute.BuildingName = buildingInfo.BuildingName;
building_attribute.Description = buildingInfo.BuildingDescription;
building_attribute.RentalCurrencyType = buildingInfo.RentalCurrencyType;
building_attribute.RentalCurrencyAmount = currency_amount;
building_attribute.IsRentalOpen = buildingInfo.IsRentalOpen == BoolType.True;
building_attribute.IsLoadFromDb = true;
building_attribute.modifiedEntityAttribute();
}
public (CurrencyType, double) getRentalCurrency()
{
var building = getOwner() as Building;
NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!");
var building_attribute = building.getEntityAttribute<BuildingAttribute>();
NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!");
return (building_attribute.RentalCurrencyType, building_attribute.RentalCurrencyAmount);
}
public void setBuildingOwner(int buildingMetaId, string userGuid, CurrencyType rentalCurrencyType, double rentalCurrencyAmount, bool initialRentalOpen)
{
var building = getOwner() as Building;
NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!");
var building_attribute = building.getEntityAttribute<BuildingAttribute>();
NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!");
if (!building_attribute.IsLoadFromDb)
{
building_attribute.BuildingMetaId = (uint)buildingMetaId;
building_attribute.OwnerUserGuid = userGuid;
building_attribute.RentalCurrencyType = rentalCurrencyType;
building_attribute.RentalCurrencyAmount = rentalCurrencyAmount;
building_attribute.IsRentalOpen = initialRentalOpen;
building_attribute.IsLoadFromDb = true;
building_attribute.newEntityAttribute();
}
else
{
building_attribute.OwnerUserGuid = userGuid;
building_attribute.modifiedEntityAttribute();
}
}
public bool isRentalOpen()
{
var building = getOwner() as Building;
NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!");
var building_attribute = building.getEntityAttribute<BuildingAttribute>();
NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!");
return building_attribute.IsRentalOpen;
}
public void initOwner()
{
var building = getOwner() as Building;
NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!");
var building_attribute = building.getEntityAttribute<BuildingAttribute>();
NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!");
building_attribute.OwnerUserGuid = string.Empty;
building_attribute.modifiedEntityAttribute();
}
public bool isBuildingOwner(string userGuid)
{
var building = getOwner() as Building;
NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!");
var building_attribute = building.getEntityAttribute<BuildingAttribute>();
NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!");
return building_attribute.OwnerUserGuid == userGuid;
}
public bool isLoadFromDb()
{
var building = getOwner() as Building;
NullReferenceCheckHelper.throwIfNull(building, () => $"building is null !!!");
var building_attribute = building.getEntityAttribute<BuildingAttribute>();
NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!");
return building_attribute.IsLoadFromDb;
}
}

View File

@@ -0,0 +1,44 @@
using ServerCommon;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ServerCore; using ServerBase;
namespace GameServer
{
public class Building : EntityBase
{
public Building()
: base(EntityType.Building)
{
}
public override async Task<Result> onInit()
{
addEntityAttribute(new BuildingAttribute(this));
addEntityAction(new BuildingAction(this));
addEntityAction(new BuildingFloorAgentAction(this));
addEntityAction(new BuildingProfitAgentAction(this));
addEntityAction(new BuildingProfitHistoryAgentAction(this));
addEntityAction(new BuildingRentalHistoryAgentAction(this));
return await base.onInit();
}
public override string toBasicString()
{
return $"{this.getTypeName()}, BuildingMetaId:{getOriginEntityAttribute<BuildingAttribute>()?.BuildingMetaId}";
}
public override string toSummaryString()
{
return $"{this.getTypeName()}, {getEntityAttribute<BuildingAttribute>()?.toBasicString()}";
}
}
}

View File

@@ -0,0 +1,36 @@
using ServerCommon.BusinessLogDomain;
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 static class BuildingBusinessLogHelper
{
public static BuildingLogInfo toBuildingLogInfo(this Building building)
{
var building_attribute = building.getEntityAttribute<BuildingAttribute>();
NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!");
var building_log_info = new BuildingLogInfo();
building_log_info.setBuildingInfo(building_attribute);
return building_log_info;
}
public static void setBuildingInfo(this BuildingLogInfo log, BuildingAttribute buildingAttribute)
{
log.setLogProperty(
(int)buildingAttribute.BuildingMetaId,
buildingAttribute.OwnerUserGuid,
buildingAttribute.RentalCurrencyType,
buildingAttribute.RentalCurrencyAmount,
buildingAttribute.IsRentalOpen
);
}
}
}

View File

@@ -0,0 +1,250 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ServerCore; using ServerBase;
using ServerCommon;
using MetaAssets;
using META_ID = System.UInt32;
namespace GameServer
{
internal static class BuildingHelper
{
public static async Task<BuildingInfo> toBuildingInfo(this Building building)
{
var result = new Result();
var building_attribute = building.getEntityAttribute<BuildingAttribute>();
NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!!");
var building_info = new BuildingInfo();
building_info.BuildingMetaId = (int)building_attribute.BuildingMetaId;
building_info.BuildingName = building_attribute.BuildingName;
building_info.BuildingDescription = building_attribute.Description;
building_info.OwnerUserGuid = building_attribute.OwnerUserGuid;
building_info.RentalCurrencyType = building_attribute.RentalCurrencyType;
building_info.RentalCurrencyAmount = building_attribute.RentalCurrencyAmount;
building_info.IsRentalOpen = building_attribute.IsRentalOpen == true ? BoolType.True : BoolType.False;
if (building_attribute.OwnerUserGuid != string.Empty)
{
(result, var nickname_attrib) = await NicknameDoc.findNicknameFromGuid(building_attribute.OwnerUserGuid);
if (result.isSuccess() && nickname_attrib != null)
{
building_info.OwnerUserNickname = nickname_attrib.Nickname;
}
}
result = MapManager.Instance.tryGetUsingFloorCountByBuildingMetaId((int)building_attribute.BuildingMetaId, out var usingFloorCount);
if (result.isSuccess())
{
building_info.RentalFloorCount = usingFloorCount;
}
return building_info;
}
public static async Task<(Result, Building?, OwnedBuilding?, DynamoDbDocBase?)> tryGainBuilding(Player player, int buildingMetaId)
{
var result = new Result();
var err_msg = string.Empty;
var server_logic = GameServerApp.getServerLogic();
(result, var land_meta_data, var rental_fee_meta_data) = validCheckBuilding((META_ID)buildingMetaId);
if (result.isFail())
{
err_msg = $"Failed to validCheckOwnerLand() !!! : {result.toBasicString()} - {player.toBasicString()}";
Log.getLogger().error(err_msg);
return (result, null, null, null);
}
NullReferenceCheckHelper.throwIfNull(land_meta_data, () => $"land_meta_data is null !!!");
NullReferenceCheckHelper.throwIfNull(rental_fee_meta_data, () => $"rental_fee_meta_data is null !!!");
var building_manager = server_logic.getBuildingManager();
if (!building_manager.tryGetBuilding(buildingMetaId, out var building))
{
err_msg = $"Failed to tryGetBuilding() !!! : BuildingMetaId:{buildingMetaId} - {player.toBasicString()}";
result.setFail(ServerErrorCode.BuildingNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return (result, null, null, null);
}
var building_action = building.getEntityAction<BuildingAction>();
NullReferenceCheckHelper.throwIfNull(building_action, () => $"building_action is null !!! - {player.toBasicString()}");
var user_guid = player.getUserGuid();
building_action.setBuildingOwner( buildingMetaId, user_guid
, (CurrencyType)rental_fee_meta_data.CurrencyType
, rental_fee_meta_data.CurrencyValue, land_meta_data.RentalAvailable );
var building_attribute = building.getEntityAttribute<BuildingAttribute>();
NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"land_building_attributettribute is null !!! - {player.toBasicString()}");
(result, var building_doc_base) = await building_attribute.toDocBase();
if (result.isFail())
{
err_msg = $"Failed to toDocBase() !!! : {result.toBasicString()}";
Log.getLogger().error(err_msg);
return (result, null, null, null);
}
NullReferenceCheckHelper.throwIfNull(building_doc_base, () => $"building_doc_base is null !!! - {player.toBasicString()}");
(result, var owned_building) = await OwnedBuildingHelper.createOwnedBuilding(player, buildingMetaId, OwnedType.Own);
if (result.isFail())
{
err_msg = $"Failed to createOwnedBuilding() !!! : {result.toBasicString()}";
Log.getLogger().error(err_msg);
return (result, null, null, null);
}
return (result, building, owned_building, building_doc_base);
}
public static (Result, LandMetaData?, RentalfeeData?) validCheckBuilding(META_ID buildingMetaId)
{
var result = new Result();
var err_msg = string.Empty;
if (!MapManager.Instance.GetBuildingMapTree((Int32)buildingMetaId, out var building_map_tree))
{
err_msg = $"Failed to GetBuildingMapTree() !!! : BuildingMetaId:{buildingMetaId}";
result.setFail(ServerErrorCode.BuildingMapTreeDataNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return (result, null, null);
}
var land_map_tree = building_map_tree.ParentLandMapTree;
if (land_map_tree == null)
{
err_msg = $"Not Exist BuildingMapTree ParentLand !!! : BuildingMap:{building_map_tree.BuildingMapFileName}";
result.setFail(ServerErrorCode.BuildingMapTreeParentLandNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return (result, null, null);
}
if (!MetaData.Instance._LandTable.TryGetValue(land_map_tree.LandId, out var land_meta_data))
{
err_msg = $"Failed to MetaData.TryGetValue() !!! : LandMetaId:{land_map_tree.LandId}";
result.setFail(ServerErrorCode.LandMetaDataNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return (result, null, null);
}
if (!MetaData.Instance._RentalfeeTable.TryGetValue((land_meta_data.Editor, land_meta_data.LandSize), out var rentalfee_meta_data))
{
err_msg = $"Failed to MetaData.TryGetValue() !!! : Editor:{land_meta_data.Editor}, Size:{land_meta_data.LandSize}";
result.setFail(ServerErrorCode.RentalfeeMetaDataNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return (result, null, null);
}
return (result, land_meta_data, rentalfee_meta_data);
}
public static async Task<(Result, Building?, OwnedBuilding?, DynamoDbDocBase?)> tryInitMyBuildingOwnership(Player player, int buildingMetaId)
{
var result = new Result();
var err_msg = string.Empty;
var server_logic = GameServerApp.getServerLogic();
if (!MapManager.Instance.GetBuildingMapTree(buildingMetaId, out var building_map_tree))
{
err_msg = $"Failed to GetBuildingMapTree() !!! : BuildingMetaId:{buildingMetaId} - {player.toBasicString()}";
result.setFail(ServerErrorCode.BuildingMapTreeDataNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return (result, null, null, null);
}
var land_map_tree = building_map_tree.ParentLandMapTree;
if (land_map_tree == null)
{
err_msg = $"Not Exist BuildingMapTree ParentLand !!! : BuildingMap:{building_map_tree.BuildingMapFileName} - {player.toBasicString()}";
result.setFail(ServerErrorCode.BuildingMapTreeParentLandNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return (result, null, null, null);
}
if (!MetaData.Instance._LandTable.TryGetValue(land_map_tree.LandId, out var land_meta_data))
{
err_msg = $"Failed to MetaData.TryGetValue() !!! : LandMetaId:{land_map_tree.LandId} - {player.toBasicString()}";
result.setFail(ServerErrorCode.LandMetaDataNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return (result, null, null, null);
}
var building_manager = server_logic.getBuildingManager();
if (!building_manager.tryGetBuilding(buildingMetaId, out var building))
{
err_msg = $"Failed to tryGetBuilding() !!! : BuildingMetaId:{buildingMetaId} - {player.toBasicString()}";
result.setFail(ServerErrorCode.BuildingNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return (result, null, null, null);
}
var building_action = building.getEntityAction<BuildingAction>();
NullReferenceCheckHelper.throwIfNull(building_action, () => $"building_action is null !!! - {player.toBasicString()}");
var user_guid = player.getUserGuid();
if (!building_action.isBuildingOwner(user_guid))
{
err_msg = $"Building Owner is Not Match !!! : buildingMetaId:{buildingMetaId} - {player.toBasicString()}";
result.setFail(ServerErrorCode.BuildingOwnerIsNotMatch, err_msg);
Log.getLogger().error(result.toBasicString());
return (result, null, null, null);
}
building_action.initOwner();
var building_attribute = building.getEntityAttribute<BuildingAttribute>();
NullReferenceCheckHelper.throwIfNull(building_attribute, () => $"building_attribute is null !!! - {player.toBasicString()}");
(result, var building_doc_base) = await building_attribute.toDocBase();
if (result.isFail())
{
err_msg = $"Failed to toDocBase() !!! : {result.toBasicString()}";
Log.getLogger().error(err_msg);
return (result, null, null, null);
}
NullReferenceCheckHelper.throwIfNull(building_doc_base, () => $"building_doc_base is null !!! - {player.toBasicString()}");
var owned_building_agent_action = player.getEntityAction<OwnedBuildingAgentAction>();
NullReferenceCheckHelper.throwIfNull(owned_building_agent_action, () => $"owned_building_agent_action is null !!! - {player.toBasicString()}");
if (!owned_building_agent_action.tryGetOwnedBuilding(buildingMetaId, out var owned_building))
{
err_msg = $"Failed to tryGetOwnedBuilding() !!! : buildingMetaId:{buildingMetaId} - {player.toBasicString()}";
result.setFail(ServerErrorCode.OwnedBuildingNotFound, err_msg);
Log.getLogger().error(result.toBasicString());
return (result, null, null, null);
}
var owned_building_action = owned_building.getEntityAction<OwnedBuildingAction>();
NullReferenceCheckHelper.throwIfNull(owned_building_action, () => $"owned_building_action is null !!! - {player.toBasicString()}");
owned_building_action.DeleteOwnedBuilding();
return (result, building, owned_building, building_doc_base);
}
}
}

View File

@@ -0,0 +1,132 @@
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Org.BouncyCastle.Asn1.Ocsp;
using ServerCommon;
using ServerCore; using ServerBase;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static ClientToGameMessage.Types;
using static ServerMessage.Types;
namespace GameServer
{
internal static class BuildingNotifyHelper
{
public static async Task<bool> send_S2C_NTF_BUILDING_INFOS(this Player player)
{
var result = new Result();
var server_logic = GameServerApp.getServerLogic();
var building_manager = server_logic.getBuildingManager();
var ntf_packet = new ClientToGame();
ntf_packet.Message = new ClientToGameMessage();
ntf_packet.Message.NtfBuildingInfos = new GS2C_NTF_BUILDING_INFOS();
var building_infos = await building_manager.tryGetBuildingInfos();
foreach (var building_info in building_infos)
{
ntf_packet.Message.NtfBuildingInfos.BuildingInfos.Add(building_info.BuildingMetaId, building_info);
}
if (false == GameServerApp.getServerLogic().onSendPacket(player, ntf_packet))
{
return false;
}
return true;
}
public static bool broadcast_S2C_NTF_BUILDING_INFOS(BuildingInfo buildingInfo)
{
var server_logic = GameServerApp.getServerLogic();
var users = server_logic.getPlayerManager().getUsers();
var players = users.Values.ToArray();
if (players.Length == 0)
return true;
var ntf_packet = new ClientToGame();
ntf_packet.Message = new ClientToGameMessage();
ntf_packet.Message.NtfBuildingInfos = new GS2C_NTF_BUILDING_INFOS();
ntf_packet.Message.NtfBuildingInfos.BuildingInfos.Add(buildingInfo.BuildingMetaId, buildingInfo);
if (false == GameServerApp.getServerLogic().onSendPacket(players, ntf_packet))
{
return false;
}
return true;
}
public static bool broadcast_S2C_NTF_BUILDING_INFOS(List<BuildingInfo> buildingInfos)
{
var server_logic = GameServerApp.getServerLogic();
var users = server_logic.getPlayerManager().getUsers();
var players = users.Values.ToArray();
if (players.Length == 0)
return true;
var ntf_packet = new ClientToGame();
ntf_packet.Message = new ClientToGameMessage();
ntf_packet.Message.NtfBuildingInfos = new GS2C_NTF_BUILDING_INFOS();
foreach (var buildingInfo in buildingInfos)
{
ntf_packet.Message.NtfBuildingInfos.BuildingInfos.Add(buildingInfo.BuildingMetaId, buildingInfo);
}
if (false == GameServerApp.getServerLogic().onSendPacket(players, ntf_packet))
{
return false;
}
return true;
}
public static bool send_GS2GS_NTF_MODIFY_BUILDING_INFO(List<BuildingInfo> buildingInfos)
{
var server_logic = GameServerApp.getServerLogic();
var message = new ServerMessage();
message.NtfModifyBuildingInfo = new GS2GS_NTF_MODIFY_BUILDING_INFO();
message.NtfModifyBuildingInfo.ExceptServerName = server_logic.getServerName();
message.NtfModifyBuildingInfo.BuildingInfos.AddRange(buildingInfos);
var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMQ4Game;
NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit_mq is null !!!");
rabbit_mq.sendMessageToExchangeAllGame(message);
return true;
}
public static async Task<bool> sendNtfModifyBuildingInfo(Building building)
{
var building_info = await building.toBuildingInfo();
var building_infos = new List<BuildingInfo>();
building_infos.Add(building_info);
// 현재 서버 유저
broadcast_S2C_NTF_BUILDING_INFOS(building_info);
// 다른 서버
send_GS2GS_NTF_MODIFY_BUILDING_INFO(building_infos);
return true;
}
public static bool sendNtfModifyBuildingInfo(List<BuildingInfo> buildingInfos)
{
broadcast_S2C_NTF_BUILDING_INFOS(buildingInfos);
send_GS2GS_NTF_MODIFY_BUILDING_INFO(buildingInfos);
return true;
}
}
}