steam-min-cpp
Loading...
Searching...
No Matches
packetbase.hpp
1// GPT
2#pragma once
3#include <cstdint>
4#include <memory>
5#include <steamclient/types/generated/SteamLanguageInternal.hpp>
6#include <vector>
7
8
9namespace Steam::Messaging::Packets {
10// Packet interface (read-only, header + payload)
12 public:
13 virtual ~IPacketMsg() = default;
14 virtual bool IsProto() const = 0;
15 virtual Steam::Internal::Enums::EMsg MsgType() const = 0;
16 virtual uint64_t TargetJobID() const = 0;
17 virtual uint64_t SourceJobID() const = 0;
18 virtual const std::vector<uint8_t>& GetData() const = 0;
19};
20
21// Protobuf-backed packet
22class PacketClientMsgProtobuf : public IPacketMsg {
23 public:
24 Steam::Internal::Enums::EMsg msgType;
25 Steam::Internal::MsgHdrProtoBuf header;
26 std::vector<uint8_t> payload;
27 size_t bodyOffset = 0;
28
29 PacketClientMsgProtobuf(Steam::Internal::Enums::EMsg eMsg,
30 const std::vector<uint8_t>& data)
31 : msgType(eMsg), payload(data) {
32 Steam::Utils::Stream s(payload);
33 header.Deserialize(s);
34 bodyOffset = s.Position();
35 }
36
37 bool IsProto() const override { return true; }
38 Steam::Internal::Enums::EMsg MsgType() const override { return msgType; }
39 uint64_t TargetJobID() const override { return header.proto.jobid_target(); }
40 uint64_t SourceJobID() const override { return header.proto.jobid_source(); }
41 const std::vector<uint8_t>& GetData() const override { return payload; }
42 const size_t GetBodyOffset() { return bodyOffset; }
43};
44
45class PacketClientMsg : public IPacketMsg {
46 public:
47 Steam::Internal::Enums::EMsg msgType;
48 Steam::Internal::ExtendedClientMsgHdr header;
49 std::vector<uint8_t> payload;
50 size_t bodyOffset = 0;
51
52 PacketClientMsg(Steam::Internal::Enums::EMsg eMsg,
53 const std::vector<uint8_t>& data)
54 : msgType(eMsg), payload(data) {
55 Steam::Utils::Stream s(payload);
56 header.Deserialize(s);
57 bodyOffset = s.Position();
58 }
59
60 bool IsProto() const override { return false; }
61 Steam::Internal::Enums::EMsg MsgType() const override { return msgType; }
62 uint64_t TargetJobID() const override { return header.targetJobID; }
63 uint64_t SourceJobID() const override { return header.sourceJobID; }
64 const std::vector<uint8_t>& GetData() const override { return payload; }
65};
66
67class PacketMsg : public IPacketMsg {
68 public:
69 Steam::Internal::Enums::EMsg msgType;
70 Steam::Internal::MsgHdr header;
71 std::vector<uint8_t> payload;
72 size_t bodyOffset = 0;
73
74 PacketMsg(Steam::Internal::Enums::EMsg eMsg, const std::vector<uint8_t>& data)
75 : msgType(eMsg), payload(data) {
76 Steam::Utils::Stream s(payload);
77 header.Deserialize(s);
78 bodyOffset = s.Position();
79 }
80
81 bool IsProto() const override { return false; }
82 Steam::Internal::Enums::EMsg MsgType() const override { return msgType; }
83 uint64_t TargetJobID() const override { return header.targetJobID; }
84 uint64_t SourceJobID() const override { return header.sourceJobID; }
85 const std::vector<uint8_t>& GetData() const override { return payload; }
86};
87} // namespace Steam::Messaging::Packets
Definition packetbase.hpp:11