초기커밋

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

using System.Collections.Concurrent;
using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
using ServerCommon.BusinessLogDomain;
using MetaAssets;
namespace GameServer;
public static class FriendNotifyHelper
{
public static void send_S2C_NTF_FRIENDS(this Player player)
{
var server_logic = GameServerApp.getServerLogic();
var ntf_packet = new ClientToGame();
ntf_packet.Message = new();
ntf_packet.Message.FriendListNoti = new();
var friend_agent_action = player.getEntityAction<FriendAgentAction>();
ConcurrentDictionary<string, Friend> friends = friend_agent_action.getFriends();
foreach (var saved_friend in friends.Values)
{
var saved_friend_attribute = saved_friend.getEntityAttribute<FriendAttribute>();
NullReferenceCheckHelper.throwIfNull(saved_friend_attribute, () => $"saved_friend_attribute is null");
FriendInfo info = new();
info.Guid = saved_friend_attribute.FriendGuid;
info.NickName = saved_friend_attribute.Nickname;
info.FolderName = saved_friend_attribute.FolderName;
info.IsNew = saved_friend_attribute.IsNew;
ntf_packet.Message.FriendListNoti.FriendList.Add(info);
}
server_logic.onSendPacket(player, ntf_packet);
}
//customUI 추가 되면 삭제 할 예정
public static void send_S2C_NTF_FRIEND_FOLDERS(this Player player)
{
var server_logic = GameServerApp.getServerLogic();
var ntf_packet = new ClientToGame();
ntf_packet.Message = new();
ntf_packet.Message.FriendFolderListNoti = new();
var friend_folder_attribute = player.getEntityAttribute<FriendFolderAttribute>();
NullReferenceCheckHelper.throwIfNull(friend_folder_attribute, () => $"friend_folder_attribute is null");
ntf_packet.Message.FriendFolderListNoti.FolderOrderType = friend_folder_attribute.m_folder_order_type;
foreach (var folder in friend_folder_attribute.m_folders.Values)
{
FriendFolder friend_folder = new();
friend_folder.FolderName = folder.FolderName;
friend_folder.IsHold = folder.IsHold;
friend_folder.HoldTime = Timestamp.FromDateTime(folder.HoldTime);
friend_folder.CreateTime = Timestamp.FromDateTime(folder.CreateTime);
ntf_packet.Message.FriendFolderListNoti.FriendFolderList.Add(friend_folder);
}
server_logic.onSendPacket(player, ntf_packet);
}
public static async Task send_S2C_NTF_SENDED_FRIEND_REQUESTS(this Player player)
{
var server_logic = GameServerApp.getServerLogic();
var ntf_packet = new ClientToGame();
ntf_packet.Message = new();
ntf_packet.Message.SendedFriendRequestNoti = new();
FriendReqCacheRequest cache_request = new FriendReqCacheRequest(player, player.getUserGuid(), server_logic.getRedisConnector());
List<FriendRequestCache> caches = await cache_request.getSendedFriendRequests();
var infos = await fillupFriendRequestInfos(caches);
ntf_packet.Message.SendedFriendRequestNoti.RequestList.AddRange(infos);
server_logic.onSendPacket(player, ntf_packet);
}
public static async Task send_S2C_NTF_RECEIVED_FRIEND_REQUESTS(this Player player)
{
var server_logic = GameServerApp.getServerLogic();
var ntf_packet = new ClientToGame();
ntf_packet.Message = new();
ntf_packet.Message.ReceivedFriendRequestNoti = new();
FriendReqCacheRequest cache_request = new FriendReqCacheRequest(player, player.getUserGuid(), server_logic.getRedisConnector());
List<FriendRequestCache> caches = await cache_request.getReceivedFriendRequests();
var infos = await fillupFriendRequestInfos(caches);
ntf_packet.Message.ReceivedFriendRequestNoti.RequestList.AddRange(infos);
server_logic.onSendPacket(player, ntf_packet);
}
private static async Task<List<FriendRequestInfo>> fillupFriendRequestInfos(List<FriendRequestCache> caches)
{
List<FriendRequestInfo> infos = new();
foreach (var request_friend in caches)
{
FriendRequestInfo info = new();
info.Guid = request_friend.m_receiver_guid;
(var result, var nickname_attrib) = await NicknameDoc.findNicknameFromGuid(request_friend.m_receiver_guid);
if (result.isFail())
{
Log.getLogger().error($"{request_friend.m_receiver_guid} user not exitst Nickname");
info.NickName = string.Empty;
}
else
{
NullReferenceCheckHelper.throwIfNull(nickname_attrib, () => $"nickname_attrib is null");
info.NickName = nickname_attrib.Nickname;
}
info.IsNew = request_friend.m_is_new;
info.RequestTime = Timestamp.FromDateTime(request_friend.m_request_time);
infos.Add(info);
}
return infos;
}
public static async Task sendLoginNotiToFriend(this Player player, bool isFirstLogin)
{
if (isFirstLogin)
{
await player.send_GS2CS_NTF_LOGIN_TO_FRIENDS();
}
else
{
await player.send_GS2CS_NTF_STATE_TO_FRIENDS();
}
}
public static async Task<Result> send_GS2CS_NTF_LOGIN_TO_FRIENDS(this Player player)
{
var server_logic = GameServerApp.getServerLogic();
var friend_action = player.getEntityAction<FriendAgentAction>();
NullReferenceCheckHelper.throwIfNull(friend_action, () => $"friend_action is null");
var friends = friend_action.getFriends();
var login_cache_request = new LoginCacheRequest(player, server_logic.getRedisConnector());
var result = await login_cache_request.fetchLogin();
if (result.isFail()) return result;
var login_cache = login_cache_request.getLoginCache();
NullReferenceCheckHelper.throwIfNull(login_cache, () => $"login_cache is null");
var location_info = player.getUserLocationInfo();
var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMQ4Game;
NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit_mq is null");
foreach (var friend in friends)
{
var friend_guid = friend.Key;
var friend_login_cache = await getFriendCache(player, friend_guid);
if (friend_login_cache == null) continue;
var target_server = friend_login_cache.CurrentServer;
var message = new ServerMessage();
message.LoginNotiToFriend = new();
message.LoginNotiToFriend.BaseInfo = new();
message.LoginNotiToFriend.BaseInfo.SenderId = player.getUserGuid();
message.LoginNotiToFriend.BaseInfo.SenderGuid = player.getUserGuid();
message.LoginNotiToFriend.BaseInfo.SenderNickName = player.getUserNickname();
message.LoginNotiToFriend.BaseInfo.SenderState = (Int32)login_cache.State;
message.LoginNotiToFriend.BaseInfo.SenderMapId = location_info.Id;
message.LoginNotiToFriend.LocationInfo = location_info;
message.LoginNotiToFriend.BaseInfo.ReceiverId = friend_guid;
message.LoginNotiToFriend.BaseInfo.ReceiverGuid = friend_guid;
message.LoginNotiToFriend.BaseInfo.ReceiverNickName = string.Empty;
rabbit_mq.SendMessage(target_server, message);
}
return result;
}
public static async Task send_GS2CS_NTF_LOGOUT_TO_FRIENDS(this Player player)
{
var server_logic = GameServerApp.getServerLogic();
var friend_action = player.getEntityAction<FriendAgentAction>();
NullReferenceCheckHelper.throwIfNull(friend_action, () => $"friend_action is null");
var friends = friend_action.getFriends();
var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMQ4Game;
NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit_mq is null");
foreach (var friend in friends)
{
var friend_guid = friend.Key;
var friend_login_cache = await getFriendCache(player, friend_guid);
if (friend_login_cache == null) continue;
var target_server = friend_login_cache.CurrentServer;
ServerMessage message = new ServerMessage();
message.LogoutNotiToFriend = new();
message.LogoutNotiToFriend.BaseInfo = new();
message.LogoutNotiToFriend.BaseInfo.SenderId = player.getUserGuid();
message.LogoutNotiToFriend.BaseInfo.SenderGuid = player.getUserGuid();
message.LogoutNotiToFriend.BaseInfo.SenderNickName = player.getUserNickname();
message.LogoutNotiToFriend.BaseInfo.SenderState = 0;
message.LogoutNotiToFriend.BaseInfo.SenderMapId = 0;
message.LogoutNotiToFriend.BaseInfo.ReceiverId = friend_guid;
message.LogoutNotiToFriend.BaseInfo.ReceiverGuid = friend_guid;
message.LogoutNotiToFriend.BaseInfo.ReceiverNickName = string.Empty;
rabbit_mq.SendMessage(target_server, message);
}
}
public static async Task send_GS2CS_NTF_STATE_TO_FRIENDS(this Player player)
{
var server_logic = GameServerApp.getServerLogic();
var friend_action = player.getEntityAction<FriendAgentAction>();
NullReferenceCheckHelper.throwIfNull(friend_action, () => $"friend_action is null");
var friends = friend_action.getFriends();
var login_cache_request = new LoginCacheRequest(player, server_logic.getRedisConnector());
var result = await login_cache_request.fetchLogin();
if (result.isFail()) return;
var login_cache = login_cache_request.getLoginCache();
NullReferenceCheckHelper.throwIfNull(login_cache, () => $"login_cache is null");
var location_info = player.getUserLocationInfo();
var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMQ4Game;
NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit_mq is null");
foreach (var friend in friends)
{
var friend_guid = friend.Key;
var friend_login_cache = await getFriendCache(player, friend_guid);
if (friend_login_cache == null) continue;
var target_server = friend_login_cache.CurrentServer;
ServerMessage stateNoti = new()
{
StateNotiToFriend = new()
};
stateNoti.StateNotiToFriend.BaseInfo = new();
stateNoti.StateNotiToFriend.BaseInfo.SenderId = player.getUserGuid();
stateNoti.StateNotiToFriend.BaseInfo.SenderGuid = player.getUserGuid();
stateNoti.StateNotiToFriend.BaseInfo.SenderNickName = player.getUserNickname();
stateNoti.StateNotiToFriend.BaseInfo.SenderState = (Int32)login_cache.State;
stateNoti.StateNotiToFriend.BaseInfo.SenderMapId = location_info.Id;
stateNoti.StateNotiToFriend.BaseInfo.ReceiverId = friend_guid;
stateNoti.StateNotiToFriend.BaseInfo.ReceiverGuid = friend_guid;
stateNoti.StateNotiToFriend.BaseInfo.ReceiverNickName = string.Empty;
stateNoti.StateNotiToFriend.LocationInfo = location_info;
rabbit_mq.SendMessage(target_server, stateNoti);
}
}
public static async Task send_GS2CS_NTF_STATE_TO_FRIEND(this Player player, string friendGuid)
{
var server_logic = GameServerApp.getServerLogic();
var login_cache_request = new LoginCacheRequest(player, server_logic.getRedisConnector());
var result = await login_cache_request.fetchLogin();
if (result.isFail()) return;
var login_cache = login_cache_request.getLoginCache();
NullReferenceCheckHelper.throwIfNull(login_cache, () => $"login_cache is null");
var location_info = player.getUserLocationInfo();
var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMQ4Game;
NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit_mq is null");
var friend_login_cache = await getFriendCache(player, friendGuid);
if (friend_login_cache == null) return;
var target_server = friend_login_cache.CurrentServer;
ServerMessage stateNoti = new()
{
StateNotiToFriend = new()
};
stateNoti.StateNotiToFriend.BaseInfo = new();
stateNoti.StateNotiToFriend.BaseInfo.SenderId = player.getUserGuid();
stateNoti.StateNotiToFriend.BaseInfo.SenderGuid = player.getUserGuid();
stateNoti.StateNotiToFriend.BaseInfo.SenderNickName = player.getUserNickname();
stateNoti.StateNotiToFriend.BaseInfo.SenderState = (Int32)login_cache.State;
stateNoti.StateNotiToFriend.BaseInfo.SenderMapId = location_info.Id;
stateNoti.StateNotiToFriend.BaseInfo.ReceiverId = friendGuid;
stateNoti.StateNotiToFriend.BaseInfo.ReceiverGuid = friendGuid;
stateNoti.StateNotiToFriend.BaseInfo.ReceiverNickName = string.Empty;
stateNoti.StateNotiToFriend.LocationInfo = location_info;
rabbit_mq.SendMessage(target_server, stateNoti);
}
public static async Task<LoginCache?> getFriendCache(Player player, string friend_guid)
{
var server_logic = GameServerApp.getServerLogic();
var friend_login_cache_request = new LoginCacheOtherUserRequest(player, server_logic.getRedisConnector(), friend_guid);
var result = await friend_login_cache_request.fetchLogin();
if (result.isFail()) return null;
var friend_login_cache = friend_login_cache_request.getLoginCache();
return friend_login_cache;
}
public static async Task send_NTF_TO_FRIEND_ABOUT_LEAVING_HOME(Player player)
{
var server_logic = GameServerApp.getServerLogic();
var friend_action = player.getEntityAction<FriendAgentAction>();
NullReferenceCheckHelper.throwIfNull(friend_action, () => $"friend_action is null");
var friends = friend_action.getFriends();
var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMQ4Game;
NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit_mq is null");
foreach (var friend in friends)
{
var friend_guid = friend.Key;
var friend_login_cache = await getFriendCache(player, friend_guid);
if (friend_login_cache == null) continue;
var target_server = friend_login_cache.CurrentServer;
ServerMessage notiMessage = new ServerMessage();
notiMessage.NtfFriendLeavingHome = new();
notiMessage.NtfFriendLeavingHome.Guid = player.getUserGuid();
notiMessage.NtfFriendLeavingHome.NickName = player.getUserNickname();
notiMessage.NtfFriendLeavingHome.ReceiverId = friend_guid;
rabbit_mq.SendMessage(target_server, notiMessage);
}
}
public static async Task send_GS2CS_NTF_FRIEND_LEAVE_MYHOME(this Player player)
{
var friend_action = player.getEntityAction<FriendAgentAction>();
NullReferenceCheckHelper.throwIfNull(friend_action, () => $"friend_action is null");
var friends = friend_action.getFriends();
var server_logic = GameServerApp.getServerLogic();
var rabbitMQ4Game = server_logic.getRabbitMqConnector() as RabbitMQ4Game;
NullReferenceCheckHelper.throwIfNull(rabbitMQ4Game, () => $"rabbitMQ4Game is null");
foreach (var friend in friends)
{
var friend_guid = friend.Key;
var friend_login_cache = await getFriendCache(player, friend_guid);
if (friend_login_cache == null) continue;
var target_server = friend_login_cache.CurrentServer;
ServerMessage ntf_packet = new()
{
NtfFriendLeavingHome = new()
};
ntf_packet.NtfFriendLeavingHome.Guid = player.getUserGuid();
ntf_packet.NtfFriendLeavingHome.NickName = player.getUserNickname();
ntf_packet.NtfFriendLeavingHome.ReceiverId = friend_guid;
rabbitMQ4Game.SendMessage(target_server, ntf_packet);
};
}
}