using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using ServerCommon; using ServerCommon.BusinessLogDomain; using MetaAssets; using USER_GUID = System.String; namespace GameServer; public class NotifyReplySummonPartyMemberHandler { public async Task recvReplySummonPartyMember(ServerMessage.Types.ReplySummonPartyMemberNoti notify) { var server_logic = GameServerApp.getServerLogic(); ArgumentNullException.ThrowIfNull(server_logic); var global_party = server_logic.findGlobalEntity(); ArgumentNullException.ThrowIfNull(global_party); var party = global_party.getParty(notify.SummonPartyGuid); ArgumentNullException.ThrowIfNull(party); // 1. Party Leader 조회 var party_info = party.getEntityAction(); NullReferenceCheckHelper.throwIfNull(party_info, () => $"party_info is null !!!"); var leader_guid = party_info.getLeaderGuid(); ArgumentNullException.ThrowIfNull(party_info); ArgumentNullException.ThrowIfNull(leader_guid); var player_manager = server_logic.getPlayerManager(); if (!player_manager.tryGetUserByPrimaryKey(leader_guid, out var leader)) { Log.getLogger().error($"Failed to get party leader session !!! : not found leader - {leader_guid}"); return; } // 2. message 생성 var message = new ClientToGame(); message.Message = new(); message.Message.ReplySummonPartyMemberNoti = new(); message.Message.ReplySummonPartyMemberNoti.SummonMemberGuid = notify.SummonUserGuid; message.Message.ReplySummonPartyMemberNoti.Result = notify.Result; // 3. 소환 상태 체크 var is_summon = checkSummonStatus(party, notify.SummonUserGuid); // 4. summon 정보 정리 및 알림 var party_member_action = party.getEntityAction(); NullReferenceCheckHelper.throwIfNull(party_member_action, () => $"party_member_action is null !!!"); _ = await party_member_action.clearSummonMemberAsync(notify.SummonUserGuid, true); ArgumentNullException.ThrowIfNull(party_member_action); // 3. Client 통보 PartyHelper.sendToClient(message, leader.getHostId()); } private bool checkSummonStatus(GlobalPartyDetail party, USER_GUID summon_user_guid) { var party_member_action = party.getEntityAction(); ArgumentNullException.ThrowIfNull(party_member_action); var summon_members = party_member_action.getSummonMembers(); return summon_members.Contains(summon_user_guid); } }