using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using ServerCommon; using ServerCommon.BusinessLogDomain; using MetaAssets; namespace GameServer; public class NotifyCancelSummonHandler { public async Task recvCancelSummonHandler(ServerMessage.Types.CancelSummonPartyMemberNoti notify) { var global_party = GameServerApp.getServerLogic().findGlobalEntity(); NullReferenceCheckHelper.throwIfNull(global_party, () => $"global_party is null !!!"); var global_party_action = global_party.getEntityAction(); NullReferenceCheckHelper.throwIfNull(global_party_action, () => $"global_party_action is null !!!"); // 1. 파티 정보 조회 var party = global_party_action.getGlobalPartyDetail(notify.PartyGuid); if (null == party) return; // 2. Member 정보 수정 var party_member_attribute = party.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(party_member_attribute, () => $"party_member_attribute is null !!!"); foreach (var cancel_member in notify.CancelSummonUserGuids) { if (!party_member_attribute.getPartyMembers().TryGetValue(cancel_member, out var member)) continue; member.Summon.clear(); // 2-2.cache 수정 var member_action = party.getEntityAction(); NullReferenceCheckHelper.throwIfNull(member_action, () => $"member_action is null !!!"); _ = await member_action.changeMember(member); } // 3. 해당 멤버 전송 var client_message = new ClientToGame { Message = new ClientToGameMessage { NtfCancelSummonPartyMember = new() } }; var player_manger = GameServerApp.getServerLogic().getPlayerManager(); ArgumentNullException.ThrowIfNull(player_manger); foreach (var notify_user in notify.CancelSummonUserGuids) { if (!player_manger.tryGetUserByPrimaryKey(notify_user, out var player)) continue; PartyHelper.sendToClient(client_message, player.getHostId()); } } }