초기커밋

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,131 @@
using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
namespace GameServer.PacketHandler;
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.SendFriendRequestReq), typeof(SendFriendRequestPacketHandler), typeof(GameLoginListener))]
public class SendFriendRequestPacketHandler : PacketRecvHandler
{
public override async Task<Result> onProcessPacket(ISession session, IMessage recvMessage)
{
var owner = session as Player;
NullReferenceCheckHelper.throwIfNull(owner, () => $"owner is null !!!");
var recv_msg = recvMessage as ClientToGame;
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!!");
var request = recv_msg.Request.SendFriendRequestReq;
var nickname = request.NickName;
var friend_agent_action = owner.getEntityAction<FriendAgentAction>();
//닉네임 없으면 존재하지 않는 캐릭터
(var result, var nickname_attrib) = await NicknameHelper.findNickname(nickname);
if (result.isFail())
{
Log.getLogger().error($"SendFriendRequestReq nickname not found. nickname : {nickname}");
result.setFail(ServerErrorCode.FriendRequestNotExistInfo);
send_GS2C_ACK_SEND_FRIEND_REQUEST(owner, result);
return result;
}
NullReferenceCheckHelper.throwIfNull(nickname_attrib, () => $"nickname_attrib is null !!!");
var friend_guid = nickname_attrib.UserGuid;
var send_friend_request_action = owner.getEntityAction<SendFriendRequestAction>();
result = await send_friend_request_action.addRequestToCache(nickname, friend_guid);
if(result.isFail())
{
//에러 패킷 리턴
send_GS2C_ACK_SEND_FRIEND_REQUEST(owner, result);
return result;
}
var server_logic = GameServerApp.getServerLogic();
var friend_request_cache = new FriendReqCacheRequest(owner, owner.getUserGuid(), friend_guid, server_logic.getRedisConnector());
(result, var req) = await friend_agent_action.sendedRequestExistCheck(friend_request_cache, friend_guid);
if (result.isFail() || friend_request_cache is null)
{
send_GS2C_ACK_SEND_FRIEND_REQUEST(owner, result);
return result;
}
NullReferenceCheckHelper.throwIfNull(req, () => $"req is null !!!");
FriendRequestInfo info = new();
info.NickName = nickname;
info.Guid = req.m_receiver_guid;
info.IsNew = req.m_is_new;
info.RequestTime = Timestamp.FromDateTime(req.m_request_time);
send_GS2C_ACK_SEND_FRIEND_REQUEST(owner, result, info);
await send_GS2CS_NTF_FRIEND_REQUEST(owner, info);
//Log
List<ILogInvoker> invokers = new List<ILogInvoker>();
invokers.Add(new SendFriendRequestBusinessLog(owner.getUserGuid(), friend_guid));
var log_action = new LogActionEx(LogActionType.SendFriendRequest);
BusinessLogger.collectLogs(log_action, owner, invokers);
await QuestManager.It.QuestCheck(owner, new QuestFriend(EQuestEventTargetType.FRIEND, EQuestEventNameType.REQUESTED));
return result;
}
private static async Task<bool> send_GS2CS_NTF_FRIEND_REQUEST(Player owner, FriendRequestInfo info)
{
var message = new ServerMessage();
message.FriendRequestNoti = new();
message.FriendRequestNoti.RequestInfo = new();
message.FriendRequestNoti.RequestInfo.Guid = info.Guid;
message.FriendRequestNoti.RequestInfo.NickName = info.NickName;
message.FriendRequestNoti.RequestInfo.RequestTime = info.RequestTime;
message.FriendRequestNoti.RequestInfo.IsNew = info.IsNew;
var server_logic = GameServerApp.getServerLogic();
var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMqConnector;
NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit_mq is null !!!");
var login_cache_request = new LoginCacheOtherUserRequest(owner, server_logic.getRedisConnector(), info.Guid);
var result = await login_cache_request.fetchLogin();
if (result.isSuccess())
{
var login_cache = login_cache_request.getLoginCache();
NullReferenceCheckHelper.throwIfNull(login_cache, () => $"login_cache is null !!!");
rabbit_mq.SendMessage(login_cache.CurrentServer, message);
}
return true;
}
private static bool send_GS2C_ACK_SEND_FRIEND_REQUEST(Player owner, Result result)
{
var ack_packet = new ClientToGame();
ack_packet.Response = new ClientToGameRes();
ack_packet.Response.ErrorCode = result.ErrorCode;
ack_packet.Response.SendFriendRequestRes = new();
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) { return false; }
return true;
}
private static bool send_GS2C_ACK_SEND_FRIEND_REQUEST(Player owner, Result result, FriendRequestInfo info)
{
var ack_packet = new ClientToGame();
ack_packet.Response = new ClientToGameRes();
ack_packet.Response.ErrorCode = result.ErrorCode;
ack_packet.Response.SendFriendRequestRes = new();
ack_packet.Response.SendFriendRequestRes.FriendRequestInfo = info;
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) { return false; }
return true;
}
}