초기커밋
This commit is contained in:
@@ -0,0 +1,170 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
|
||||
|
||||
using static ClientToGameReq.Types;
|
||||
using static ClientToGameRes.Types;
|
||||
|
||||
|
||||
|
||||
namespace GameServer.PacketHandler;
|
||||
|
||||
[PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.ReplyInviteMyhomeReq), typeof(ReplyInviteMyhomePacketHandler), typeof(GameLoginListener))]
|
||||
public class ReplyInviteMyhomePacketHandler : 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;
|
||||
NullReferenceCheckHelper.throwIfNull(recv_msg, () => $"recv_msg is null !!! - {player.toBasicString()}");
|
||||
var request = recv_msg.Request.ReplyInviteMyhomeReq;
|
||||
NullReferenceCheckHelper.throwIfNull(request, () => $"request is null !!! - {player.toBasicString()}");
|
||||
|
||||
var result = new Result();
|
||||
var err_msg = string.Empty;
|
||||
|
||||
var player_action = player.getEntityAction<PlayerAction>();
|
||||
|
||||
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_REPLY_INVITE_MYHOME(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
var character_action = selected_character.getEntityAction<CharacterAction>();
|
||||
NullReferenceCheckHelper.throwIfNull(character_action, () => $"character_action is null !!! - {selected_character.toBasicString()}");
|
||||
|
||||
var my_guid = player.getUserGuid();
|
||||
var reply_value = request.AcceptOrRefuse;
|
||||
var reply_ref = new FriendReplyInviteMyhomeRefference(reply_value);
|
||||
var invitor_id = request.SenderId;
|
||||
|
||||
var room_id = request.InstanceRoomId;
|
||||
var friend_myhome_action = player.getEntityAction<FriendReplyInviteMyhomeAction>();
|
||||
result = await friend_myhome_action.checkReplyableAboutInvite(room_id, invitor_id, reply_ref);
|
||||
if (result.isFail())
|
||||
{
|
||||
send_GS2C_ACK_REPLY_INVITE_MYHOME(player, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(reply_ref.m_invitor_login_cache_nullable, () => $"reply_ref.m_invitor_login_cache_nullable is null !!!");
|
||||
|
||||
var invitor_login_cache = reply_ref.m_invitor_login_cache_nullable.getLoginCache();
|
||||
NullReferenceCheckHelper.throwIfNull(invitor_login_cache, () => $"invitor_login_cache is null !!!");
|
||||
|
||||
if (character_action.isFarming())
|
||||
{
|
||||
//파밍중이면 클라에서 요청을 받았을때 알아서 reply 4로 보내주기때문에 여기서 리턴 처리만 정상처리로 보낸다.
|
||||
//err_msg = $"Character is Farming !!! - {selected_character.toBasicString()}, {player.toBasicString()}";
|
||||
//result.setFail(ServerErrorCode.FarimgState, err_msg);
|
||||
//Log.getLogger().error(result.toBasicString());
|
||||
send_GS2C_ACK_REPLY_INVITE_MYHOME(player, result);
|
||||
//초대한 유저에게 에게 거절한 내용 전달
|
||||
send_GS2C_NTF_REPLY_INVITE_MYHOME(my_guid, reply_value, invitor_login_cache);
|
||||
return result;
|
||||
}
|
||||
|
||||
if (reply_value == (int)InviteFriendReplyType.Accept)
|
||||
{
|
||||
result = friend_myhome_action.acceptReply(reply_ref);
|
||||
|
||||
//에러든 아니든 여기서 리턴
|
||||
send_GS2C_ACK_REPLY_INVITE_MYHOME(player, result);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
|
||||
//초대한 유저에게 에게 수락한 내용 전달
|
||||
send_GS2C_NTF_REPLY_INVITE_MYHOME(my_guid, reply_value, invitor_login_cache);
|
||||
|
||||
|
||||
//친구 마이홈으로 이동하기 위한 처리
|
||||
result = await friend_myhome_action.joinFriendMyhomeFromInvite(room_id, reply_ref);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
result = MyhomeHelper.getMyhomeOwnerUserGuidAndMyhomeGuidFromRoomId(room_id, out var myhome_owner_user_guid, out _);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
(result, var myhome_attrib) = await MyhomeHelper.getEnterMyhomeAttribFromDynamoDb(myhome_owner_user_guid);
|
||||
if (result.isFail()) return result;
|
||||
|
||||
var server_connect_info = reply_ref.m_server_connect_info_nullable;
|
||||
|
||||
NullReferenceCheckHelper.throwIfNull(server_connect_info, () => $"server_connect_info is null !!!");
|
||||
|
||||
send_GS2C_NTF_FRIEND_MYHOME_INFO_NOTI(player, server_connect_info);
|
||||
|
||||
await QuestManager.It.QuestCheck(player, new QuestMyHome(EQuestEventTargetType.MYHOME, EQuestEventNameType.ENTERED, "OTHERS"));
|
||||
}
|
||||
else
|
||||
{
|
||||
//초대한 유저에게 에게 거절한 내용 전달
|
||||
send_GS2C_NTF_REPLY_INVITE_MYHOME(my_guid, reply_value, invitor_login_cache);
|
||||
|
||||
}
|
||||
|
||||
List<ILogInvoker> invokers = new List<ILogInvoker>();
|
||||
invokers.Add(new ReplyInviteMyhomeBuisinessLog(my_guid, invitor_login_cache.UserGuid, reply_value));
|
||||
var log_action = new LogActionEx(LogActionType.RefuseFriendRequest);
|
||||
BusinessLogger.collectLogs(log_action, player, invokers);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static bool send_GS2C_NTF_FRIEND_MYHOME_INFO_NOTI(Player owner, ServerConnectInfo serverConnectInfo)
|
||||
{
|
||||
ClientToGame ntf_packet = new ClientToGame();
|
||||
ntf_packet.Message = new ClientToGameMessage();
|
||||
ntf_packet.Message.FriendMyhomeInfoNoti = new();
|
||||
ntf_packet.Message.FriendMyhomeInfoNoti.InstanceServerConnectInfo = serverConnectInfo;
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ntf_packet)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static bool send_GS2C_ACK_REPLY_INVITE_MYHOME(Player owner, Result result)
|
||||
{
|
||||
ClientToGame ack_packet = new();
|
||||
ack_packet.Response = new();
|
||||
ack_packet.Response.ErrorCode = result.ErrorCode;
|
||||
ack_packet.Response.ReplyInviteMyhomeRes = new();
|
||||
|
||||
if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private static bool send_GS2C_NTF_REPLY_INVITE_MYHOME(string myGuid, Int32 replyValue, LoginCache invitor_cache)
|
||||
{
|
||||
ServerMessage message = new ServerMessage();
|
||||
message.ReplyInviteMyhomeNoti = new();
|
||||
message.ReplyInviteMyhomeNoti.AcceptOrRefuse = replyValue;
|
||||
message.ReplyInviteMyhomeNoti.ReceiverId = invitor_cache.UserGuid;
|
||||
message.ReplyInviteMyhomeNoti.ReplyUserGuid = myGuid;
|
||||
|
||||
var server_logic = GameServerApp.getServerLogic();
|
||||
var rabbit_mq = server_logic.getRabbitMqConnector() as RabbitMqConnector;
|
||||
NullReferenceCheckHelper.throwIfNull(rabbit_mq, () => $"rabbit_mq is null !!!");
|
||||
|
||||
rabbit_mq.SendMessage(invitor_cache.CurrentServer, message);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user