Ember
Loading...
Searching...
No Matches
FlatBufferCodec.h
Go to the documentation of this file.
1#pragma once
2
3#include <cstdint>
4#include <memory>
5#include <string>
6#include <vector>
7
8#include "flatbuffers/flatbuffers.h"
9
12
13namespace Ember {
14namespace Network {
15
17 public:
20
21 void Reset();
22
23 flatbuffers::FlatBufferBuilder &GetBuilder();
24
25 MessageFrame BuildHandshake(const std::string &version, const std::string &clientId,
26 const std::string &clientName = "", const std::vector<std::string> &capabilities = {});
27
28 MessageFrame BuildHandshakeAck(const std::string &version, const std::string &sessionId, bool accepted = true,
29 const std::string &error = "");
30
31 MessageFrame BuildTreeInit(const std::string &treeId, const std::string &treeName,
32 flatbuffers::Offset<Protocol::NodeDefinition> rootOffset,
33 const std::vector<flatbuffers::Offset<Protocol::BlackboardDefinition>> &blackboards = {},
34 const std::vector<flatbuffers::Offset<Protocol::KeyValue>> &metadata = {});
35
36 MessageFrame BuildTreeInitAck(const std::string &treeId, bool success = true, int32_t nodeCount = 0,
37 const std::string &error = "");
38
39 MessageFrame BuildTickUpdate(const std::string &treeId, int64_t tickNumber, int64_t tickTimestampMs,
40 float deltaTimeMs, bool isDelta,
41 const std::vector<flatbuffers::Offset<Protocol::NodeState>> &states,
42 const std::vector<int64_t> &executionPath = {});
43
44 MessageFrame
45 BuildBlackboardUpdate(const std::string &treeId, const std::string &blackboardId, int64_t tickNumber,
46 const std::vector<flatbuffers::Offset<Protocol::BlackboardUpdateEntry>> &updates);
47
48 MessageFrame BuildTreeReset(const std::string &treeId, int64_t tickNumber, const std::string &reason = "");
49
50 MessageFrame BuildDisconnect(const std::string &reason = "", const std::string &message = "");
51
52 MessageFrame BuildError(Protocol::ErrorCode code, const std::string &message, bool fatal = false);
53
54 flatbuffers::Offset<Protocol::NodeDefinition>
55 CreateNodeDefinition(int64_t id, Protocol::NodeType nodeType, const std::string &subtype, const std::string &name,
56 const std::string &description = "",
57 const std::vector<flatbuffers::Offset<Protocol::KeyValue>> &attributes = {},
58 const std::vector<flatbuffers::Offset<Protocol::NodeDefinition>> &children = {});
59
60 flatbuffers::Offset<Protocol::NodeState>
61 CreateNodeState(int64_t id, Protocol::NodeStatus status,
62 Protocol::NodeStatus lastResult = Protocol::NodeStatus_Idle, int64_t tickCount = 0,
63 const std::string &message = "");
64
65 flatbuffers::Offset<Protocol::KeyValue> CreateKeyValue(const std::string &key, const std::string &value);
66
67 flatbuffers::Offset<Protocol::BlackboardEntry> CreateBlackboardEntry(const std::string &key,
68 const std::string &valueType,
69 const std::string &value,
70 const std::string &description = "");
71
72 flatbuffers::Offset<Protocol::BlackboardDefinition>
73 CreateBlackboardDefinition(const std::string &id, const std::string &name,
74 const std::vector<flatbuffers::Offset<Protocol::BlackboardEntry>> &entries);
75
76 flatbuffers::Offset<Protocol::BlackboardUpdateEntry>
77 CreateBlackboardUpdateEntry(const std::string &key, const std::string &value, const std::string &previousValue);
78
79 template <typename T> static bool Verify(const uint8_t *data, size_t size) {
80 flatbuffers::Verifier verifier(data, size);
81 return verifier.VerifyBuffer<T>(nullptr);
82 }
83
84 template <typename T> static const T *GetRoot(const uint8_t *data) { return flatbuffers::GetRoot<T>(data); }
85
86 template <typename T> static const T *GetRoot(const std::vector<uint8_t> &data) {
87 return flatbuffers::GetRoot<T>(data.data());
88 }
89
90 private:
91 std::unique_ptr<flatbuffers::FlatBufferBuilder> m_builder;
92};
93
94} // namespace Network
95} // namespace Ember
std::unique_ptr< flatbuffers::FlatBufferBuilder > m_builder
flatbuffers::Offset< Protocol::BlackboardEntry > CreateBlackboardEntry(const std::string &key, const std::string &valueType, const std::string &value, const std::string &description="")
static bool Verify(const uint8_t *data, size_t size)
MessageFrame BuildTreeReset(const std::string &treeId, int64_t tickNumber, const std::string &reason="")
static const T * GetRoot(const uint8_t *data)
MessageFrame BuildBlackboardUpdate(const std::string &treeId, const std::string &blackboardId, int64_t tickNumber, const std::vector< flatbuffers::Offset< Protocol::BlackboardUpdateEntry > > &updates)
flatbuffers::Offset< Protocol::BlackboardUpdateEntry > CreateBlackboardUpdateEntry(const std::string &key, const std::string &value, const std::string &previousValue)
MessageFrame BuildTickUpdate(const std::string &treeId, int64_t tickNumber, int64_t tickTimestampMs, float deltaTimeMs, bool isDelta, const std::vector< flatbuffers::Offset< Protocol::NodeState > > &states, const std::vector< int64_t > &executionPath={})
flatbuffers::Offset< Protocol::NodeDefinition > CreateNodeDefinition(int64_t id, Protocol::NodeType nodeType, const std::string &subtype, const std::string &name, const std::string &description="", const std::vector< flatbuffers::Offset< Protocol::KeyValue > > &attributes={}, const std::vector< flatbuffers::Offset< Protocol::NodeDefinition > > &children={})
MessageFrame BuildHandshake(const std::string &version, const std::string &clientId, const std::string &clientName="", const std::vector< std::string > &capabilities={})
flatbuffers::Offset< Protocol::NodeState > CreateNodeState(int64_t id, Protocol::NodeStatus status, Protocol::NodeStatus lastResult=Protocol::NodeStatus_Idle, int64_t tickCount=0, const std::string &message="")
flatbuffers::Offset< Protocol::KeyValue > CreateKeyValue(const std::string &key, const std::string &value)
MessageFrame BuildError(Protocol::ErrorCode code, const std::string &message, bool fatal=false)
MessageFrame BuildHandshakeAck(const std::string &version, const std::string &sessionId, bool accepted=true, const std::string &error="")
flatbuffers::FlatBufferBuilder & GetBuilder()
MessageFrame BuildDisconnect(const std::string &reason="", const std::string &message="")
static const T * GetRoot(const std::vector< uint8_t > &data)
MessageFrame BuildTreeInitAck(const std::string &treeId, bool success=true, int32_t nodeCount=0, const std::string &error="")
MessageFrame BuildTreeInit(const std::string &treeId, const std::string &treeName, flatbuffers::Offset< Protocol::NodeDefinition > rootOffset, const std::vector< flatbuffers::Offset< Protocol::BlackboardDefinition > > &blackboards={}, const std::vector< flatbuffers::Offset< Protocol::KeyValue > > &metadata={})
flatbuffers::Offset< Protocol::BlackboardDefinition > CreateBlackboardDefinition(const std::string &id, const std::string &name, const std::vector< flatbuffers::Offset< Protocol::BlackboardEntry > > &entries)