From e6f4d6c66f9a7f3632afca5e95c9040f1e97e4d9 Mon Sep 17 00:00:00 2001 From: Joshua Scott Date: Mon, 2 Apr 2018 01:24:32 +0100 Subject: [PATCH 1/5] protocol: Packet class definition --- include/ki/protocol/Packet.h | 56 ++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 include/ki/protocol/Packet.h diff --git a/include/ki/protocol/Packet.h b/include/ki/protocol/Packet.h new file mode 100644 index 0000000..79e2bc2 --- /dev/null +++ b/include/ki/protocol/Packet.h @@ -0,0 +1,56 @@ +#pragma once +#include "../util/Serializable.h" +#include +#include +#include +#include + +namespace ki +{ +namespace protocol +{ + class Packet : public util::Serializable + { + public: + Packet(bool control = false, uint8_t opcode = 0); + virtual ~Packet() = default; + + bool is_control() const; + void set_control(bool control); + + uint8_t get_opcode() const; + void set_opcode(uint8_t opcode); + + template + void set_payload_data(const DataT &data) + { + static_assert(std::is_base_of::value, + "DataT must derive from Serializable."); + + std::ostringstream oss; + data.write_to(oss); + m_payload = std::vector(oss.str().c_str(), data.get_size()); + } + + template + DataT *get_payload_data() const + { + static_assert(std::is_base_of::value, + "DataT must derive from Serializable."); + + std::istringstream iss(m_payload.data()); + DataT *data = new DataT(); + data->read_from(iss); + return data; + } + + virtual void write_to(std::ostream &ostream) const final; + virtual void read_from(std::istream &istream) final; + virtual size_t get_size() const final; + private: + bool m_control; + uint8_t m_opcode; + std::vector m_payload; + }; +} +} From eb7e5ade631ac4484c0c2878e2f3bb7e84618f4f Mon Sep 17 00:00:00 2001 From: Joshua Scott Date: Mon, 2 Apr 2018 01:25:08 +0100 Subject: [PATCH 2/5] protocol: Definitions for control structures --- include/ki/protocol/control/ClientHello.h | 49 ++++++++++++++++++++++ include/ki/protocol/control/Opcode.h | 20 +++++++++ include/ki/protocol/control/Ping.h | 50 +++++++++++++++++++++++ include/ki/protocol/control/ServerHello.h | 49 ++++++++++++++++++++++ 4 files changed, 168 insertions(+) create mode 100644 include/ki/protocol/control/ClientHello.h create mode 100644 include/ki/protocol/control/Opcode.h create mode 100644 include/ki/protocol/control/Ping.h create mode 100644 include/ki/protocol/control/ServerHello.h diff --git a/include/ki/protocol/control/ClientHello.h b/include/ki/protocol/control/ClientHello.h new file mode 100644 index 0000000..ee00b66 --- /dev/null +++ b/include/ki/protocol/control/ClientHello.h @@ -0,0 +1,49 @@ +#pragma once +#include "../../util/Serializable.h" +#include "../Packet.h" +#include "Opcode.h" +#include +#include + +namespace ki +{ +namespace protocol +{ +namespace control +{ + class ClientHello : public util::Serializable + { + public: + ClientHello(uint16_t session_id = 0, + uint64_t timestamp = 0, uint32_t milliseconds = 0); + virtual ~ClientHello() = default; + + uint16_t get_session_id() const; + void set_session_id(uint16_t session_id); + + uint64_t get_timestamp() const; + void set_timestamp(uint64_t timestamp); + + uint32_t get_milliseconds() const; + void set_milliseconds(uint32_t milliseconds); + + void write_to(std::ostream &ostream) const final; + void read_from(std::istream &istream) final; + size_t get_size() const final; + + static Packet *create_packet(uint16_t session_id = 0, + uint64_t timestamp = 0, uint32_t milliseconds = 0) + { + ClientHello data(session_id, timestamp, milliseconds); + auto *packet = new Packet(true, (uint8_t)Opcode::CLIENT_HELLO); + packet->set_payload_data(data); + return packet; + } + private: + uint16_t m_session_id; + uint64_t m_timestamp; + uint32_t m_milliseconds; + }; +} +} +} diff --git a/include/ki/protocol/control/Opcode.h b/include/ki/protocol/control/Opcode.h new file mode 100644 index 0000000..8442a56 --- /dev/null +++ b/include/ki/protocol/control/Opcode.h @@ -0,0 +1,20 @@ +#pragma once +#include + +namespace ki +{ +namespace protocol +{ +namespace control +{ + enum class Opcode : uint8_t + { + SERVER_HELLO = 0, + UDP_HELLO = 1, + PING = 3, + PING_RSP = 4, + CLIENT_HELLO = 5 + }; +} +} +} \ No newline at end of file diff --git a/include/ki/protocol/control/Ping.h b/include/ki/protocol/control/Ping.h new file mode 100644 index 0000000..dff0ed9 --- /dev/null +++ b/include/ki/protocol/control/Ping.h @@ -0,0 +1,50 @@ +#pragma once +#include "../../util/Serializable.h" +#include "../Packet.h" +#include "Opcode.h" +#include + +namespace ki +{ + namespace protocol + { + namespace control + { + class Ping : public util::Serializable + { + public: + Ping(uint16_t session_id = 0, + uint16_t milliseconds = 0, uint8_t minutes = 0); + virtual ~Ping() = default; + + uint16_t get_session_id() const; + void set_session_id(uint16_t session_id); + + uint16_t get_milliseconds() const; + void set_milliseconds(uint16_t milliseconds); + + uint8_t get_minutes() const; + void set_minutes(uint8_t minutes); + + void write_to(std::ostream &ostream) const final; + void read_from(std::istream &istream) final; + size_t get_size() const final; + + static Packet *create_packet(uint16_t session_id = 0, + uint16_t milliseconds = 0, uint8_t minutes = 0, + bool response = false) + { + Ping data(session_id, milliseconds, minutes); + auto *packet = new Packet(true, + (uint8_t)(response ? Opcode::PING_RSP : Opcode::PING)); + packet->set_payload_data(data); + return packet; + } + private: + uint16_t m_session_id; + uint16_t m_milliseconds; + uint8_t m_minutes; + }; + } + } +} diff --git a/include/ki/protocol/control/ServerHello.h b/include/ki/protocol/control/ServerHello.h new file mode 100644 index 0000000..2c0d50e --- /dev/null +++ b/include/ki/protocol/control/ServerHello.h @@ -0,0 +1,49 @@ +#pragma once +#include "../../util/Serializable.h" +#include "../Packet.h" +#include "Opcode.h" +#include +#include + +namespace ki +{ +namespace protocol +{ +namespace control +{ + class ServerHello : public util::Serializable + { + public: + ServerHello(uint16_t session_id = 0, + uint64_t timestamp = 0, uint32_t milliseconds = 0); + virtual ~ServerHello() = default; + + uint16_t get_session_id() const; + void set_session_id(uint16_t session_id); + + uint64_t get_timestamp() const; + void set_timestamp(uint64_t timestamp); + + uint32_t get_milliseconds() const; + void set_milliseconds(uint32_t milliseconds); + + void write_to(std::ostream &ostream) const final; + void read_from(std::istream &istream) final; + size_t get_size() const final; + + static Packet *create_packet(uint16_t session_id = 0, + uint64_t timestamp = 0, uint32_t milliseconds = 0) + { + ServerHello data(session_id, timestamp, milliseconds); + auto *packet = new Packet(true, (uint8_t)Opcode::SERVER_HELLO); + packet->set_payload_data(data); + return packet; + } + private: + uint16_t m_session_id; + uint64_t m_timestamp; + uint32_t m_milliseconds; + }; +} +} +} From 3cb082b1af440127e67c5989b94a0b7d2e1b2b2b Mon Sep 17 00:00:00 2001 From: Joshua Scott Date: Tue, 3 Apr 2018 16:11:06 +0100 Subject: [PATCH 3/5] protocol: Definitions for DML messages --- include/ki/protocol/dml/Message.h | 38 +++++++++++++++++ include/ki/protocol/dml/MessageBuilder.h | 38 +++++++++++++++++ include/ki/protocol/dml/MessageManager.h | 40 ++++++++++++++++++ include/ki/protocol/dml/MessageModule.h | 51 +++++++++++++++++++++++ include/ki/protocol/dml/MessageTemplate.h | 35 ++++++++++++++++ 5 files changed, 202 insertions(+) create mode 100644 include/ki/protocol/dml/Message.h create mode 100644 include/ki/protocol/dml/MessageBuilder.h create mode 100644 include/ki/protocol/dml/MessageManager.h create mode 100644 include/ki/protocol/dml/MessageModule.h create mode 100644 include/ki/protocol/dml/MessageTemplate.h diff --git a/include/ki/protocol/dml/Message.h b/include/ki/protocol/dml/Message.h new file mode 100644 index 0000000..397b848 --- /dev/null +++ b/include/ki/protocol/dml/Message.h @@ -0,0 +1,38 @@ +#pragma once +#include "../../util/Serializable.h" +#include "../../dml/Record.h" +#include + +namespace ki +{ +namespace protocol +{ +namespace dml +{ + class Message : public util::Serializable + { + public: + Message(uint8_t service_id = 0, uint8_t type = 0); + virtual ~Message() = default; + + uint8_t get_service_id() const; + void set_service_id(uint8_t service_id); + + uint8_t get_type() const; + void set_type(uint8_t type); + + ki::dml::Record &get_record(); + const ki::dml::Record &get_record() const; + void set_record(const ki::dml::Record &record); + + void write_to(std::ostream &ostream) const final; + void read_from(std::istream &istream) final; + size_t get_size() const final; + private: + uint8_t m_service_id; + uint8_t m_type; + ki::dml::Record *m_record; + }; +} +} +} \ No newline at end of file diff --git a/include/ki/protocol/dml/MessageBuilder.h b/include/ki/protocol/dml/MessageBuilder.h new file mode 100644 index 0000000..2b2e134 --- /dev/null +++ b/include/ki/protocol/dml/MessageBuilder.h @@ -0,0 +1,38 @@ +#pragma once +#include "Message.h" +#include + +namespace ki +{ +namespace protocol +{ +namespace dml +{ + class MessageBuilder + { + public: + MessageBuilder(uint8_t service_id = 0, uint8_t type = 0); + + MessageBuilder &set_service_id(uint8_t service_id); + MessageBuilder &set_message_type(uint8_t type); + MessageBuilder &use_template_record(const ki::dml::Record &record); + + template + MessageBuilder &set_field_value(std::string name, ValueT value) + { + auto *field = m_message->get_record().get_field(name); + if (!field) + { + // TODO: Exceptions + } + field->set_value(value); + return *this; + } + + Message *get_message() const; + private: + Message *m_message; + }; +} +} +} \ No newline at end of file diff --git a/include/ki/protocol/dml/MessageManager.h b/include/ki/protocol/dml/MessageManager.h new file mode 100644 index 0000000..be3281e --- /dev/null +++ b/include/ki/protocol/dml/MessageManager.h @@ -0,0 +1,40 @@ +#pragma once +#include "MessageModule.h" +#include "MessageBuilder.h" +#include "../../dml/Record.h" +#include + +namespace ki +{ +namespace protocol +{ +namespace dml +{ + class MessageManager + { + public: + MessageManager(); + ~MessageManager(); + + static MessageManager &get_singleton(); + + const MessageModule &load_module(std::string filepath); + const MessageModule &get_module(uint8_t service_id) const; + const MessageModule &get_module(std::string protocol_type) const; + + MessageBuilder &build_message(uint8_t service_id, uint8_t message_type) const; + MessageBuilder &build_message(uint8_t service_id, std::string message_name) const; + MessageBuilder &build_message(std::string service_type, uint8_t message_type) const; + MessageBuilder &build_message(std::string service_type, std::string message_name) const; + + const Message *from_binary(std::istream &istream); + private: + static MessageManager *g_instance; + + MessageModuleList m_modules; + MessageModuleServiceIdMap m_service_id_map; + MessageModuleProtocolTypeMap m_protocol_type_map; + }; +} +} +} diff --git a/include/ki/protocol/dml/MessageModule.h b/include/ki/protocol/dml/MessageModule.h new file mode 100644 index 0000000..137cc42 --- /dev/null +++ b/include/ki/protocol/dml/MessageModule.h @@ -0,0 +1,51 @@ +#pragma once +#include "MessageTemplate.h" +#include +#include +#include +#include + +namespace ki +{ +namespace protocol +{ +namespace dml +{ + class MessageModule + { + public: + MessageModule(uint8_t service_id, std::string protocol_type); + ~MessageModule(); + + uint8_t get_service_id() const; + void set_service_id(uint8_t service_id); + + std::string get_protocol_type() const; + void set_protocol_type(std::string protocol_type); + + std::string get_protocol_desription() const; + void set_protocol_description(std::string protocol_description); + + const MessageTemplate &add_message_template(std::string name, uint8_t type, + ki::dml::Record *record); + const MessageTemplate &get_message_template(uint8_t type); + const MessageTemplate &get_message_template(std::string name); + + MessageBuilder &build_message(uint8_t message_type) const; + MessageBuilder &build_message(std::string message_name) const; + private: + uint8_t m_service_id; + std::string m_protocol_type; + std::string m_protocol_description; + + std::vector m_templates; + std::map m_message_name_map; + std::map m_message_type_map; + }; + + typedef std::vector MessageModuleList; + typedef std::map MessageModuleServiceIdMap; + typedef std::map MessageModuleProtocolTypeMap; +} +} +} diff --git a/include/ki/protocol/dml/MessageTemplate.h b/include/ki/protocol/dml/MessageTemplate.h new file mode 100644 index 0000000..ba8b744 --- /dev/null +++ b/include/ki/protocol/dml/MessageTemplate.h @@ -0,0 +1,35 @@ +#pragma once +#include "../../dml/Record.h" +#include "MessageBuilder.h" +#include + +namespace ki +{ +namespace protocol +{ +namespace dml +{ + class MessageTemplate + { + public: + MessageTemplate(std::string name, uint8_t type, ki::dml::Record *record); + ~MessageTemplate(); + + std::string get_name() const; + void set_name(std::string name); + + uint8_t get_type() const; + void set_type(uint8_t type); + + const ki::dml::Record &get_record() const; + void set_record(ki::dml::Record *record); + + MessageBuilder &build_message(); + private: + std::string m_name; + uint8_t m_type; + ki::dml::Record *m_record; + }; +} +} +} \ No newline at end of file From bd57a3db9d2ef0988156f87826ea0888067656b2 Mon Sep 17 00:00:00 2001 From: Joshua Scott Date: Tue, 3 Apr 2018 16:43:00 +0100 Subject: [PATCH 4/5] protocol: Add source files to CMakeLists.txt also fix error in Packet.h --- CMakeLists.txt | 1 + include/ki/protocol/Packet.h | 3 ++- src/protocol/CMakeLists.txt | 12 +++++++++ src/protocol/Packet.cpp | 9 +++++++ src/protocol/control/ClientHello.cpp | 12 +++++++++ src/protocol/control/Ping.cpp | 12 +++++++++ src/protocol/control/ServerHello.cpp | 12 +++++++++ src/protocol/dml/Message.cpp | 12 +++++++++ src/protocol/dml/MessageBuilder.cpp | 38 ++++++++++++++++++++++++++++ src/protocol/dml/MessageManager.cpp | 12 +++++++++ src/protocol/dml/MessageModule.cpp | 12 +++++++++ src/protocol/dml/MessageTemplate.cpp | 12 +++++++++ 12 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 src/protocol/CMakeLists.txt create mode 100644 src/protocol/Packet.cpp create mode 100644 src/protocol/control/ClientHello.cpp create mode 100644 src/protocol/control/Ping.cpp create mode 100644 src/protocol/control/ServerHello.cpp create mode 100644 src/protocol/dml/Message.cpp create mode 100644 src/protocol/dml/MessageBuilder.cpp create mode 100644 src/protocol/dml/MessageManager.cpp create mode 100644 src/protocol/dml/MessageModule.cpp create mode 100644 src/protocol/dml/MessageTemplate.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 9af9364..45f290e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,7 @@ target_include_directories(${PROJECT_NAME} target_link_libraries(${PROJECT_NAME} RapidXML) add_subdirectory("src/dml") +add_subdirectory("src/protocol") option(KI_BUILD_EXAMPLES "Determines whether to build examples." ON) if (KI_BUILD_EXAMPLES) diff --git a/include/ki/protocol/Packet.h b/include/ki/protocol/Packet.h index 79e2bc2..f49a8cd 100644 --- a/include/ki/protocol/Packet.h +++ b/include/ki/protocol/Packet.h @@ -29,7 +29,8 @@ namespace protocol std::ostringstream oss; data.write_to(oss); - m_payload = std::vector(oss.str().c_str(), data.get_size()); + std::string data_string = oss.str(); + m_payload.assign(data_string.begin(), data_string.end()); } template diff --git a/src/protocol/CMakeLists.txt b/src/protocol/CMakeLists.txt new file mode 100644 index 0000000..2d6393a --- /dev/null +++ b/src/protocol/CMakeLists.txt @@ -0,0 +1,12 @@ +target_sources(${PROJECT_NAME} + PRIVATE + ${PROJECT_SOURCE_DIR}/src/protocol/Packet.cpp + ${PROJECT_SOURCE_DIR}/src/protocol/control/ClientHello.cpp + ${PROJECT_SOURCE_DIR}/src/protocol/control/ServerHello.cpp + ${PROJECT_SOURCE_DIR}/src/protocol/control/Ping.cpp + ${PROJECT_SOURCE_DIR}/src/protocol/dml/Message.cpp + ${PROJECT_SOURCE_DIR}/src/protocol/dml/MessageBuilder.cpp + ${PROJECT_SOURCE_DIR}/src/protocol/dml/MessageManager.cpp + ${PROJECT_SOURCE_DIR}/src/protocol/dml/MessageModule.cpp + ${PROJECT_SOURCE_DIR}/src/protocol/dml/MessageTemplate.cpp +) \ No newline at end of file diff --git a/src/protocol/Packet.cpp b/src/protocol/Packet.cpp new file mode 100644 index 0000000..d78f078 --- /dev/null +++ b/src/protocol/Packet.cpp @@ -0,0 +1,9 @@ +#include "ki/protocol/Packet.h" + +namespace ki +{ +namespace protocol +{ + +} +} diff --git a/src/protocol/control/ClientHello.cpp b/src/protocol/control/ClientHello.cpp new file mode 100644 index 0000000..4edff91 --- /dev/null +++ b/src/protocol/control/ClientHello.cpp @@ -0,0 +1,12 @@ +#include "ki/protocol/control/ClientHello.h" + +namespace ki +{ +namespace protocol +{ +namespace control +{ + +} +} +} \ No newline at end of file diff --git a/src/protocol/control/Ping.cpp b/src/protocol/control/Ping.cpp new file mode 100644 index 0000000..7f6a0af --- /dev/null +++ b/src/protocol/control/Ping.cpp @@ -0,0 +1,12 @@ +#include "ki/protocol/control/Ping.h" + +namespace ki +{ +namespace protocol +{ +namespace control +{ + +} +} +} \ No newline at end of file diff --git a/src/protocol/control/ServerHello.cpp b/src/protocol/control/ServerHello.cpp new file mode 100644 index 0000000..8be2f86 --- /dev/null +++ b/src/protocol/control/ServerHello.cpp @@ -0,0 +1,12 @@ +#include "ki/protocol/control/ServerHello.h" + +namespace ki +{ +namespace protocol +{ +namespace control +{ + +} +} +} \ No newline at end of file diff --git a/src/protocol/dml/Message.cpp b/src/protocol/dml/Message.cpp new file mode 100644 index 0000000..d9a4dab --- /dev/null +++ b/src/protocol/dml/Message.cpp @@ -0,0 +1,12 @@ +#include "ki/protocol/dml/Message.h" + +namespace ki +{ +namespace protocol +{ +namespace dml +{ + +} +} +} \ No newline at end of file diff --git a/src/protocol/dml/MessageBuilder.cpp b/src/protocol/dml/MessageBuilder.cpp new file mode 100644 index 0000000..aaed66f --- /dev/null +++ b/src/protocol/dml/MessageBuilder.cpp @@ -0,0 +1,38 @@ +#include "ki/protocol/dml/MessageBuilder.h" + +namespace ki +{ +namespace protocol +{ +namespace dml +{ + MessageBuilder::MessageBuilder(uint8_t service_id, uint8_t type) + { + m_message = new Message(service_id, type); + } + + MessageBuilder &MessageBuilder::set_service_id(uint8_t service_id) + { + m_message->set_service_id(service_id); + return *this; + } + + MessageBuilder &MessageBuilder::set_message_type(uint8_t type) + { + m_message->set_type(type); + return *this; + } + + MessageBuilder &MessageBuilder::use_template_record(const ki::dml::Record& record) + { + m_message->set_record(record); + return *this; + } + + Message *MessageBuilder::get_message() const + { + return m_message; + } +} +} +} \ No newline at end of file diff --git a/src/protocol/dml/MessageManager.cpp b/src/protocol/dml/MessageManager.cpp new file mode 100644 index 0000000..ae3703d --- /dev/null +++ b/src/protocol/dml/MessageManager.cpp @@ -0,0 +1,12 @@ +#include "ki/protocol/dml/MessageManager.h" + +namespace ki +{ +namespace protocol +{ +namespace dml +{ + +} +} +} \ No newline at end of file diff --git a/src/protocol/dml/MessageModule.cpp b/src/protocol/dml/MessageModule.cpp new file mode 100644 index 0000000..9b239fc --- /dev/null +++ b/src/protocol/dml/MessageModule.cpp @@ -0,0 +1,12 @@ +#include "ki/protocol/dml/MessageModule.h" + +namespace ki +{ +namespace protocol +{ +namespace dml +{ + +} +} +} \ No newline at end of file diff --git a/src/protocol/dml/MessageTemplate.cpp b/src/protocol/dml/MessageTemplate.cpp new file mode 100644 index 0000000..405de3f --- /dev/null +++ b/src/protocol/dml/MessageTemplate.cpp @@ -0,0 +1,12 @@ +#include "ki/protocol/dml/MessageTemplate.h" + +namespace ki +{ +namespace protocol +{ +namespace dml +{ + +} +} +} \ No newline at end of file From e0b5ca79233a7dd03bba3be118e36572ca7f41f0 Mon Sep 17 00:00:00 2001 From: Joshua Scott Date: Tue, 3 Apr 2018 17:02:30 +0100 Subject: [PATCH 5/5] protocol: Add override specifier I thought final implied it --- include/ki/protocol/Packet.h | 8 +-- include/ki/protocol/control/ClientHello.h | 8 +-- include/ki/protocol/control/Ping.h | 76 +++++++++++------------ include/ki/protocol/control/ServerHello.h | 8 +-- include/ki/protocol/dml/Message.h | 8 +-- 5 files changed, 54 insertions(+), 54 deletions(-) diff --git a/include/ki/protocol/Packet.h b/include/ki/protocol/Packet.h index f49a8cd..e877c8b 100644 --- a/include/ki/protocol/Packet.h +++ b/include/ki/protocol/Packet.h @@ -9,7 +9,7 @@ namespace ki { namespace protocol { - class Packet : public util::Serializable + class Packet final : public util::Serializable { public: Packet(bool control = false, uint8_t opcode = 0); @@ -45,9 +45,9 @@ namespace protocol return data; } - virtual void write_to(std::ostream &ostream) const final; - virtual void read_from(std::istream &istream) final; - virtual size_t get_size() const final; + void write_to(std::ostream &ostream) const override final; + void read_from(std::istream &istream) override final; + size_t get_size() const override final; private: bool m_control; uint8_t m_opcode; diff --git a/include/ki/protocol/control/ClientHello.h b/include/ki/protocol/control/ClientHello.h index ee00b66..05b96ec 100644 --- a/include/ki/protocol/control/ClientHello.h +++ b/include/ki/protocol/control/ClientHello.h @@ -11,7 +11,7 @@ namespace protocol { namespace control { - class ClientHello : public util::Serializable + class ClientHello final : public util::Serializable { public: ClientHello(uint16_t session_id = 0, @@ -27,9 +27,9 @@ namespace control uint32_t get_milliseconds() const; void set_milliseconds(uint32_t milliseconds); - void write_to(std::ostream &ostream) const final; - void read_from(std::istream &istream) final; - size_t get_size() const final; + void write_to(std::ostream &ostream) const override final; + void read_from(std::istream &istream) override final; + size_t get_size() const override final; static Packet *create_packet(uint16_t session_id = 0, uint64_t timestamp = 0, uint32_t milliseconds = 0) diff --git a/include/ki/protocol/control/Ping.h b/include/ki/protocol/control/Ping.h index dff0ed9..494e38c 100644 --- a/include/ki/protocol/control/Ping.h +++ b/include/ki/protocol/control/Ping.h @@ -6,45 +6,45 @@ namespace ki { - namespace protocol +namespace protocol +{ +namespace control +{ + class Ping final : public util::Serializable { - namespace control + public: + Ping(uint16_t session_id = 0, + uint16_t milliseconds = 0, uint8_t minutes = 0); + virtual ~Ping() = default; + + uint16_t get_session_id() const; + void set_session_id(uint16_t session_id); + + uint16_t get_milliseconds() const; + void set_milliseconds(uint16_t milliseconds); + + uint8_t get_minutes() const; + void set_minutes(uint8_t minutes); + + void write_to(std::ostream &ostream) const override final; + void read_from(std::istream &istream) override final; + size_t get_size() const override final; + + static Packet *create_packet(uint16_t session_id = 0, + uint16_t milliseconds = 0, uint8_t minutes = 0, + bool response = false) { - class Ping : public util::Serializable - { - public: - Ping(uint16_t session_id = 0, - uint16_t milliseconds = 0, uint8_t minutes = 0); - virtual ~Ping() = default; - - uint16_t get_session_id() const; - void set_session_id(uint16_t session_id); - - uint16_t get_milliseconds() const; - void set_milliseconds(uint16_t milliseconds); - - uint8_t get_minutes() const; - void set_minutes(uint8_t minutes); - - void write_to(std::ostream &ostream) const final; - void read_from(std::istream &istream) final; - size_t get_size() const final; - - static Packet *create_packet(uint16_t session_id = 0, - uint16_t milliseconds = 0, uint8_t minutes = 0, - bool response = false) - { - Ping data(session_id, milliseconds, minutes); - auto *packet = new Packet(true, - (uint8_t)(response ? Opcode::PING_RSP : Opcode::PING)); - packet->set_payload_data(data); - return packet; - } - private: - uint16_t m_session_id; - uint16_t m_milliseconds; - uint8_t m_minutes; - }; + Ping data(session_id, milliseconds, minutes); + auto *packet = new Packet(true, + (uint8_t)(response ? Opcode::PING_RSP : Opcode::PING)); + packet->set_payload_data(data); + return packet; } - } + private: + uint16_t m_session_id; + uint16_t m_milliseconds; + uint8_t m_minutes; + }; +} +} } diff --git a/include/ki/protocol/control/ServerHello.h b/include/ki/protocol/control/ServerHello.h index 2c0d50e..123a7b6 100644 --- a/include/ki/protocol/control/ServerHello.h +++ b/include/ki/protocol/control/ServerHello.h @@ -11,7 +11,7 @@ namespace protocol { namespace control { - class ServerHello : public util::Serializable + class ServerHello final : public util::Serializable { public: ServerHello(uint16_t session_id = 0, @@ -27,9 +27,9 @@ namespace control uint32_t get_milliseconds() const; void set_milliseconds(uint32_t milliseconds); - void write_to(std::ostream &ostream) const final; - void read_from(std::istream &istream) final; - size_t get_size() const final; + void write_to(std::ostream &ostream) const override final; + void read_from(std::istream &istream) override final; + size_t get_size() const override final; static Packet *create_packet(uint16_t session_id = 0, uint64_t timestamp = 0, uint32_t milliseconds = 0) diff --git a/include/ki/protocol/dml/Message.h b/include/ki/protocol/dml/Message.h index 397b848..4709198 100644 --- a/include/ki/protocol/dml/Message.h +++ b/include/ki/protocol/dml/Message.h @@ -9,7 +9,7 @@ namespace protocol { namespace dml { - class Message : public util::Serializable + class Message final : public util::Serializable { public: Message(uint8_t service_id = 0, uint8_t type = 0); @@ -25,9 +25,9 @@ namespace dml const ki::dml::Record &get_record() const; void set_record(const ki::dml::Record &record); - void write_to(std::ostream &ostream) const final; - void read_from(std::istream &istream) final; - size_t get_size() const final; + void write_to(std::ostream &ostream) const override final; + void read_from(std::istream &istream) override final; + size_t get_size() const override final; private: uint8_t m_service_id; uint8_t m_type;