4 #ifndef SWIFT_SIMPLUGIN_FS9_MP_PACKET_PARSER_H
5 #define SWIFT_SIMPLUGIN_FS9_MP_PACKET_PARSER_H
18 namespace swift::simplugin::fs9
26 template <
typename Value>
29 static_assert(std::is_arithmetic<Value>::value || std::is_same<CFs9Sdk::EngineType, Value>::value,
32 val = *
reinterpret_cast<const Value *
>(data.
constData());
33 return data.
mid(
sizeof(Value));
36 template <
typename Value>
39 static_assert(std::is_arithmetic<Value>::value || std::is_same<CFs9Sdk::EngineType, Value>::value,
42 data.
append(
reinterpret_cast<const char *
>(&value),
sizeof(Value));
50 template <typename MessageTuple, quint32 Size = std::tuple_size<MessageTuple>::value>
53 template <
typename MsgTuple>
54 struct Serializer<MsgTuple, 0>
60 template <
typename MessageTuple, qu
int32 Size>
65 return readValue(Serializer<MessageTuple, Size - 1>::read(data, messageTuple),
66 std::get<Size - 1>(messageTuple));
70 return writeValue(Serializer<MessageTuple, Size - 1>::write(data, messageTuple),
71 std::get<Size - 1>(messageTuple));
75 template <
class MessageTuple>
78 return Serializer<MessageTuple>::read(data, messageTuple);
81 template <
class MessageTuple>
84 return Serializer<MessageTuple>::write(data, messageTuple);
95 template <
class Message>
98 return Private::doReadMessage(data.
mid(2 *
sizeof(qint32)), message.getTuple());
102 template <
class Message>
105 return Private::doWriteMessage(data, message.getTuple());
112 const quint32 *val =
reinterpret_cast<const quint32 *
>(type.
constData());
119 return *
reinterpret_cast<const qint32 *
>(data.
mid(
sizeof(qint32),
sizeof(qint32)).
constData());
131 data.
append(
reinterpret_cast<const char *
>(&size),
sizeof(qint32));
MULTIPLAYER_PACKET_ID
Multiplayer packet id.
FS9 multiplayer protocol packet parser.
static qint32 readSize(const QByteArray &data)
Read the multiplayer packet size.
static void writeSize(QByteArray &data, qint32 size)
Write the multiplayer packet size.
static QByteArray writeMessage(QByteArray &data, const Message &message)
Write message to byte stream.
static CFs9Sdk::MULTIPLAYER_PACKET_ID readType(const QByteArray &data)
Read the multiplayer packet type.
static void writeType(QByteArray &data, CFs9Sdk::MULTIPLAYER_PACKET_ID type)
Write the multiplayer packet type.
static QByteArray readMessage(const QByteArray &data, Message &message)
Read message from byte stream.
QByteArray & append(QByteArrayView data)
const char * constData() const const
QByteArray left(qsizetype len) &&
QByteArray mid(qsizetype pos, qsizetype len) &&