Cogs.Core
Message.h
1#pragma once
2
3#include "../Memory/MemoryBuffer.h"
4#include "../Platform/Threads.h"
5
6#include <memory>
7#include <mutex>
8#include <vector>
9
10namespace Cogs {
11 namespace Network {
12 class COGSFOUNDATION_API Message final : public Memory::MemoryBuffer {
13 friend class MessageHub;
14 public:
15 using Ptr = std::shared_ptr<Message>;
16
17 Message();
18 Message(uint32_t id, const Message& message);
19 Message(const Message& src) = delete;
20
21 static Ptr allocate(uint32_t id);
22 static Ptr duplicate(const Message& src);
23 static void flush();
24
25 uint32_t getID() const { return identifier; }
26
27 private:
28 using Pool = std::vector<Message*>;
29
30 static Pool messagePool; // List of free messages that can be reused.
31 static Mutex mutex;
32 uint32_t identifier = 0; // ID of this message.
33
34 Message(Message&&) = delete;
35 Message& operator =(const Message&) = delete;
36 Message& operator =(Message&&) = delete;
37
38 static void deleteMessage(Message* msg);
39 };
40 }
41}
A MessageHub connects to other hubs to form a simple peer-to-peer application-internal networking sys...
Definition: MessageHub.h:30
Contains all Cogs related functionality.
Definition: FieldSetter.h:23