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

summaryrefslogtreecommitdiff
path: root/source/core/StarNetElementTop.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/core/StarNetElementTop.hpp')
-rw-r--r--source/core/StarNetElementTop.hpp48
1 files changed, 21 insertions, 27 deletions
diff --git a/source/core/StarNetElementTop.hpp b/source/core/StarNetElementTop.hpp
index 454b34f..cf3cfb4 100644
--- a/source/core/StarNetElementTop.hpp
+++ b/source/core/StarNetElementTop.hpp
@@ -1,5 +1,4 @@
-#ifndef STAR_NET_ELEMENT_TOP_HPP
-#define STAR_NET_ELEMENT_TOP_HPP
+#pragma once
#include "StarNetElement.hpp"
@@ -12,10 +11,11 @@ class NetElementTop : public BaseNetElement {
public:
NetElementTop();
- // Returns the state update, combined with the version code that should be
- // passed to the next call to writeState. If 'fromVersion' is 0, then this
- // is a full write for an initial read of a slave NetElementTop.
- pair<ByteArray, uint64_t> writeNetState(uint64_t fromVersion = 0);
+ // Writes the state update to the given DataStream then returns the version
+ // code that should be passed to the next call to writeState. If
+ // 'fromVersion' is 0, then this is a full write for an initial read of a
+ // slave NetElementTop.
+ pair<ByteArray, uint64_t> writeNetState(uint64_t fromVersion = 0, NetCompatibilityRules rules = {});
// Reads a state produced by a call to writeState, optionally with the
// interpolation delay time for the data contained in this state update. If
// the state is a full update rather than a delta, the interoplation delay
@@ -23,7 +23,7 @@ public:
// readState, *unless* extrapolation is enabled. If extrapolation is
// enabled, reading a blank update calls 'blankNetDelta' which is necessary
// to not improperly extrapolate past the end of incoming deltas.
- void readNetState(ByteArray data, float interpolationTime = 0.0);
+ void readNetState(ByteArray data, float interpolationTime = 0.0f, NetCompatibilityRules rules = {});
private:
using BaseNetElement::initNetVersion;
@@ -32,6 +32,7 @@ private:
using BaseNetElement::writeNetDelta;
using BaseNetElement::readNetDelta;
using BaseNetElement::blankNetDelta;
+ using BaseNetElement::checkWithRules;
NetElementVersion m_netVersion;
};
@@ -42,41 +43,34 @@ NetElementTop<BaseNetElement>::NetElementTop() {
}
template <typename BaseNetElement>
-pair<ByteArray, uint64_t> NetElementTop<BaseNetElement>::writeNetState(uint64_t fromVersion) {
+pair<ByteArray, uint64_t> NetElementTop<BaseNetElement>::writeNetState(uint64_t fromVersion, NetCompatibilityRules rules) {
+ DataStreamBuffer ds;
+ ds.setStreamCompatibilityVersion(rules);
if (fromVersion == 0) {
- DataStreamBuffer ds;
ds.write<bool>(true);
- BaseNetElement::netStore(ds);
- m_netVersion.increment();
- return {ds.takeData(), m_netVersion.current()};
-
+ BaseNetElement::netStore(ds, rules);
+ return {ds.takeData(), m_netVersion.increment()};
} else {
- DataStreamBuffer ds;
ds.write<bool>(false);
- if (!BaseNetElement::writeNetDelta(ds, fromVersion)) {
+ if (!BaseNetElement::writeNetDelta(ds, fromVersion, rules))
return {ByteArray(), m_netVersion.current()};
- } else {
- m_netVersion.increment();
- return {ds.takeData(), m_netVersion.current()};
- }
+ else
+ return {ds.takeData(), m_netVersion.increment()};
}
}
template <typename BaseNetElement>
-void NetElementTop<BaseNetElement>::readNetState(ByteArray data, float interpolationTime) {
+void NetElementTop<BaseNetElement>::readNetState(ByteArray data, float interpolationTime, NetCompatibilityRules rules) {
if (data.empty()) {
BaseNetElement::blankNetDelta(interpolationTime);
-
} else {
DataStreamBuffer ds(std::move(data));
-
+ ds.setStreamCompatibilityVersion(rules);
if (ds.read<bool>())
- BaseNetElement::netLoad(ds);
+ BaseNetElement::netLoad(ds, rules);
else
- BaseNetElement::readNetDelta(ds, interpolationTime);
+ BaseNetElement::readNetDelta(ds, interpolationTime, rules);
}
}
-}
-
-#endif
+} \ No newline at end of file