초기커밋
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
using Google.Protobuf;
|
||||
using Google.Protobuf.WellKnownTypes;
|
||||
|
||||
|
||||
using ServerCore;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCommon.BusinessLogDomain;
|
||||
using MetaAssets;
|
||||
|
||||
|
||||
namespace GameServer;
|
||||
|
||||
public class NotifyInvitePartyReplyHandler
|
||||
{
|
||||
public async Task recvInvitePartyReply(ServerMessage.Types.ReplyInvitePartyNoti notify)
|
||||
{
|
||||
var result = new Result();
|
||||
|
||||
// 1. party 체크
|
||||
var global_party = GameServerApp.getServerLogic().findGlobalEntity<GlobalParty>();
|
||||
ArgumentNullException.ThrowIfNull(global_party);
|
||||
|
||||
var global_party_action = global_party.getEntityAction<GlobalPartyAction>();
|
||||
ArgumentNullException.ThrowIfNull(global_party_action);
|
||||
|
||||
var party_info = await global_party_action.getPartyLeaderGuidAndMemberCount(notify.InvitePartyGuid);
|
||||
if (string.IsNullOrEmpty(party_info.leader_guid)) return;
|
||||
|
||||
// 2. leader 체크
|
||||
var leader_login_cache = await PartyHelper.getOtherUserLoginCache(party_info.leader_guid);
|
||||
if (null == leader_login_cache) return;
|
||||
|
||||
// 3. 리더가 다른 서버로 이동했으면, 그쪽으로 전송
|
||||
var server_message = new ServerMessage();
|
||||
if (leader_login_cache.CurrentServer != GameServerApp.getServerLogic().getServerName())
|
||||
{
|
||||
server_message = new ServerMessage
|
||||
{
|
||||
ReplyInvitePartyNoti = new ServerMessage.Types.ReplyInvitePartyNoti
|
||||
{
|
||||
InvitePartyGuid = notify.InvitePartyGuid,
|
||||
InviteUserGuid = notify.InviteUserGuid,
|
||||
Result = notify.Result
|
||||
}
|
||||
};
|
||||
|
||||
PartyHelper.sendToServer(server_message, leader_login_cache.CurrentServer);
|
||||
return;
|
||||
}
|
||||
|
||||
// 4. send list 삭제
|
||||
var party = global_party.getParty(notify.InvitePartyGuid);
|
||||
ArgumentNullException.ThrowIfNull(party);
|
||||
|
||||
server_message = new ServerMessage();
|
||||
server_message.NtfDeletePartyInviteSend = new();
|
||||
server_message.NtfDeletePartyInviteSend.PartyGuid = notify.InvitePartyGuid;
|
||||
server_message.NtfDeletePartyInviteSend.InviteUserGuid = notify.InviteUserGuid;
|
||||
|
||||
PartyHelper.BroadcastToServers(party, server_message, false);
|
||||
|
||||
// 5. 승락이면서, member 가 2명이면, leader 는 p2pGroup 에 join해야 한다.
|
||||
if (notify.Result == BoolType.True)
|
||||
{
|
||||
var party_action = party.getEntityAction<GlobalPartyDetailAction>();
|
||||
ArgumentNullException.ThrowIfNull(party_action);
|
||||
|
||||
if (party_info.member_count == 2)
|
||||
{
|
||||
_ = await party_action.joinPartyP2PGroup(party_info.leader_guid);
|
||||
_ = await party_action.checkPartyP2PState(party_info.leader_guid, true, true);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// 6. client 에 전송
|
||||
var player_manager = GameServerApp.getServerLogic().getPlayerManager();
|
||||
ArgumentNullException.ThrowIfNull(player_manager);
|
||||
|
||||
if (!player_manager.tryGetUserByPrimaryKey(party_info.leader_guid, out var player))
|
||||
{
|
||||
Log.getLogger().error($"Failed to get recv user !! - leader[{party_info.leader_guid}] / invite[{notify.InviteUserGuid}] / {nameof(recvInvitePartyReply)}");
|
||||
return;
|
||||
}
|
||||
|
||||
var client_message = new ClientToGame
|
||||
{
|
||||
Message = new ClientToGameMessage
|
||||
{
|
||||
ReplyInvitePartyNoti = new ClientToGameMessage.Types.ReplyInvitePartyNoti
|
||||
{
|
||||
InviteUserGuid = notify.InviteUserGuid,
|
||||
InviteUserNickname = notify.InviteUserNickname,
|
||||
Result = notify.Result
|
||||
}
|
||||
}
|
||||
};
|
||||
PartyHelper.sendToClient(client_message, player.getHostId());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user