From 5458a2b31267766924701f8f804eb3904d0d5ce1 Mon Sep 17 00:00:00 2001 From: youngwolf Date: Thu, 14 Jan 2021 20:42:50 +0800 Subject: [PATCH] Fix compilation error. --- examples/echo_client/echo_client.cpp | 4 ++-- examples/echo_server/echo_server.cpp | 11 ++++++----- include/ascs/ext/packer.h | 20 ++++++++++---------- include/ascs/ext/unpacker.h | 12 ++++++------ 4 files changed, 24 insertions(+), 23 deletions(-) diff --git a/examples/echo_client/echo_client.cpp b/examples/echo_client/echo_client.cpp index abbd76e..db74bfa 100644 --- a/examples/echo_client/echo_client.cpp +++ b/examples/echo_client/echo_client.cpp @@ -30,12 +30,12 @@ #define ASCS_MSG_BUFFER_SIZE 1000000 #define ASCS_MAX_SEND_BUF (10 * ASCS_MSG_BUFFER_SIZE) #define ASCS_MAX_RECV_BUF (10 * ASCS_MSG_BUFFER_SIZE) -#define ASCS_DEFAULT_UNPACKER flexible_unpacker<> +#define ASCS_DEFAULT_UNPACKER flexible_unpacker //this unpacker only pre-allocated a buffer of 4000 bytes, but it can parse messages up to ST_ASIO_MSG_BUFFER_SIZE (here is 1000000) bytes, //it works as the default unpacker for messages <= 4000, otherwise, it works as non_copy_unpacker #elif 1 == PACKER_UNPACKER_TYPE #define ASCS_DEFAULT_PACKER packer2, std::string> -#define ASCS_DEFAULT_UNPACKER unpacker2> +#define ASCS_DEFAULT_UNPACKER unpacker2, std::string, flexible_unpacker> #elif 2 == PACKER_UNPACKER_TYPE #undef ASCS_HEARTBEAT_INTERVAL #define ASCS_HEARTBEAT_INTERVAL 0 //not support heartbeat diff --git a/examples/echo_server/echo_server.cpp b/examples/echo_server/echo_server.cpp index 0dfe0f6..61cedc4 100644 --- a/examples/echo_server/echo_server.cpp +++ b/examples/echo_server/echo_server.cpp @@ -30,12 +30,12 @@ #define ASCS_MSG_BUFFER_SIZE 1000000 #define ASCS_MAX_SEND_BUF (10 * ASCS_MSG_BUFFER_SIZE) #define ASCS_MAX_RECV_BUF (10 * ASCS_MSG_BUFFER_SIZE) -#define ASCS_DEFAULT_UNPACKER flexible_unpacker +#define ASCS_DEFAULT_UNPACKER flexible_unpacker<> //this unpacker only pre-allocated a buffer of 4000 bytes, but it can parse messages up to ST_ASIO_MSG_BUFFER_SIZE (here is 1000000) bytes, //it works as the default unpacker for messages <= 4000, otherwise, it works as non_copy_unpacker #elif 1 == PACKER_UNPACKER_TYPE #define ASCS_DEFAULT_PACKER packer2, basic_buffer, packer> -#define ASCS_DEFAULT_UNPACKER unpacker2> +#define ASCS_DEFAULT_UNPACKER unpacker2, basic_buffer, flexible_unpacker<>> #elif 2 == PACKER_UNPACKER_TYPE #undef ASCS_HEARTBEAT_INTERVAL #define ASCS_HEARTBEAT_INTERVAL 0 //not support heartbeat @@ -164,13 +164,14 @@ protected: }; #if ASCS_HEARTBEAT_INTERVAL > 0 -typedef server_socket_base normal_socket; +typedef server_socket_base, unpacker<>> normal_socket; #else //demonstrate how to open heartbeat function without defining macro ASCS_HEARTBEAT_INTERVAL -class normal_socket : public server_socket_base, ext::unpacker<>> +class normal_socket : public server_socket_base, unpacker<>> { public: normal_socket(i_server& server_) : server_socket_base, ext::unpacker<>>(server_) {} + //sometime, the default packer brings name conflict with the socket's packer member function, prefix namespace can resolve this conflict. protected: //demo client needs heartbeat (macro ASCS_HEARTBEAT_INTERVAL been defined), please note that the interval (here is 5) must be equal to @@ -190,7 +191,7 @@ protected: virtual bool on_accept(object_ctype& socket_ptr) {stop_listen(); return true;} }; -class short_connection : public server_socket_base, ext::unpacker<>> +class short_connection : public server_socket_base, unpacker<>> { private: typedef server_socket_base, ext::unpacker<>> super; diff --git a/include/ascs/ext/packer.h b/include/ascs/ext/packer.h index e40c3b5..504dc19 100644 --- a/include/ascs/ext/packer.h +++ b/include/ascs/ext/packer.h @@ -143,14 +143,14 @@ public: }; //protocol: length + body -//T can be unique_buffer or shared_buffer, the latter makes output messages seemingly copyable. -//C is XXXX or a class that inherit from XXXX (because XXXX can be a virtual interface). +//Buffer can be unique_buffer or shared_buffer, the latter makes output messages seemingly copyable. +//T is XXXX or a class that inherit from XXXX (because XXXX can be a virtual interface). //Packer is the real packer who packs messages, which means packer2 is just a wrapper. -template, typename C = string_buffer, typename Packer = packer<>> -class packer2 : public i_packer +template, typename T = string_buffer, typename Packer = packer<>> +class packer2 : public i_packer { private: - typedef i_packer super; + typedef i_packer super; public: static size_t get_max_msg_size() {return Packer::get_max_msg_size();} @@ -158,7 +158,7 @@ public: using super::pack_msg; virtual typename super::msg_type pack_msg(const char* const pstr[], const size_t len[], size_t num, bool native = false) { - auto raw_msg = new C(); + auto raw_msg = new T(); auto str = Packer().pack_msg(pstr, len, num, native); raw_msg->swap(str); return typename super::msg_type(raw_msg); @@ -170,7 +170,7 @@ public: return false; auto head_len = packer_helper::pack_header(len); - auto raw_msg = new C(); + auto raw_msg = new T(); raw_msg->assign((const char*) &head_len, ASCS_HEAD_LEN); msg_can.emplace_back(raw_msg); msg_can.emplace_back(std::move(msg)); @@ -184,7 +184,7 @@ public: return false; auto head_len = packer_helper::pack_header(len); - auto raw_msg = new C(); + auto raw_msg = new T(); raw_msg->assign((const char*) &head_len, ASCS_HEAD_LEN); msg_can.emplace_back(raw_msg); msg_can.emplace_back(std::move(msg1)); @@ -199,7 +199,7 @@ public: return false; auto head_len = packer_helper::pack_header(len); - auto raw_msg = new C(); + auto raw_msg = new T(); raw_msg->assign((const char*) &head_len, ASCS_HEAD_LEN); out.emplace_back(raw_msg); out.splice(std::end(out), in); @@ -208,7 +208,7 @@ public: } virtual typename super::msg_type pack_heartbeat() { - auto raw_msg = new C(); + auto raw_msg = new T(); auto str = Packer().pack_heartbeat(); raw_msg->swap(str); return typename super::msg_type(raw_msg); diff --git a/include/ascs/ext/unpacker.h b/include/ascs/ext/unpacker.h index 7f3f855..7ceb894 100644 --- a/include/ascs/ext/unpacker.h +++ b/include/ascs/ext/unpacker.h @@ -178,7 +178,7 @@ protected: //this unpacker has a fixed buffer (4000 bytes), if messages can be held in it, then this unpacker works just as the default unpacker, // otherwise, a dynamic std::string will be created to hold big messages, then this unpacker works just as the non_copy_unpacker. //T can be std::string or basic_buffer, the latter will not fill its buffer in resize invocation, so is more efficient. -template +template class flexible_unpacker : public i_unpacker { private: @@ -388,14 +388,14 @@ protected: }; //protocol: length + body -//Buffer can be unique_buffer or shared_buffer, the latter makes output messages seemingly copyable. -//T can be std::string or basic_buffer, and the output message type will be Buffer. +//Buffer can be unique_buffer or shared_buffer, the latter makes output messages seemingly copyable. +//T is XXXX or a class that inherit from XXXX (because XXXX can be a virtual interface). //Unpacker can be the default unpacker or flexible_unpacker, which means unpacker2 is just a wrapper. -template class Buffer = shared_buffer, typename T = std::string, typename Unpacker = unpacker<>> -class unpacker2 : public i_unpacker> +template, typename T = std::string, typename Unpacker = unpacker<>> +class unpacker2 : public i_unpacker { private: - typedef i_unpacker> super; + typedef i_unpacker super; public: virtual void stripped(bool stripped_) {super::stripped(stripped_); unpacker_.stripped(stripped_);} -- GitLab