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

summaryrefslogtreecommitdiff
path: root/source/core
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2024-09-11 18:22:44 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2024-09-11 18:22:44 +1000
commit7408981e131f7cdd897a3c5924ea14b272986e88 (patch)
tree4e99c67e587aa7c1e9b4dbd046177efbc4ba4011 /source/core
parent5a75473e16afb8152aab943fd316d9820835f465 (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')
-rw-r--r--source/core/CMakeLists.txt5
-rw-r--r--source/core/StarDataStream.cpp5
-rw-r--r--source/core/StarNetCompatibility.cpp7
-rw-r--r--source/core/StarNetCompatibility.hpp54
-rw-r--r--source/core/StarNetElement.hpp18
-rw-r--r--source/core/StarVersion.cpp.in9
-rw-r--r--source/core/StarVersion.hpp13
7 files changed, 78 insertions, 33 deletions
diff --git a/source/core/CMakeLists.txt b/source/core/CMakeLists.txt
index bb8bd22..2f0c858 100644
--- a/source/core/CMakeLists.txt
+++ b/source/core/CMakeLists.txt
@@ -124,6 +124,7 @@ SET (star_core_HEADERS
StarUnicode.hpp
StarUuid.hpp
StarVector.hpp
+ StarVersion.hpp
StarVlqEncoding.hpp
StarWeightedPool.hpp
StarWorkerPool.hpp
@@ -164,6 +165,7 @@ SET (star_core_SOURCES
StarLua.cpp
StarLuaConverters.cpp
StarMemory.cpp
+ StarNetCompatibility.cpp
StarNetElement.cpp
StarNetElementBasicFields.cpp
StarNetElementGroup.cpp
@@ -219,7 +221,8 @@ ELSEIF (STAR_SYSTEM_FAMILY_WINDOWS)
ENDIF ()
-ADD_LIBRARY (star_core OBJECT ${star_core_SOURCES} ${star_core_HEADERS})
+CONFIGURE_FILE (StarVersion.cpp.in ${CMAKE_CURRENT_BINARY_DIR}/StarVersion.cpp)
+ADD_LIBRARY (star_core OBJECT ${star_core_SOURCES} ${star_core_HEADERS} ${CMAKE_CURRENT_BINARY_DIR}/StarVersion.cpp)
IF(STAR_PRECOMPILED_HEADERS)
TARGET_PRECOMPILE_HEADERS (star_core PUBLIC StarPch.hpp)
diff --git a/source/core/StarDataStream.cpp b/source/core/StarDataStream.cpp
index 1224f54..3a4ed0c 100644
--- a/source/core/StarDataStream.cpp
+++ b/source/core/StarDataStream.cpp
@@ -36,10 +36,7 @@ void DataStream::setStreamCompatibilityVersion(unsigned streamCompatibilityVersi
}
void DataStream::setStreamCompatibilityVersion(NetCompatibilityRules const& rules) {
- if (rules.isLegacy)
- m_streamCompatibilityVersion = 1;
- else
- m_streamCompatibilityVersion = CurrentStreamVersion;
+ m_streamCompatibilityVersion = rules.version();
}
ByteArray DataStream::readBytes(size_t len) {
diff --git a/source/core/StarNetCompatibility.cpp b/source/core/StarNetCompatibility.cpp
new file mode 100644
index 0000000..fdd53fb
--- /dev/null
+++ b/source/core/StarNetCompatibility.cpp
@@ -0,0 +1,7 @@
+#include "StarNetCompatibility.hpp"
+
+namespace Star {
+
+VersionNumber const OpenProtocolVersion = 2;
+
+} \ No newline at end of file
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();
}
};
diff --git a/source/core/StarNetElement.hpp b/source/core/StarNetElement.hpp
index 393dd3d..7d73b85 100644
--- a/source/core/StarNetElement.hpp
+++ b/source/core/StarNetElement.hpp
@@ -55,23 +55,25 @@ public:
// received even if no deltas are produced, so no extrapolation takes place.
virtual void blankNetDelta(float interpolationTime);
- NetCompatibilityFilter netCompatibilityFilter() const;
- void setNetCompatibilityFilter(NetCompatibilityFilter netFilter);
+ VersionNumber compatibilityVersion() const;
+ void setCompatibilityVersion(VersionNumber version);
bool checkWithRules(NetCompatibilityRules const& rules) const;
private:
- NetCompatibilityFilter m_netCompatibilityFilter = NetCompatibilityFilter::None;
+ VersionNumber m_netCompatibilityVersion = AnyVersion;
};
-inline NetCompatibilityFilter NetElement::netCompatibilityFilter() const {
- return m_netCompatibilityFilter;
+inline VersionNumber NetElement::compatibilityVersion() const {
+ return m_netCompatibilityVersion;
}
-inline void NetElement::setNetCompatibilityFilter(NetCompatibilityFilter netFilter) {
- m_netCompatibilityFilter = netFilter;
+inline void NetElement::setCompatibilityVersion(VersionNumber version) {
+ m_netCompatibilityVersion = version;
}
inline bool NetElement::checkWithRules(NetCompatibilityRules const& rules) const {
- return rules.checkFilter(m_netCompatibilityFilter);
+ if (m_netCompatibilityVersion != AnyVersion)
+ return rules.version() >= m_netCompatibilityVersion;
+ return true;
}
}
diff --git a/source/core/StarVersion.cpp.in b/source/core/StarVersion.cpp.in
new file mode 100644
index 0000000..0529c19
--- /dev/null
+++ b/source/core/StarVersion.cpp.in
@@ -0,0 +1,9 @@
+#include "StarVersion.hpp"
+
+namespace Star {
+
+char const* const StarVersionString = "1.4.4";
+char const* const StarSourceIdentifierString = "${STAR_SOURCE_IDENTIFIER}";
+char const* const StarArchitectureString = "${STAR_SYSTEM} ${STAR_ARCHITECTURE}";
+
+}
diff --git a/source/core/StarVersion.hpp b/source/core/StarVersion.hpp
new file mode 100644
index 0000000..ad65875
--- /dev/null
+++ b/source/core/StarVersion.hpp
@@ -0,0 +1,13 @@
+#pragma once
+
+#include "StarConfig.hpp"
+
+namespace Star {
+
+extern char const* const StarVersionString;
+extern char const* const StarSourceIdentifierString;
+extern char const* const StarArchitectureString;
+
+typedef uint32_t VersionNumber;
+
+}