Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core/StarNetCompatibility.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/core/StarNetCompatibility.hpp')
-rw-r--r--source/core/StarNetCompatibility.hpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/source/core/StarNetCompatibility.hpp b/source/core/StarNetCompatibility.hpp
new file mode 100644
index 0000000..4b950ab
--- /dev/null
+++ b/source/core/StarNetCompatibility.hpp
@@ -0,0 +1,55 @@
+#pragma once
+#include "StarVersion.hpp"
+#include "StarHash.hpp"
+
+namespace Star {
+
+extern VersionNumber const OpenProtocolVersion;
+
+constexpr VersionNumber AnyVersion = 0xFFFFFFFF;
+constexpr VersionNumber LegacyVersion = 0;
+
+class NetCompatibilityRules {
+public:
+ NetCompatibilityRules();
+ NetCompatibilityRules(uint64_t) = delete;
+ NetCompatibilityRules(VersionNumber version);
+
+ VersionNumber version() const;
+ void setVersion(VersionNumber version);
+ bool isLegacy() const;
+
+ bool operator==(NetCompatibilityRules const& a) const;
+
+private:
+ VersionNumber m_version = OpenProtocolVersion;
+};
+
+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::operator==(NetCompatibilityRules const& a) const {
+ return m_version == a.m_version;
+}
+
+template <>
+struct hash<NetCompatibilityRules> {
+ size_t operator()(NetCompatibilityRules const& s) const {
+ return s.version();
+ }
+};
+
+} \ No newline at end of file