초기커밋

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,33 @@
using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
using MetaAssets;
namespace GameServer;
public static class PartyExtensions
{
public static async Task<Result> joinParty(this Player owner)
{
var result = new Result();
// 1. 파티 정보
var party_action = owner.getEntityAction<PersonalPartyAction>();
NullReferenceCheckHelper.throwIfNull(party_action, () => $"party_action is null !!! - {owner.toBasicString()}");
result = await party_action.tryLoadParty();
if (result.isFail())
{
Log.getLogger().error(result.toBasicString());
}
return result;
}
}

View File

@@ -0,0 +1,171 @@
using Nettention.Proud;
using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
using MetaAssets;
using USER_GUID = System.String;
using PARTY_GUID = System.String;
namespace GameServer;
public class PartyHelper
{
public static void sendToClient(ClientToGame message, HostID target_client)
{
GameServerApp.getServerLogic().onSendPacketToHost(target_client, RmiContext.ReliableSend, message);
}
public static void sendToClient(ClientToGame message, USER_GUID userGuid)
{
var player_manager = GameServerApp.getServerLogic().getPlayerManager();
if (!player_manager.tryGetUserByPrimaryKey(userGuid, out var player)) return;
sendToClient(message, player.getHostId());
}
public static void BroadcastToClients(GlobalPartyDetail party, ClientToGame message, IReadOnlyList<USER_GUID> except_users)
{
var party_action = party.getEntityAction<GlobalPartyDetailAction>();
ArgumentNullException.ThrowIfNull(party_action);
var party_member_attribute = party.getEntityAttribute<PartyMemberAttribute>();
ArgumentNullException.ThrowIfNull(party_member_attribute);
var users = party_member_attribute.getPartyMembers().Select(member => member.Key).ToList();
BroadcastToClients(users, message, except_users);
}
public static void BroadcastToClients(IReadOnlyList<USER_GUID> target_users, ClientToGame message,
IReadOnlyList<USER_GUID> except_users)
{
var target_clients = new List<HostID>();
var player_manager = GameServerApp.getServerLogic().getPlayerManager();
foreach (var user in target_users)
{
if (except_users.Contains(user)) continue;
if (!player_manager.tryGetUserByPrimaryKey(user, out var member)) continue;
target_clients.Add(member.getHostId());
}
GameServerApp.getServerLogic().onSendPacketToHosts(target_clients.ToArray(), RmiContext.ReliableSend, message);
}
public static void sendToServer(ServerMessage message, string dest_server)
{
var rabbit_mq = GameServerApp.getServerLogic().getRabbitMqConnector() as RabbitMqConnector;
ArgumentNullException.ThrowIfNull(rabbit_mq);
rabbit_mq.SendMessage(dest_server, message);
}
public static async Task sendToServerByTargetClient(USER_GUID target_user_guid, ServerMessage message)
{
var login_cache = await getOtherUserLoginCache(target_user_guid);
if (null == login_cache) return;
sendToServer(message, login_cache.CurrentServer);
}
public static void BroadcastToServers(GlobalPartyDetail party, ServerMessage message, bool except_me)
{
var party_server_attribute = party.getEntityAttribute<PartyServerAttribute>();
ArgumentNullException.ThrowIfNull(party_server_attribute);
BroadcastToServers(party_server_attribute.getPartyServers().ToList(), message, except_me);
}
public static void BroadcastToServers(IReadOnlyList<PARTY_GUID> servers, ServerMessage message, bool except_me)
{
var rabbit_mq = GameServerApp.getServerLogic().getRabbitMqConnector() as RabbitMqConnector;
ArgumentNullException.ThrowIfNull(rabbit_mq);
foreach (var server in servers)
{
if (except_me && server == GameServerApp.getServerLogic().getServerName()) continue;
rabbit_mq.SendMessage(server, message);
}
}
public static async Task<string?> getUserNicknameFromGuid(USER_GUID userGuid)
{
var find = await NicknameDoc.findNicknameFromGuid(userGuid);
NullReferenceCheckHelper.throwIfNull(find);
NullReferenceCheckHelper.throwIfNull(find.attrib, () => $"find.attrib is null !!!");
return find.result.isFail() ? null : find.attrib.Nickname;
}
public static LoginCacheRequest? getOwnUserLoginCacheRequest(Player player)
{
var game_login_action = player.getEntityAction<GameLoginAction>();
var login_cache_request = game_login_action.getLoginCacheRequest();
return login_cache_request;
}
public static async Task<LoginCache?> getOtherUserLoginCache(USER_GUID user_guid)
{
var login_cache_request =
new LoginCacheOtherUserRequest(GameServerApp.getServerLogic(), GameServerApp.getServerLogic().getRedisConnector(), user_guid);
var result = await login_cache_request.fetchLogin();
return result.isFail() ? null : login_cache_request.getLoginCache();
}
public static async Task<LoginCache?> getOtherUserLoginCache(UserBase requester, USER_GUID user_guid)
{
var login_cache_request =
new LoginCacheOtherUserRequest(requester, GameServerApp.getServerLogic().getRedisConnector(), user_guid);
var result = await login_cache_request.fetchLogin();
return result.isFail() ? null : login_cache_request.getLoginCache();
}
public static PartyMemberInfo makePartyMember(string user_guid, string nickname)
{
var server_logic = GameServerApp.getServerLogic();
var user = new PartyMemberInfo();
user.Summon = new();
user.UserGuid = user_guid;
user.Nickname = nickname;
user.JoinTime = Timestamp.FromDateTime(DateTime.UtcNow);
if (false == server_logic.getPlayerManager().tryGetUserByPrimaryKey(user_guid, out var player))
{
user.LocationInfo = new UserLocationInfo();
user.LocationInfo.Id = 0;
user.LocationInfo.IsChannel = server_logic.getServerType().toServerType() == ServerType.Channel ? 1 : 0;
user.LocationInfo.ChannelNumber = (1 == user.LocationInfo.IsChannel) ? (int)server_logic.getChannelNo() : 0;
}
else
{
user.LocationInfo = player.getUserLocationInfo();
}
return user;
}
public static float calculateDistance(Pos standard, Pos target)
{
var from_vector = new System.Numerics.Vector3(standard.X, standard.Y, standard.Z);
var to_vector = new System.Numerics.Vector3(target.X, target.Y, target.Z);
return Vector3Helper.distance(from_vector, to_vector);
}
public static string getPartyGuidFromPartyInstanceRoomId(string roomId)
{
var split = roomId.Split(":");
if (split.Length < 2) return string.Empty;
return split[1];
}
}