#ifndef SERVERDATA_H #define SERVERDATA_H #include #include #include namespace server { Q_NAMESPACE /// The base feature set that almost all servers are supposed to support. enum class BASE_FEATURE_SET { YELLOWTEXT, ///< Yellow text in in-character messages. ///< @since 2.1.0 FLIPPING, ///< The ability to mirror a character in-game. ///< @since 2.1.0 CUSTOMOBJECTIONS, ///< Enables the use of a single custom objection named ///< `custom`. ///< @since 2.1.0 FASTLOADING, ///< Enables the use of "fast loading" instead of the legacy ///< loading protocol. ///< @since 2.1.0 NOENCRYPTION, ///< Disables "FantaCrypt" for the remainder of the session. ///< @since 2.1.0 DESKMOD, ///< Allows forcing the appearance or disappearance of the desk. ///< @since 2.3 to 2.5 EVIDENCE, ///< Allows creating and presenting evidence. ///< @since 2.3 to 2.5 CCCC_IC_SUPPORT, ///< The ability to pair up with another user's character, ///< the ability to change one's displayed name ///< in-character ("showname"), and the ability to perform ///< "immediate" preanimations (ones that happen alongside ///< text display). ///< @since 2.6.0 ARUP, ///< Areas have more data about them than just their name (including ///< their status, their "lockedness", and who is the Case Master in ///< the area), and sets the client up to receive and send ARUP ///< packets. ///< @since 2.6.0 CASING_ALERTS, ///< The client gains a new window to announce cases with, ///< and the settings to set itself up to receive case alerts ///< based on casing preferences. No longer used. ///< @since 2.6.0 MODCALL_REASON, ///< Enables entering a custom reason for calling ///< moderators. ///< @since 2.6.0 LOOPING_SFX, ///< Enables looping SFX extensions for the in-character ///< command. ///< @since 2.8.0 ADDITIVE, ///< Enables "additive" text that allows in-character messages to ///< concatenate to the previous one sent by the same character. ///< @since 2.8.0 EFFECTS, ///< Enables effect overlays. ///< @since 2.8.0 Y_OFFSET, ///< Enables support for vertical offsets. ///< @since 2.9.0 EXPANDED_DESK_MODS, ///< Enables desk modifiers 2 through 5. ///< @since 2.9.0 AUTH_PACKET, ///< Enables the use of the AUTH packet. ///< @since 2.9.1 PREZOOM, ///< Preanim zoom. CUSTOM_BLIPS ///< Allows the in-character messages to contain data about ///< what blips to use for the character's current message. }; Q_ENUM_NS(BASE_FEATURE_SET) /** * @brief Arranges data about the server the client is connected to. */ class ServerData { public: /** * @brief Returns true if one of the standard features exists on the server. * * @details Internally, this calls get_feature(const QString &f_feature) * with the enum's value converted to string. * * @param f_feature The feature to check for. * * @return True if the feature exists on the server. */ bool get_feature(const BASE_FEATURE_SET &f_feature) const; /** * @brief Returns true if the feature exists on the server. * * @param f_feature The feature to check for. Case insensitive. * * @return True if the feature exists on the server. */ bool get_feature(const QString &f_feature) const; /** * @brief Sets the feature list, overwriting the existing one. * * @param f_feature_list The new feature list of the server. */ void set_features(const QStringList &f_feature_list); /** * @brief Self-explanatory: gets the software the server is running on. * * @return As brief description. */ QString get_server_software() const; /** * @brief Self-explanatory: setter for server software. * * @param f_software The new server software. */ void set_server_software(const QString &f_software); /** * @brief Getter for the server's asset URL. * * @return As brief description. * * @see m_asset_url */ QString get_asset_url() const; /** * @brief Attempts to set the new asset URL for the server. * * @details The function converts the sole parameter into UTF-8, then * attempts to percent decode it. The URL is only set if all these steps * successfully happen. * * @param f_asset_url A QString that contains the URL. */ void set_asset_url(const QString &f_asset_url); private: /// The features available on the server. Determines what QStringList m_features; /// The software the server is running. QString m_server_software; /** * @brief A QString of an URL that defines the content repository * send by the server. * * @details Introduced in Version 2.9.2. * Addresses the issue of contenturl devlivery for WebAO * without relying on someone adding the link manually. */ QString m_asset_url; }; } // namespace server #endif // SERVERDATA_H