초기커밋

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,146 @@
using Newtonsoft.Json;
using Google.Protobuf;
using Google.Protobuf.WellKnownTypes;
using ServerCore;
using ServerBase;
using ServerCommon;
using static ServerMessage.Types;
namespace GameServer.PacketHandler;
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.InviteFriendToMyhomeReq), typeof(InviteFriendToMyhomePacketHandler), typeof(GameLoginListener))]
public class InviteFriendToMyhomePacketHandler : PacketRecvHandler
{
public override async Task<Result> onProcessPacket(ISession entityWithSession, IMessage recvMessage)
{
var player = entityWithSession as Player;
NullReferenceCheckHelper.throwIfNull(player, () => $"player is null !");
var recv_msg = recvMessage as ClientToGame;
ArgumentNullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!! - {player.toBasicString()}");
var request = recv_msg.Request.InviteFriendToMyhomeReq;
ArgumentNullReferenceCheckHelper.throwIfNull(request, () => $"recv_msg is null !!! - {player.toBasicString()}");
var result = new Result();
var err_msg = string.Empty;
var player_action = player.getEntityAction<PlayerAction>();
NullReferenceCheckHelper.throwIfNull(player_action, () => $"player_action is null !!! - {player.toBasicString()}");
var selected_character = player_action.getSelectedCharacter();
if (null == selected_character)
{
err_msg = $"Not selected Character !!! - {player.toBasicString()}";
result.setFail(ServerErrorCode.CharacterNotSelected, err_msg);
Log.getLogger().error(result.toBasicString());
send_GS2C_ACK_INVITE_FRIEND_TO_MYHOME(player, result);
return result;
}
var character_action = selected_character.getEntityAction<CharacterAction>();
NullReferenceCheckHelper.throwIfNull(character_action, () => $"character_action is null !!! - {selected_character.toBasicString()}");
if (character_action.isFarming())
{
err_msg = $"Character is Farming !!! - {selected_character.toBasicString()}, {player.toBasicString()}";
result.setFail(ServerErrorCode.FarimgState, err_msg);
Log.getLogger().error(result.toBasicString());
send_GS2C_ACK_INVITE_FRIEND_TO_MYHOME(player, result);
return result;
}
var friend_infos = request.Infos.ToList();
var friend_myhome_action = player.getEntityAction<FriendInviteMyhomeAction>();
NullReferenceCheckHelper.throwIfNull(friend_myhome_action, () => $"friend_myhome_action is null !!! - {player.toBasicString()}");
(result, var fail_infos, var noti_infos) = await friend_myhome_action.inviteFriendToMyhome(friend_infos);
if (result.isFail())
{
send_GS2C_ACK_INVITE_FRIEND_TO_MYHOME(player, result);
return result;
}
send_GS2C_ACK_INVITE_FRIEND_TO_MYHOME(player, fail_infos, noti_infos);
//초대 Noti 전송
await send_GS2C_NTF_RECEIVE_INVITE_MYHOME(player, noti_infos);
//로그
var invokers = new List<ILogInvoker>();
Dictionary<string, string> invite_result = new Dictionary<string, string>();
foreach (var noti in noti_infos)
{
invite_result.Add(noti.BaseInfo.ReceiverGuid, ServerErrorCode.Success.ToString());
}
foreach (var fail_info in fail_infos)
{
invite_result.Add(fail_info.Guid, fail_info.ErrorCode.ToString());
}
invokers.Add(new InviteFriendToMyhomeBusinessLog(player.getUserGuid(), invite_result));
var log_action = new LogActionEx(LogActionType.RefuseFriendRequest);
BusinessLogger.collectLogs(log_action, player, invokers);
return result;
}
private async Task<bool> send_GS2C_NTF_RECEIVE_INVITE_MYHOME(Player owner, List<ReceiveInviteMyHomeNoti> noties)
{
var server_logic = GameServerApp.getServerLogic();
var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMQ4Game;
NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit mq is null !! - player:{owner.toBasicString()}");
foreach (var noti in noties)
{
ServerMessage messgae = new ServerMessage();
messgae.ReceiveInviteMyHomeNoti = noti;
var login_cache_request = new LoginCacheOtherUserRequest(owner, server_logic.getRedisConnector(), noti.BaseInfo.ReceiverGuid);
var result = await login_cache_request.fetchLogin();
if (result.isFail())
{
Log.getLogger().info($"send_GS2C_NTF_RECEIVE_INVITE_MYHOME - fetchLogin fail - {result.ErrorCode}, noti : {JsonConvert.SerializeObject(noti)}");
continue;
}
var login_cache = login_cache_request.getLoginCache();
NullReferenceCheckHelper.throwIfNull(login_cache, () => $"LoginCache is null !! - player:{owner.toBasicString()}");
rabbit_mq.SendMessage(login_cache.CurrentServer, messgae);
}
return true;
}
private static bool send_GS2C_ACK_INVITE_FRIEND_TO_MYHOME(Player owner, Result result)
{
ClientToGame ack_packet = new();
ack_packet.Response = new();
ack_packet.Response.ErrorCode = result.ErrorCode;
ack_packet.Response.InviteFriendToMyhomeRes = new();
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
return true;
}
private static bool send_GS2C_ACK_INVITE_FRIEND_TO_MYHOME(Player owner, List<FriendErrorMember> failInfos, List<ReceiveInviteMyHomeNoti> noties)
{
ClientToGame ack_packet = new();
ack_packet.Response = new();
ack_packet.Response.ErrorCode = ServerErrorCode.Success;
ack_packet.Response.InviteFriendToMyhomeRes = new();
ack_packet.Response.InviteFriendToMyhomeRes.FailInfos.AddRange(failInfos);
ack_packet.Response.InviteFriendToMyhomeRes.SuccessGuids.AddRange(noties.Select(x => x.BaseInfo.ReceiverGuid));
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
return true;
}
}