using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using Newtonsoft.Json; using ServerCore; using ServerBase; using ServerCommon; using ServerCommon.BusinessLogDomain; using MetaAssets; namespace GameServer; public class NotifyJoinPartyMemberHandler { public async Task recvJoinPartyMember(ServerMessage.Types.JoinPartyMemberNoti notify) { var join_info = JsonConvert.DeserializeObject(notify.JoinPartyMemberInfo); if (null == join_info) return; var global_party = GameServerApp.getServerLogic().findGlobalEntity(); ArgumentNullException.ThrowIfNull(global_party); var party = global_party.getParty(notify.PartyGuid); ArgumentNullException.ThrowIfNull(party); // 1. join member 등록 var member_action = party.getEntityAction(); NullReferenceCheckHelper.throwIfNull(member_action, () => $"member_action is null !!!"); var change = await member_action.changeMember(join_info); if (change.result.isFail()) return; // 2. 메시지 전송 var client_message = new ClientToGame(); client_message.Message = new(); client_message.Message.JoinPartyMemberNoti = new(); client_message.Message.JoinPartyMemberNoti.JoinPartyMemberGuid = join_info.UserGuid; client_message.Message.JoinPartyMemberNoti.JoinMemberInfo = new PartyMemberState(); client_message.Message.JoinPartyMemberNoti.JoinMemberInfo.MarkId = join_info.MarkId; client_message.Message.JoinPartyMemberNoti.JoinMemberInfo.MemberGuid = join_info.UserGuid; client_message.Message.JoinPartyMemberNoti.JoinMemberInfo.MemberNickname = join_info.Nickname; client_message.Message.JoinPartyMemberNoti.JoinMemberInfo.LocationInfo = join_info.LocationInfo; PartyHelper.BroadcastToClients(party, client_message, new List()); } }