Brunot
Loading...
Searching...
No Matches
Message.h
Go to the documentation of this file.
1// File: Message.h
2// Description: The base class of all messages. All derived messages should hold information, this class exists
3// so we can polymorphically pass around messages
4// Author(s): Ori Balashov (ori.balashov@digipen.edu)
5// 2025 / 10 / 24
6// (C) Digipen 2025
7// ____ __ __ __
8// /\__ _\/\ \ /\ \/\ \
9// \/_/\ \/\ \ \___ __ \ \ \_\ \ ___ __ __ ____ __
10// \ \ \ \ \ _ `\ /'__`\ \ \ _ \ / __`\/\ \/\ \ /',__\ /'__`\
11// \ \ \ \ \ \ \ \/\ __/ \ \ \ \ \/\ \L\ \ \ \_\ \/\__, `\/\ __/
12// \ \_\ \ \_\ \_\ \____\ \ \_\ \_\ \____/\ \____/\/\____/\ \____\
13// \/_/ \/_/\/_/\/____/ \/_/\/_/\/___/ \/___/ \/___/ \/____/
14#pragma once
15#include <memory>
16#include "System/json.h"
17
18namespace sys
19{
20class Json;
21}
22
23using Stream = sys::Json;
24
25
26#define MSG_CLONE(MessageClass) auto clone() const -> std::unique_ptr<Message> override \
27{ \
28 return std::make_unique<MessageClass>(*this); \
29}
30
31// Note: This implementation is inspired by Ravi Richards' (Man O' Ware) Message class, although no code has been copied
32
33struct Message
34{
35
36 Message() = default;
37 Message(const Message& other) = default;
38 Message(Message&& other) noexcept = default;
39 auto operator=(const Message& other) -> Message& = default;
40 auto operator=(Message&& other) noexcept -> Message& = default;
41 virtual ~Message() = default;
42
43 auto virtual clone() const -> std::unique_ptr<Message>
44 {
45 return std::make_unique<Message>(*this);
46 }
47
48 virtual auto load(Stream& stream) -> void;
49 virtual auto save(Stream& stream) const -> void;
50
51
59 template <typename T>
60 auto convertMessageTo() const -> const T*
61 {
62 return dynamic_cast<const T*>(this);
63 }
64
65 // Holds no data
66};
sys::Json Stream
Definition AudioObject.h:20
Definition Json.h:32
the type of elements in a basic_json container
Definition GameObject.h:32
virtual auto save(Stream &stream) const -> void
Definition Message.cpp:23
Message()=default
virtual auto clone() const -> std::unique_ptr< Message >
Definition Message.h:43
Message(Message &&other) noexcept=default
virtual ~Message()=default
auto convertMessageTo() const -> const T *
A function that converts messages to the specific type so you don't need to call static_cast yourself...
Definition Message.h:60
virtual auto load(Stream &stream) -> void
Definition Message.cpp:18
Message(const Message &other)=default
auto operator=(const Message &other) -> Message &=default
auto operator=(Message &&other) noexcept -> Message &=default