diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2024-09-11 18:22:44 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2024-09-11 18:22:44 +1000 |
commit | 7408981e131f7cdd897a3c5924ea14b272986e88 (patch) | |
tree | 4e99c67e587aa7c1e9b4dbd046177efbc4ba4011 /source/core/StarNetCompatibility.hpp | |
parent | 5a75473e16afb8152aab943fd316d9820835f465 (diff) |
use a version number rather than a bool
more flexible, allows for backwards compat with older OpenSB versions & not just vanilla Starbound
Diffstat (limited to 'source/core/StarNetCompatibility.hpp')
-rw-r--r-- | source/core/StarNetCompatibility.hpp | 54 |
1 files changed, 34 insertions, 20 deletions
diff --git a/source/core/StarNetCompatibility.hpp b/source/core/StarNetCompatibility.hpp index 730546e..4b950ab 100644 --- a/source/core/StarNetCompatibility.hpp +++ b/source/core/StarNetCompatibility.hpp @@ -1,40 +1,54 @@ #pragma once -#include "StarDataStream.hpp" +#include "StarVersion.hpp" +#include "StarHash.hpp" namespace Star { +extern VersionNumber const OpenProtocolVersion; -enum class NetCompatibilityFilter { - None = 0, - Old = 1, - New = 2 -}; +constexpr VersionNumber AnyVersion = 0xFFFFFFFF; +constexpr VersionNumber LegacyVersion = 0; -struct NetCompatibilityRules { - NetCompatibilityRules() = default; +class NetCompatibilityRules { +public: + NetCompatibilityRules(); NetCompatibilityRules(uint64_t) = delete; - NetCompatibilityRules(bool legacy); + NetCompatibilityRules(VersionNumber version); + + VersionNumber version() const; + void setVersion(VersionNumber version); + bool isLegacy() const; - bool checkFilter(NetCompatibilityFilter const& filter) const; + bool operator==(NetCompatibilityRules const& a) const; - bool isLegacy = false; +private: + VersionNumber m_version = OpenProtocolVersion; }; -inline NetCompatibilityRules::NetCompatibilityRules(bool legacy) : isLegacy(legacy) {} +inline NetCompatibilityRules::NetCompatibilityRules() : m_version(OpenProtocolVersion) {} + +inline NetCompatibilityRules::NetCompatibilityRules(VersionNumber v) : m_version(v) {} + +inline VersionNumber NetCompatibilityRules::version() const { + return m_version; +} + +inline void NetCompatibilityRules::setVersion(VersionNumber version) { + m_version = version; +} + +inline bool NetCompatibilityRules::isLegacy() const { + return m_version == LegacyVersion; +} -inline bool NetCompatibilityRules::checkFilter(NetCompatibilityFilter const& filter) const { - if (filter == NetCompatibilityFilter::None) - return true; - else if (isLegacy) - return filter == NetCompatibilityFilter::Old; - else - return filter == NetCompatibilityFilter::New; +inline bool NetCompatibilityRules::operator==(NetCompatibilityRules const& a) const { + return m_version == a.m_version; } template <> struct hash<NetCompatibilityRules> { size_t operator()(NetCompatibilityRules const& s) const { - return s.isLegacy; + return s.version(); } }; |