Chatsync  bbffde5c0c672a526bdc83637acf66dc20a80fbf
message.hpp
Go to the documentation of this file.
1 #pragma once
2 #include <memory>
3 #include <iostream>
4 #include "user.hpp"
5 
6 namespace messaging {
10  enum class MessageType {
11  Text,
12  Action
13  };
14 
23  class Message {
24  public:
25  const uint16_t _originId;
26  Message(const uint16_t id) : _originId(id) {};
30  virtual MessageType type() const = 0;
31  };
32 
36  typedef std::shared_ptr<const Message> message_ptr;
37 
43  class TextMessage: public Message {
44  const std::string _data;
45  const std::shared_ptr<const messaging::User> _user;
46  public:
47  TextMessage(const uint16_t origin, std::shared_ptr<const messaging::User>&& user, const std::string& data) :
48  Message(origin),
49  _data(data),
50  _user(std::move(user)) {};
51 
52  const std::string& data() const { return _data; };
53  const std::shared_ptr<const messaging::User> user() const { return _user; };
54 
55  MessageType type() const override { return MessageType::Text; };
56 
60  static auto fromMessage(const message_ptr msg) {
61  return static_cast<typename std::shared_ptr<const TextMessage>::element_type *>(msg.get());
62  }
63  };
64 
70  class ActionMessage: public Message {
71  const std::string _data;
72  const std::shared_ptr<const messaging::User> _user;
73  public:
74  ActionMessage(const uint16_t origin, std::shared_ptr<const messaging::User>&& user, const std::string& data) :
75  Message(origin),
76  _data(data),
77  _user(std::move(user)) {};
78 
79  const std::string& data() const { return _data; };
80  const std::shared_ptr<const messaging::User> user() const { return _user; };
81 
82  MessageType type() const override { return MessageType::Action; };
83 
87  static auto fromMessage(const message_ptr msg) {
88  return static_cast<typename std::shared_ptr<const ActionMessage>::element_type *>(msg.get());
89  }
90  };
91 }
const std::shared_ptr< const messaging::User > user() const
Definition: message.hpp:80
static auto fromMessage(const message_ptr msg)
Definition: message.hpp:60
TextMessage(const uint16_t origin, std::shared_ptr< const messaging::User > &&user, const std::string &data)
Definition: message.hpp:47
ActionMessage(const uint16_t origin, std::shared_ptr< const messaging::User > &&user, const std::string &data)
Definition: message.hpp:74
MessageType
Definition: message.hpp:10
const std::shared_ptr< const messaging::User > _user
Definition: message.hpp:72
const std::string _data
Definition: message.hpp:71
MessageType type() const override
Definition: message.hpp:55
Message(const uint16_t id)
Definition: message.hpp:26
Definition: message.hpp:43
MessageType type() const override
Definition: message.hpp:82
std::shared_ptr< const Message > message_ptr
Definition: message.hpp:36
const std::string & data() const
Definition: message.hpp:79
const std::shared_ptr< const messaging::User > _user
Definition: message.hpp:45
const std::string & data() const
Definition: message.hpp:52
const uint16_t _originId
Definition: message.hpp:25
Definition: message.hpp:70
static auto fromMessage(const message_ptr msg)
Definition: message.hpp:87
Definition: message.hpp:6
const std::string _data
Definition: message.hpp:44
const std::shared_ptr< const messaging::User > user() const
Definition: message.hpp:53
Definition: message.hpp:23