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>
27 QByteArray readValue(
const QByteArray &data, Value &val)
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>
37 QByteArray writeValue(QByteArray data,
const Value &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));
46 QByteArray readValue(
const QByteArray &data, QString &val);
48 QByteArray writeValue(QByteArray data,
const QString &value);
50 template <typename MessageTuple, quint32 Size = std::tuple_size<MessageTuple>::value>
53 template <
typename MsgTuple>
54 struct Serializer<MsgTuple, 0>
56 static const QByteArray &read(
const QByteArray &data, MsgTuple &) {
return data; }
57 static QByteArray write(
const QByteArray &data,
const MsgTuple &) {
return data; }
60 template <
typename MessageTuple, qu
int32 Size>
63 static QByteArray read(
const QByteArray &data, MessageTuple &messageTuple)
65 return readValue(Serializer<MessageTuple, Size - 1>::read(data, messageTuple),
66 std::get<Size - 1>(messageTuple));
68 static QByteArray write(QByteArray &data,
const MessageTuple &messageTuple)
70 return writeValue(Serializer<MessageTuple, Size - 1>::write(data, messageTuple),
71 std::get<Size - 1>(messageTuple));
75 template <
class MessageTuple>
76 inline QByteArray doReadMessage(
const QByteArray &data, MessageTuple messageTuple)
78 return Serializer<MessageTuple>::read(data, messageTuple);
81 template <
class MessageTuple>
82 inline QByteArray doWriteMessage(QByteArray &data,
const MessageTuple &messageTuple)
84 return Serializer<MessageTuple>::write(data, messageTuple);
95 template <
class Message>
96 static QByteArray
readMessage(
const QByteArray &data, Message &message)
98 return Private::doReadMessage(data.mid(2 *
sizeof(qint32)), message.getTuple());
102 template <
class Message>
103 static QByteArray
writeMessage(QByteArray &data,
const Message &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.