using Google.Protobuf; using Google.Protobuf.WellKnownTypes; using ServerCore; using ServerBase; using ServerCommon; namespace GameServer.PacketHandler; [PacketHandler(typeof(ClientToGameReq), typeof(ClientToGameReq.Types.GetFriendFolderListReq), typeof(GetFriendFoldersPacketHandler), typeof(GameLoginListener))] internal class GetFriendFoldersPacketHandler : PacketRecvHandler { public override async Task onProcessPacket(ISession session, IMessage recvMessage) { var owner = session as Player; NullReferenceCheckHelper.throwIfNull(owner, () => $"Player is null"); var friend_folder_action = owner.getEntityAction(); NullReferenceCheckHelper.throwIfNull(friend_folder_action, () => $"friend folder action is null !!! - {owner.toBasicString()}"); var result = await friend_folder_action.loadFriendFolder(); if (result.isFail()) { send_GS2C_ACK_FRIEND_FOLDER_LIST(owner, result); return result; } send_GS2C_ACK_FRIEND_FOLDER_LIST_BY_SUCCESS(owner, result); return result; } public static Result send_GS2C_ACK_FRIEND_FOLDER_LIST(Player owner, Result result) { var ack_packet = new ClientToGame(); ack_packet.Response = new ClientToGameRes(); ack_packet.Response.ErrorCode = result.ErrorCode; ack_packet.Response.GetFriendFolderListRes = new ClientToGameRes.Types.GetFriendFolderListRes(); if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) { string err_msg = $"send_S2C_ACK_FRIEND_FOLDER_LIST Fail !!! : owner:{owner.toBasicString()}"; result.setFail(ServerErrorCode.ProudNetException, err_msg); Log.getLogger().error(result.toBasicString()); return result; } return result; } public static Result send_GS2C_ACK_FRIEND_FOLDER_LIST_BY_SUCCESS(Player owner, Result result) { var ack_packet = new ClientToGame(); ack_packet.Response = new ClientToGameRes(); ack_packet.Response.ErrorCode = result.ErrorCode; ack_packet.Response.GetFriendFolderListRes = new ClientToGameRes.Types.GetFriendFolderListRes(); var friend_folder_attribute = owner.getEntityAttribute(); NullReferenceCheckHelper.throwIfNull(friend_folder_attribute, () => $"FriendFolderAttribute is null - player: {owner.toBasicString()}"); ack_packet.Response.GetFriendFolderListRes.FolderOrderType = friend_folder_attribute.m_folder_order_type; foreach (var folder in friend_folder_attribute.m_folders.Values) { FriendFolder friendFolder = new FriendFolder(); friendFolder.FolderName = folder.FolderName; friendFolder.IsHold = folder.IsHold; friendFolder.HoldTime = Timestamp.FromDateTime(folder.HoldTime); friendFolder.CreateTime = Timestamp.FromDateTime(folder.CreateTime); ack_packet.Response.GetFriendFolderListRes.FriendFolderList.Add(friendFolder); } if (false == GameServerApp.getServerLogic().onSendPacket(owner, ack_packet)) { string err_msg = $"send_S2C_ACK_FRIEND_FOLDER_LIST Fail !!! : owner:{owner.toBasicString()}"; result.setFail(ServerErrorCode.ProudNetException, err_msg); Log.getLogger().error(result.toBasicString()); return result; } return result; } }