提交 5458a2b3 编写于 作者: Y youngwolf

Fix compilation error.

上级 702ae02c
...@@ -30,12 +30,12 @@ ...@@ -30,12 +30,12 @@
#define ASCS_MSG_BUFFER_SIZE 1000000 #define ASCS_MSG_BUFFER_SIZE 1000000
#define ASCS_MAX_SEND_BUF (10 * ASCS_MSG_BUFFER_SIZE) #define ASCS_MAX_SEND_BUF (10 * ASCS_MSG_BUFFER_SIZE)
#define ASCS_MAX_RECV_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<std::string>
//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, //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 //it works as the default unpacker for messages <= 4000, otherwise, it works as non_copy_unpacker
#elif 1 == PACKER_UNPACKER_TYPE #elif 1 == PACKER_UNPACKER_TYPE
#define ASCS_DEFAULT_PACKER packer2<unique_buffer<std::string>, std::string> #define ASCS_DEFAULT_PACKER packer2<unique_buffer<std::string>, std::string>
#define ASCS_DEFAULT_UNPACKER unpacker2<unique_buffer, std::string, flexible_unpacker<>> #define ASCS_DEFAULT_UNPACKER unpacker2<unique_buffer<std::string>, std::string, flexible_unpacker<std::string>>
#elif 2 == PACKER_UNPACKER_TYPE #elif 2 == PACKER_UNPACKER_TYPE
#undef ASCS_HEARTBEAT_INTERVAL #undef ASCS_HEARTBEAT_INTERVAL
#define ASCS_HEARTBEAT_INTERVAL 0 //not support heartbeat #define ASCS_HEARTBEAT_INTERVAL 0 //not support heartbeat
......
...@@ -30,12 +30,12 @@ ...@@ -30,12 +30,12 @@
#define ASCS_MSG_BUFFER_SIZE 1000000 #define ASCS_MSG_BUFFER_SIZE 1000000
#define ASCS_MAX_SEND_BUF (10 * ASCS_MSG_BUFFER_SIZE) #define ASCS_MAX_SEND_BUF (10 * ASCS_MSG_BUFFER_SIZE)
#define ASCS_MAX_RECV_BUF (10 * ASCS_MSG_BUFFER_SIZE) #define ASCS_MAX_RECV_BUF (10 * ASCS_MSG_BUFFER_SIZE)
#define ASCS_DEFAULT_UNPACKER flexible_unpacker<basic_buffer> #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, //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 //it works as the default unpacker for messages <= 4000, otherwise, it works as non_copy_unpacker
#elif 1 == PACKER_UNPACKER_TYPE #elif 1 == PACKER_UNPACKER_TYPE
#define ASCS_DEFAULT_PACKER packer2<unique_buffer<basic_buffer>, basic_buffer, packer<basic_buffer>> #define ASCS_DEFAULT_PACKER packer2<unique_buffer<basic_buffer>, basic_buffer, packer<basic_buffer>>
#define ASCS_DEFAULT_UNPACKER unpacker2<unique_buffer, basic_buffer, flexible_unpacker<basic_buffer>> #define ASCS_DEFAULT_UNPACKER unpacker2<unique_buffer<basic_buffer>, basic_buffer, flexible_unpacker<>>
#elif 2 == PACKER_UNPACKER_TYPE #elif 2 == PACKER_UNPACKER_TYPE
#undef ASCS_HEARTBEAT_INTERVAL #undef ASCS_HEARTBEAT_INTERVAL
#define ASCS_HEARTBEAT_INTERVAL 0 //not support heartbeat #define ASCS_HEARTBEAT_INTERVAL 0 //not support heartbeat
...@@ -164,13 +164,14 @@ protected: ...@@ -164,13 +164,14 @@ protected:
}; };
#if ASCS_HEARTBEAT_INTERVAL > 0 #if ASCS_HEARTBEAT_INTERVAL > 0
typedef server_socket_base<ext::packer, ext::unpacker> normal_socket; typedef server_socket_base<packer<>, unpacker<>> normal_socket;
#else #else
//demonstrate how to open heartbeat function without defining macro ASCS_HEARTBEAT_INTERVAL //demonstrate how to open heartbeat function without defining macro ASCS_HEARTBEAT_INTERVAL
class normal_socket : public server_socket_base<ext::packer<>, ext::unpacker<>> class normal_socket : public server_socket_base<packer<>, unpacker<>>
{ {
public: public:
normal_socket(i_server& server_) : server_socket_base<ext::packer<>, ext::unpacker<>>(server_) {} normal_socket(i_server& server_) : server_socket_base<ext::packer<>, ext::unpacker<>>(server_) {}
//sometime, the default packer brings name conflict with the socket's packer member function, prefix namespace can resolve this conflict.
protected: protected:
//demo client needs heartbeat (macro ASCS_HEARTBEAT_INTERVAL been defined), please note that the interval (here is 5) must be equal to //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: ...@@ -190,7 +191,7 @@ protected:
virtual bool on_accept(object_ctype& socket_ptr) {stop_listen(); return true;} virtual bool on_accept(object_ctype& socket_ptr) {stop_listen(); return true;}
}; };
class short_connection : public server_socket_base<ext::packer<>, ext::unpacker<>> class short_connection : public server_socket_base<packer<>, unpacker<>>
{ {
private: private:
typedef server_socket_base<ext::packer<>, ext::unpacker<>> super; typedef server_socket_base<ext::packer<>, ext::unpacker<>> super;
......
...@@ -143,14 +143,14 @@ public: ...@@ -143,14 +143,14 @@ public:
}; };
//protocol: length + body //protocol: length + body
//T can be unique_buffer<XXXX> or shared_buffer<XXXX>, the latter makes output messages seemingly copyable. //Buffer can be unique_buffer<XXXX> or shared_buffer<XXXX>, the latter makes output messages seemingly copyable.
//C is XXXX or a class that inherit from XXXX (because XXXX can be a virtual interface). //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. //Packer is the real packer who packs messages, which means packer2 is just a wrapper.
template<typename T = unique_buffer<i_buffer>, typename C = string_buffer, typename Packer = packer<>> template<typename Buffer = unique_buffer<i_buffer>, typename T = string_buffer, typename Packer = packer<>>
class packer2 : public i_packer<T> class packer2 : public i_packer<Buffer>
{ {
private: private:
typedef i_packer<T> super; typedef i_packer<Buffer> super;
public: public:
static size_t get_max_msg_size() {return Packer::get_max_msg_size();} static size_t get_max_msg_size() {return Packer::get_max_msg_size();}
...@@ -158,7 +158,7 @@ public: ...@@ -158,7 +158,7 @@ public:
using super::pack_msg; 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) 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); auto str = Packer().pack_msg(pstr, len, num, native);
raw_msg->swap(str); raw_msg->swap(str);
return typename super::msg_type(raw_msg); return typename super::msg_type(raw_msg);
...@@ -170,7 +170,7 @@ public: ...@@ -170,7 +170,7 @@ public:
return false; return false;
auto head_len = packer_helper::pack_header(len); 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); raw_msg->assign((const char*) &head_len, ASCS_HEAD_LEN);
msg_can.emplace_back(raw_msg); msg_can.emplace_back(raw_msg);
msg_can.emplace_back(std::move(msg)); msg_can.emplace_back(std::move(msg));
...@@ -184,7 +184,7 @@ public: ...@@ -184,7 +184,7 @@ public:
return false; return false;
auto head_len = packer_helper::pack_header(len); 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); raw_msg->assign((const char*) &head_len, ASCS_HEAD_LEN);
msg_can.emplace_back(raw_msg); msg_can.emplace_back(raw_msg);
msg_can.emplace_back(std::move(msg1)); msg_can.emplace_back(std::move(msg1));
...@@ -199,7 +199,7 @@ public: ...@@ -199,7 +199,7 @@ public:
return false; return false;
auto head_len = packer_helper::pack_header(len); 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); raw_msg->assign((const char*) &head_len, ASCS_HEAD_LEN);
out.emplace_back(raw_msg); out.emplace_back(raw_msg);
out.splice(std::end(out), in); out.splice(std::end(out), in);
...@@ -208,7 +208,7 @@ public: ...@@ -208,7 +208,7 @@ public:
} }
virtual typename super::msg_type pack_heartbeat() virtual typename super::msg_type pack_heartbeat()
{ {
auto raw_msg = new C(); auto raw_msg = new T();
auto str = Packer().pack_heartbeat(); auto str = Packer().pack_heartbeat();
raw_msg->swap(str); raw_msg->swap(str);
return typename super::msg_type(raw_msg); return typename super::msg_type(raw_msg);
......
...@@ -178,7 +178,7 @@ protected: ...@@ -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, //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. // 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. //T can be std::string or basic_buffer, the latter will not fill its buffer in resize invocation, so is more efficient.
template<typename T = std::string> template<typename T = basic_buffer>
class flexible_unpacker : public i_unpacker<T> class flexible_unpacker : public i_unpacker<T>
{ {
private: private:
...@@ -388,14 +388,14 @@ protected: ...@@ -388,14 +388,14 @@ protected:
}; };
//protocol: length + body //protocol: length + body
//Buffer can be unique_buffer or shared_buffer, the latter makes output messages seemingly copyable. //Buffer can be unique_buffer<XXXX> or shared_buffer<XXXX>, the latter makes output messages seemingly copyable.
//T can be std::string or basic_buffer, and the output message type will be Buffer<T>. //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. //Unpacker can be the default unpacker or flexible_unpacker, which means unpacker2 is just a wrapper.
template<template<typename> class Buffer = shared_buffer, typename T = std::string, typename Unpacker = unpacker<>> template<typename Buffer = shared_buffer<std::string>, typename T = std::string, typename Unpacker = unpacker<>>
class unpacker2 : public i_unpacker<Buffer<T>> class unpacker2 : public i_unpacker<Buffer>
{ {
private: private:
typedef i_unpacker<Buffer<T>> super; typedef i_unpacker<Buffer> super;
public: public:
virtual void stripped(bool stripped_) {super::stripped(stripped_); unpacker_.stripped(stripped_);} virtual void stripped(bool stripped_) {super::stripped(stripped_); unpacker_.stripped(stripped_);}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册