From 06259ce97d5a6c61ec3a71176269ccde0ff22b2b Mon Sep 17 00:00:00 2001 From: Dave Date: Mon, 1 Dec 2014 17:08:58 +0900 Subject: [PATCH 1/6] Fixed compatibility issues with msgpack lib --- src/msgpack/rpc/exception.cc | 19 +- src/msgpack/rpc/transport/base.h | 897 ++++++++++++++++--------------- 2 files changed, 459 insertions(+), 457 deletions(-) diff --git a/src/msgpack/rpc/exception.cc b/src/msgpack/rpc/exception.cc index 6b1c6ec..f95d702 100644 --- a/src/msgpack/rpc/exception.cc +++ b/src/msgpack/rpc/exception.cc @@ -41,15 +41,16 @@ void throw_exception(future_impl* f) { object err = f->error(); - if(err.type == msgpack::type::RAW && - err.via.raw.ptr == TIMEOUT_ERROR_PTR) { - throw timeout_error(); - - } else if(err.type == msgpack::type::RAW && - err.via.raw.ptr == CONNECT_ERROR_PTR) { - throw connect_error(); - - } else if(err.type == msgpack::type::POSITIVE_INTEGER && +// if(err.type == msgpack::type::RAW && +// err.via.raw.ptr == TIMEOUT_ERROR_PTR) { +// throw timeout_error(); +// +// } else if(err.type == msgpack::type::RAW && +// err.via.raw.ptr == CONNECT_ERROR_PTR) { +// throw connect_error(); +// +// } else + if(err.type == msgpack::type::POSITIVE_INTEGER && err.via.u64 == NO_METHOD_ERROR) { throw no_method_error(); diff --git a/src/msgpack/rpc/transport/base.h b/src/msgpack/rpc/transport/base.h index e0446c2..6aabe8a 100644 --- a/src/msgpack/rpc/transport/base.h +++ b/src/msgpack/rpc/transport/base.h @@ -26,463 +26,464 @@ #include "cclog/cclog.h" namespace msgpack { -namespace rpc { -namespace transport { - - + namespace rpc { + namespace transport { + + #ifndef MSGPACK_RPC_STREAM_BUFFER_SIZE #define MSGPACK_RPC_STREAM_BUFFER_SIZE (256*1024) #endif - + #ifndef MSGPACK_RPC_STREAM_RESERVE_SIZE #define MSGPACK_RPC_STREAM_RESERVE_SIZE (32*1024) #endif - + #ifndef MSGPACK_RPC_DGRAM_BUFFER_SIZE #define MSGPACK_RPC_DGRAM_BUFFER_SIZE (64*1024) #endif - -class closed_exception { }; - - -template -class stream_handler : public mp::wavy::handler, public message_sendable { -public: - stream_handler(int fd, loop lo); - ~stream_handler(); - - void remove_handler(); - - mp::shared_ptr get_response_sender(); - - // message_sendable interface - void send_data(sbuffer* sbuf); - void send_data(std::auto_ptr vbufife); - - // mp::wavy::handler interface - void on_read(mp::wavy::event& e); - - void on_message(object msg, auto_zone z); - - void on_request(msgid_t msgid, - object method, object params, auto_zone z) - { - throw msgpack::type_error(); // FIXME - } - - void on_notify( - object method, object params, auto_zone z) - { - throw msgpack::type_error(); // FIXME - } - - void on_response(msgid_t msgid, - object result, object error, auto_zone z) - { - throw msgpack::type_error(); // FIXME - } - -protected: - unpacker m_pac; - loop m_loop; -}; - -template -class dgram_handler : public mp::wavy::handler { -public: - dgram_handler(int fd, loop lo); - ~dgram_handler(); - - void remove_handler(); - - mp::shared_ptr get_response_sender( - const sockaddr* addrbuf, socklen_t addrlen); - - // message_sendable interface - class response_sender; - void send_data(const sockaddr* addrbuf, socklen_t addrlen, sbuffer* sbuf); - void send_data(const sockaddr* addrbuf, socklen_t addrlen, std::auto_ptr vbuf); - - // connected dgram - void send_data(sbuffer* sbuf); - void send_data(std::auto_ptr vbuf); - - // mp::wavy::handler interface - void on_read(mp::wavy::event& e); - - void on_message(object msg, auto_zone z, - const sockaddr* addrbuf, socklen_t addrlen); - - void on_request( - msgid_t msgid, - object method, object params, auto_zone z, - const sockaddr* addrbuf, socklen_t addrlen) - { - throw msgpack::type_error(); // FIXME - } - - void on_notify( - object method, object params, auto_zone z) - { - throw msgpack::type_error(); // FIXME - } - - void on_response(msgid_t msgid, - object result, object error, auto_zone z) - { - throw msgpack::type_error(); // FIXME - } - -private: - loop m_loop; -}; - - -template -inline stream_handler::stream_handler(int fd, loop lo) : - mp::wavy::handler(fd), - m_pac(MSGPACK_RPC_STREAM_BUFFER_SIZE), - m_loop(lo) { } - -template -inline stream_handler::~stream_handler() { } - -template -inline void stream_handler::remove_handler() -{ - m_loop->remove_handler(fd()); -} - - -template -inline dgram_handler::dgram_handler(int fd, loop lo) : - mp::wavy::handler(fd), - m_loop(lo) { } - -template -inline dgram_handler::~dgram_handler() { } - -template -inline void dgram_handler::remove_handler() -{ - m_loop->remove_handler(fd()); -} - - -template -inline void stream_handler::send_data(msgpack::sbuffer* sbuf) -{ - m_loop->write(fd(), sbuf->data(), sbuf->size(), &::free, sbuf->data()); - sbuf->release(); -} - -template -inline void stream_handler::send_data(std::auto_ptr vbuf) -{ - m_loop->writev(fd(), vbuf->vector(), vbuf->vector_size(), vbuf); -} - - -template -inline void dgram_handler::send_data(const sockaddr* addrbuf, socklen_t addrlen, sbuffer* sbuf) -{ - // FIXME fd is non-blocking mode - // FIXME check errno == EAGAIN - sendto(fd(), sbuf->data(), sbuf->size(), 0, addrbuf, addrlen); -} - -template -inline void dgram_handler::send_data(const sockaddr* addrbuf, socklen_t addrlen, std::auto_ptr vbuf) -{ - // FIXME fd is non-blocking mode - // FIXME check errno == EAGAIN - struct msghdr msg; - memset(&msg, 0, sizeof(msg)); - msg.msg_name = const_cast(addrbuf); - msg.msg_namelen = addrlen; - msg.msg_iov = const_cast(vbuf->vector()); - msg.msg_iovlen = vbuf->vector_size(); - sendmsg(fd(), &msg, 0); -} - -template -inline void dgram_handler::send_data(msgpack::sbuffer* sbuf) -{ - //// FIXME? - //m_loop->write(fd(), sbuf->data(), sbuf->size(), &::free, sbuf->data()); - //sbuf->release(); - send(fd(), sbuf->data(), sbuf->size(), 0); -} - -template -inline void dgram_handler::send_data(std::auto_ptr vbuf) -{ - //// FIXME? - //m_loop->writev(fd(), vbuf->vector(), vbuf->vector_size(), z); - struct msghdr msg; - memset(&msg, 0, sizeof(msg)); - msg.msg_iov = const_cast(vbuf->vector()); - msg.msg_iovlen = vbuf->vector_size(); - sendmsg(fd(), &msg, 0); -} - - -template -void stream_handler::on_message(object msg, auto_zone z) -{ - msg_rpc rpc; - msg.convert(&rpc); - - switch(rpc.type) { - case REQUEST: { - msg_request req; - msg.convert(&req); - static_cast(this)->on_request( - req.msgid, req.method, req.param, z); - } - break; - - case RESPONSE: { - msg_response res; - msg.convert(&res); - static_cast(this)->on_response( - res.msgid, res.result, res.error, z); - } - break; - - case NOTIFY: { - msg_notify req; - msg.convert(&req); - static_cast(this)->on_notify( - req.method, req.param, z); - } - break; - - default: - throw msgpack::type_error(); - } -} - - -template -void dgram_handler::on_message(object msg, auto_zone z, - const sockaddr* addrbuf, socklen_t addrlen) -{ - msg_rpc rpc; - msg.convert(&rpc); - - switch(rpc.type) { - case REQUEST: { - msg_request req; - msg.convert(&req); - static_cast(this)->on_request( - req.msgid, req.method, req.param, z, - addrbuf, addrlen); - } - break; - - case RESPONSE: { - msg_response res; - msg.convert(&res); - static_cast(this)->on_response( - res.msgid, res.result, res.error, z); - } - break; - - case NOTIFY: { - msg_notify req; - msg.convert(&req); - static_cast(this)->on_notify( - req.method, req.param, z); - } - break; - - default: - throw msgpack::type_error(); - } -} - - -template -void stream_handler::on_read(mp::wavy::event& e) -try { - while(true) { - if(m_pac.execute()) { - object msg = m_pac.data(); - LOG_TRACE("obj received: ",msg); - auto_zone z( m_pac.release_zone() ); - m_pac.reset(); - - //if(m_pac.nonparsed_size() > 0) { - // e.more(); - //} else { - // e.next(); - //} - //stream_handler::on_message(msg, z); - //return; - - // FIXME - stream_handler::on_message(msg, z); - if(m_pac.nonparsed_size() > 0) { - continue; - } - } - - m_pac.reserve_buffer(MSGPACK_RPC_STREAM_RESERVE_SIZE); - - ssize_t rl = ::read(ident(), m_pac.buffer(), m_pac.buffer_capacity()); - if(rl <= 0) { - if(rl == 0) { throw closed_exception(); } - if(errno == EAGAIN || errno == EINTR) { return; } - else { throw mp::system_error(errno, "read error"); } - } - - m_pac.buffer_consumed(rl); - } - -} catch(msgpack::type_error& ex) { - LOG_WARN("connection: type error"); - e.remove(); - return; -} catch(closed_exception& ex) { - e.remove(); - return; -} catch(std::exception& ex) { - LOG_WARN("connection: ", ex.what()); - e.remove(); - return; -} catch(...) { - LOG_WARN("connection: unknown error"); - e.remove(); - return; -} - - -class scoped_buffer { -public: - scoped_buffer(size_t size) : data((char*)malloc(size)) - { if(data == NULL) { throw std::bad_alloc(); } } - ~scoped_buffer() { ::free(data); } - char* data; - void release() { data = NULL; } -private: - scoped_buffer(); - scoped_buffer(const scoped_buffer&); -}; - -template -void dgram_handler::on_read(mp::wavy::event& e) -try { - scoped_buffer buffer(MSGPACK_RPC_DGRAM_BUFFER_SIZE); - - struct sockaddr_storage addrbuf; - socklen_t addrlen = sizeof(addrbuf); - - ssize_t rl = ::recvfrom(ident(), buffer.data, MSGPACK_RPC_DGRAM_BUFFER_SIZE, - 0, (sockaddr*)&addrbuf, &addrlen); - if(rl <= 0) { - if(rl == 0) { throw closed_exception(); } - if(errno == EAGAIN || errno == EINTR) { return; } - else { throw mp::system_error(errno, "read error"); } - } - - e.next(); // FIXME more()? - - msgpack::unpacked result; - msgpack::unpack(&result, buffer.data, rl); - - result.zone()->push_finalizer(&::free, buffer.data); - buffer.release(); - - dgram_handler::on_message(result.get(), result.zone(), (struct sockaddr*)&addrbuf, addrlen); - -} catch(msgpack::type_error& ex) { - LOG_ERROR("connection: type error"); - e.remove(); - return; -} catch(closed_exception& ex) { - e.remove(); - return; -} catch(std::exception& ex) { - LOG_ERROR("connection: ", ex.what()); - e.remove(); - return; -} catch(...) { - LOG_ERROR("connection: unknown error"); - e.remove(); - return; -} - - -template -mp::shared_ptr inline stream_handler::get_response_sender() -{ - return shared_self >(); -} - - -template -class dgram_handler::response_sender : public message_sendable { -public: - response_sender(mp::shared_ptr > handler, - const sockaddr* addrbuf, socklen_t addrlen); - - ~response_sender(); - - void send_data(sbuffer* sbuf); - void send_data(std::auto_ptr vbuf); - -private: - mp::shared_ptr > m_handler; - struct sockaddr_storage m_addrbuf; - size_t m_addrlen; - -private: - response_sender(); - response_sender(const response_sender&); -}; - -template -dgram_handler::response_sender::response_sender( - mp::shared_ptr > handler, - const sockaddr* addrbuf, socklen_t addrlen) : - m_handler(handler), - m_addrlen(addrlen) -{ - if(addrlen > sizeof(m_addrbuf)) { - throw std::runtime_error("invalid sizeof address"); - } - memcpy((void*)&m_addrbuf, (const void*)addrbuf, addrlen); -} - -template -dgram_handler::response_sender::~response_sender() { } - -template -void dgram_handler::response_sender::send_data(sbuffer* sbuf) -{ - m_handler->send_data((struct sockaddr*)&m_addrbuf, m_addrlen, sbuf); -} - -template -void dgram_handler::response_sender::send_data(std::auto_ptr vbuf) -{ - m_handler->send_data((struct sockaddr*)&m_addrbuf, m_addrlen, vbuf); -} - -template -inline mp::shared_ptr dgram_handler::get_response_sender( - const sockaddr* addrbuf, socklen_t addrlen) -{ - return mp::shared_ptr( - new response_sender( - shared_self >(), - addrbuf, addrlen)); -} - - -} // namespace transport -} // namespace rpc + + class closed_exception { }; + + + template + class stream_handler : public mp::wavy::handler, public message_sendable { + public: + stream_handler(int fd, loop lo); + ~stream_handler(); + + void remove_handler(); + + mp::shared_ptr get_response_sender(); + + // message_sendable interface + void send_data(sbuffer* sbuf); + void send_data(std::auto_ptr vbufife); + + // mp::wavy::handler interface + void on_read(mp::wavy::event& e); + + void on_message(object msg, auto_zone z); + + void on_request(msgid_t msgid, + object method, object params, auto_zone z) + { + throw msgpack::type_error(); // FIXME + } + + void on_notify( + object method, object params, auto_zone z) + { + throw msgpack::type_error(); // FIXME + } + + void on_response(msgid_t msgid, + object result, object error, auto_zone z) + { + throw msgpack::type_error(); // FIXME + } + + protected: + unpacker m_pac; + loop m_loop; + }; + + template + class dgram_handler : public mp::wavy::handler { + public: + dgram_handler(int fd, loop lo); + ~dgram_handler(); + + void remove_handler(); + + mp::shared_ptr get_response_sender( + const sockaddr* addrbuf, socklen_t addrlen); + + // message_sendable interface + class response_sender; + void send_data(const sockaddr* addrbuf, socklen_t addrlen, sbuffer* sbuf); + void send_data(const sockaddr* addrbuf, socklen_t addrlen, std::auto_ptr vbuf); + + // connected dgram + void send_data(sbuffer* sbuf); + void send_data(std::auto_ptr vbuf); + + // mp::wavy::handler interface + void on_read(mp::wavy::event& e); + + void on_message(object msg, auto_zone z, + const sockaddr* addrbuf, socklen_t addrlen); + + void on_request( + msgid_t msgid, + object method, object params, auto_zone z, + const sockaddr* addrbuf, socklen_t addrlen) + { + throw msgpack::type_error(); // FIXME + } + + void on_notify( + object method, object params, auto_zone z) + { + throw msgpack::type_error(); // FIXME + } + + void on_response(msgid_t msgid, + object result, object error, auto_zone z) + { + throw msgpack::type_error(); // FIXME + } + + private: + loop m_loop; + }; + + inline bool default_reference_func(type::object_type /*type*/, std::size_t /*len*/, void*) { return true; } + + template + inline stream_handler::stream_handler(int fd, loop lo) : + mp::wavy::handler(fd), + m_pac(default_reference_func, nullptr, MSGPACK_RPC_STREAM_BUFFER_SIZE), + m_loop(lo) { } + + template + inline stream_handler::~stream_handler() { } + + template + inline void stream_handler::remove_handler() + { + m_loop->remove_handler(fd()); + } + + + template + inline dgram_handler::dgram_handler(int fd, loop lo) : + mp::wavy::handler(fd), + m_loop(lo) { } + + template + inline dgram_handler::~dgram_handler() { } + + template + inline void dgram_handler::remove_handler() + { + m_loop->remove_handler(fd()); + } + + + template + inline void stream_handler::send_data(msgpack::sbuffer* sbuf) + { + m_loop->write(fd(), sbuf->data(), sbuf->size(), &::free, sbuf->data()); + sbuf->release(); + } + + template + inline void stream_handler::send_data(std::auto_ptr vbuf) + { + m_loop->writev(fd(), vbuf->vector(), vbuf->vector_size(), vbuf); + } + + + template + inline void dgram_handler::send_data(const sockaddr* addrbuf, socklen_t addrlen, sbuffer* sbuf) + { + // FIXME fd is non-blocking mode + // FIXME check errno == EAGAIN + sendto(fd(), sbuf->data(), sbuf->size(), 0, addrbuf, addrlen); + } + + template + inline void dgram_handler::send_data(const sockaddr* addrbuf, socklen_t addrlen, std::auto_ptr vbuf) + { + // FIXME fd is non-blocking mode + // FIXME check errno == EAGAIN + struct msghdr msg; + memset(&msg, 0, sizeof(msg)); + msg.msg_name = const_cast(addrbuf); + msg.msg_namelen = addrlen; + msg.msg_iov = const_cast(vbuf->vector()); + msg.msg_iovlen = vbuf->vector_size(); + sendmsg(fd(), &msg, 0); + } + + template + inline void dgram_handler::send_data(msgpack::sbuffer* sbuf) + { + //// FIXME? + //m_loop->write(fd(), sbuf->data(), sbuf->size(), &::free, sbuf->data()); + //sbuf->release(); + send(fd(), sbuf->data(), sbuf->size(), 0); + } + + template + inline void dgram_handler::send_data(std::auto_ptr vbuf) + { + //// FIXME? + //m_loop->writev(fd(), vbuf->vector(), vbuf->vector_size(), z); + struct msghdr msg; + memset(&msg, 0, sizeof(msg)); + msg.msg_iov = const_cast(vbuf->vector()); + msg.msg_iovlen = vbuf->vector_size(); + sendmsg(fd(), &msg, 0); + } + + + template + void stream_handler::on_message(object msg, auto_zone z) + { + msg_rpc rpc; + msg.convert(&rpc); + + switch(rpc.type) { + case REQUEST: { + msg_request req; + msg.convert(&req); + static_cast(this)->on_request( + req.msgid, req.method, req.param, z); + } + break; + + case RESPONSE: { + msg_response res; + msg.convert(&res); + static_cast(this)->on_response( + res.msgid, res.result, res.error, z); + } + break; + + case NOTIFY: { + msg_notify req; + msg.convert(&req); + static_cast(this)->on_notify( + req.method, req.param, z); + } + break; + + default: + throw msgpack::type_error(); + } + } + + + template + void dgram_handler::on_message(object msg, auto_zone z, + const sockaddr* addrbuf, socklen_t addrlen) + { + msg_rpc rpc; + msg.convert(&rpc); + + switch(rpc.type) { + case REQUEST: { + msg_request req; + msg.convert(&req); + static_cast(this)->on_request( + req.msgid, req.method, req.param, z, + addrbuf, addrlen); + } + break; + + case RESPONSE: { + msg_response res; + msg.convert(&res); + static_cast(this)->on_response( + res.msgid, res.result, res.error, z); + } + break; + + case NOTIFY: { + msg_notify req; + msg.convert(&req); + static_cast(this)->on_notify( + req.method, req.param, z); + } + break; + + default: + throw msgpack::type_error(); + } + } + + + template + void stream_handler::on_read(mp::wavy::event& e) + try { + while(true) { + if(m_pac.execute()) { + object msg = m_pac.data(); + LOG_TRACE("obj received: ",msg); + auto_zone z( m_pac.release_zone() ); + m_pac.reset(); + + //if(m_pac.nonparsed_size() > 0) { + // e.more(); + //} else { + // e.next(); + //} + //stream_handler::on_message(msg, z); + //return; + + // FIXME + stream_handler::on_message(msg, z); + if(m_pac.nonparsed_size() > 0) { + continue; + } + } + + m_pac.reserve_buffer(MSGPACK_RPC_STREAM_RESERVE_SIZE); + + ssize_t rl = ::read(ident(), m_pac.buffer(), m_pac.buffer_capacity()); + if(rl <= 0) { + if(rl == 0) { throw closed_exception(); } + if(errno == EAGAIN || errno == EINTR) { return; } + else { throw mp::system_error(errno, "read error"); } + } + + m_pac.buffer_consumed(rl); + } + + } catch(msgpack::type_error& ex) { + LOG_WARN("connection: type error"); + e.remove(); + return; + } catch(closed_exception& ex) { + e.remove(); + return; + } catch(std::exception& ex) { + LOG_WARN("connection: ", ex.what()); + e.remove(); + return; + } catch(...) { + LOG_WARN("connection: unknown error"); + e.remove(); + return; + } + + + class scoped_buffer { + public: + scoped_buffer(size_t size) : data((char*)malloc(size)) + { if(data == NULL) { throw std::bad_alloc(); } } + ~scoped_buffer() { ::free(data); } + char* data; + void release() { data = NULL; } + private: + scoped_buffer(); + scoped_buffer(const scoped_buffer&); + }; + + template + void dgram_handler::on_read(mp::wavy::event& e) + try { + scoped_buffer buffer(MSGPACK_RPC_DGRAM_BUFFER_SIZE); + + struct sockaddr_storage addrbuf; + socklen_t addrlen = sizeof(addrbuf); + + ssize_t rl = ::recvfrom(ident(), buffer.data, MSGPACK_RPC_DGRAM_BUFFER_SIZE, + 0, (sockaddr*)&addrbuf, &addrlen); + if(rl <= 0) { + if(rl == 0) { throw closed_exception(); } + if(errno == EAGAIN || errno == EINTR) { return; } + else { throw mp::system_error(errno, "read error"); } + } + + e.next(); // FIXME more()? + + msgpack::unpacked result; + msgpack::unpack(&result, buffer.data, rl); + + result.zone()->push_finalizer(&::free, buffer.data); + buffer.release(); + + dgram_handler::on_message(result.get(), result.zone(), (struct sockaddr*)&addrbuf, addrlen); + + } catch(msgpack::type_error& ex) { + LOG_ERROR("connection: type error"); + e.remove(); + return; + } catch(closed_exception& ex) { + e.remove(); + return; + } catch(std::exception& ex) { + LOG_ERROR("connection: ", ex.what()); + e.remove(); + return; + } catch(...) { + LOG_ERROR("connection: unknown error"); + e.remove(); + return; + } + + + template + mp::shared_ptr inline stream_handler::get_response_sender() + { + return shared_self >(); + } + + + template + class dgram_handler::response_sender : public message_sendable { + public: + response_sender(mp::shared_ptr > handler, + const sockaddr* addrbuf, socklen_t addrlen); + + ~response_sender(); + + void send_data(sbuffer* sbuf); + void send_data(std::auto_ptr vbuf); + + private: + mp::shared_ptr > m_handler; + struct sockaddr_storage m_addrbuf; + size_t m_addrlen; + + private: + response_sender(); + response_sender(const response_sender&); + }; + + template + dgram_handler::response_sender::response_sender( + mp::shared_ptr > handler, + const sockaddr* addrbuf, socklen_t addrlen) : + m_handler(handler), + m_addrlen(addrlen) + { + if(addrlen > sizeof(m_addrbuf)) { + throw std::runtime_error("invalid sizeof address"); + } + memcpy((void*)&m_addrbuf, (const void*)addrbuf, addrlen); + } + + template + dgram_handler::response_sender::~response_sender() { } + + template + void dgram_handler::response_sender::send_data(sbuffer* sbuf) + { + m_handler->send_data((struct sockaddr*)&m_addrbuf, m_addrlen, sbuf); + } + + template + void dgram_handler::response_sender::send_data(std::auto_ptr vbuf) + { + m_handler->send_data((struct sockaddr*)&m_addrbuf, m_addrlen, vbuf); + } + + template + inline mp::shared_ptr dgram_handler::get_response_sender( + const sockaddr* addrbuf, socklen_t addrlen) + { + return mp::shared_ptr( + new response_sender( + shared_self >(), + addrbuf, addrlen)); + } + + + } // namespace transport + } // namespace rpc } // namespace msgpack #endif /* transport/base.h */ From 97bd8fbd9ddcf4079eaee095ce78c7167d16f74e Mon Sep 17 00:00:00 2001 From: Dave Date: Mon, 1 Dec 2014 17:21:37 +0900 Subject: [PATCH 2/6] updated compile instruction --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f61278a..1d1306e 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,8 @@ Configure and install in the usual way: $ make $ sudo make install +Configuration for OS X: + $ ./configure CXXFLAGS='-DMP_UNORDERED_MAP_BOOST -DMP_FUNCTIONAL_BOOST -DMP_MEMORY_BOOST -O3 -Wall -I/usr/local/include -g -DCCLOG_LEVEL=10' --with-msgpack=/usr/local ## Usage From d07d1368b00475b8f1533cf9d46005d212650af1 Mon Sep 17 00:00:00 2001 From: Dave Date: Tue, 2 Dec 2014 12:00:29 +0900 Subject: [PATCH 3/6] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1d1306e..e09d03f 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ Configure and install in the usual way: $ sudo make install Configuration for OS X: + $ ./configure CXXFLAGS='-DMP_UNORDERED_MAP_BOOST -DMP_FUNCTIONAL_BOOST -DMP_MEMORY_BOOST -O3 -Wall -I/usr/local/include -g -DCCLOG_LEVEL=10' --with-msgpack=/usr/local ## Usage From 30c227e175d4efc06d3e13216a2c0d794c1f81d4 Mon Sep 17 00:00:00 2001 From: Dave Date: Sat, 13 Dec 2014 01:02:44 +0900 Subject: [PATCH 4/6] C++11 compat --- src/msgpack/rpc/future.cc | 2 +- src/msgpack/rpc/future.h | 4 +-- src/msgpack/rpc/message_sendable.h | 4 +-- src/msgpack/rpc/protocol.h | 36 ++++++++++++++++++++++--- src/msgpack/rpc/request.cc | 4 +-- src/msgpack/rpc/request.h | 6 ++--- src/msgpack/rpc/request_impl.h | 6 ++--- src/msgpack/rpc/server.cc | 4 +-- src/msgpack/rpc/server_impl.h | 2 +- src/msgpack/rpc/session.cc | 18 ++++++------- src/msgpack/rpc/session.h | 12 ++++----- src/msgpack/rpc/session_impl.h | 6 ++--- src/msgpack/rpc/session_pool_impl.h | 2 +- src/msgpack/rpc/transport.h | 16 +++++------ src/msgpack/rpc/transport/base.h | 42 +++++++++++++++-------------- src/msgpack/rpc/transport/tcp.cc | 24 +++++++++-------- src/msgpack/rpc/transport/tcp.h | 4 +-- src/msgpack/rpc/transport/udp.cc | 20 +++++++------- src/msgpack/rpc/transport/udp.h | 4 +-- src/msgpack/rpc/transport/unix.cc | 20 +++++++------- src/msgpack/rpc/transport/unix.h | 4 +-- src/msgpack/rpc/types.h | 2 +- 22 files changed, 137 insertions(+), 105 deletions(-) diff --git a/src/msgpack/rpc/future.cc b/src/msgpack/rpc/future.cc index 5488d5a..093f3ae 100644 --- a/src/msgpack/rpc/future.cc +++ b/src/msgpack/rpc/future.cc @@ -94,7 +94,7 @@ void future_impl::set_result(object result, object error, auto_zone z) mp::pthread_scoped_lock lk(m_mutex); m_result = result; m_error = error; - m_zone = z; + m_zone = std::move(z); m_session.reset(); m_cond.broadcast(); diff --git a/src/msgpack/rpc/future.h b/src/msgpack/rpc/future.h index e2e8d37..ad27b45 100644 --- a/src/msgpack/rpc/future.h +++ b/src/msgpack/rpc/future.h @@ -124,7 +124,7 @@ template T future::get(auto_zone* z) { msgpack::object obj = get_impl(); - *z = zone(); + *z = std::move(zone()); return obj.as(); } @@ -132,7 +132,7 @@ template <> inline void future::get(auto_zone* z) { msgpack::object obj = get_impl(); - *z = zone(); + *z = std::move(zone()); obj.as(); } diff --git a/src/msgpack/rpc/message_sendable.h b/src/msgpack/rpc/message_sendable.h index 5e918d7..9913821 100644 --- a/src/msgpack/rpc/message_sendable.h +++ b/src/msgpack/rpc/message_sendable.h @@ -25,7 +25,7 @@ namespace rpc { typedef with_shared_zone vreflife; -typedef std::auto_ptr auto_vreflife; +typedef std::unique_ptr auto_vreflife; class message_sendable { @@ -34,7 +34,7 @@ class message_sendable { virtual ~message_sendable() { } virtual void send_data(sbuffer* sbuf) = 0; - virtual void send_data(auto_vreflife vbuf) = 0; + virtual void send_data(auto_vreflife vbuf /**/) = 0; }; typedef mp::shared_ptr shared_message_sendable; diff --git a/src/msgpack/rpc/protocol.h b/src/msgpack/rpc/protocol.h index 6937d6b..9066eac 100644 --- a/src/msgpack/rpc/protocol.h +++ b/src/msgpack/rpc/protocol.h @@ -37,7 +37,35 @@ static const message_type_t NOTIFY = 2; static const error_type_t NO_METHOD_ERROR = 0x01; static const error_type_t ARGUMENT_ERROR = 0x02; +//The following tuple_type struct are imported from msgpack C++03 adapters (for C++11 compat) +template +struct tuple_type { + typedef T type; + typedef T value_type; + typedef T& reference; + typedef const T& const_reference; + typedef const T& transparent_reference; +}; + +template +struct tuple_type { + typedef T type; + typedef T& value_type; + typedef T& reference; + typedef const T& const_reference; + typedef T& transparent_reference; +}; + +template +struct tuple_type { + typedef T type; + typedef T& value_type; + typedef T& reference; + typedef const T& const_reference; + typedef const T& transparent_reference; +}; + struct msg_rpc { msg_rpc() { } @@ -58,7 +86,7 @@ struct msg_request { msg_request( Method method, - typename msgpack::type::tuple_type::transparent_reference param, + typename tuple_type::transparent_reference param, msgid_t msgid) : type(REQUEST), msgid(msgid), @@ -80,8 +108,8 @@ struct msg_response { msgid(0) { } msg_response( - typename msgpack::type::tuple_type::transparent_reference result, - typename msgpack::type::tuple_type::transparent_reference error, + typename tuple_type::transparent_reference result, + typename tuple_type::transparent_reference error, msgid_t msgid) : type(RESPONSE), msgid(msgid), @@ -103,7 +131,7 @@ struct msg_notify { msg_notify( Method method, - typename msgpack::type::tuple_type::transparent_reference param) : + typename tuple_type::transparent_reference param) : type(NOTIFY), method(method), param(param) { } diff --git a/src/msgpack/rpc/request.cc b/src/msgpack/rpc/request.cc index 0ef1f9e..09e9dd0 100644 --- a/src/msgpack/rpc/request.cc +++ b/src/msgpack/rpc/request.cc @@ -46,9 +46,9 @@ void request::send_data(sbuffer* sbuf) m_pimpl->send_data(sbuf); } -void request::send_data(std::auto_ptr > vbuf) +void request::send_data(std::unique_ptr > vbuf /**/) { - m_pimpl->send_data(vbuf); + m_pimpl->send_data(std::move(vbuf)); } auto_zone& request::zone() diff --git a/src/msgpack/rpc/request.h b/src/msgpack/rpc/request.h index 5b53c9b..3f05a7f 100644 --- a/src/msgpack/rpc/request.h +++ b/src/msgpack/rpc/request.h @@ -79,7 +79,7 @@ class request { uint32_t get_msgid() const; void send_data(sbuffer* sbuf); - void send_data(std::auto_ptr > vbuf); + void send_data(std::unique_ptr > vbuf /**/); private: shared_request m_pimpl; @@ -130,12 +130,12 @@ inline void request::call(Result& res, Error& err, shared_zone z) { if(is_sent()) { return; } - std::auto_ptr > vbuf( + std::unique_ptr > vbuf( new with_shared_zone(z)); msg_response msgres(res, err, get_msgid()); msgpack::pack(*vbuf, msgres); - send_data(vbuf); + send_data(std::move(vbuf)); } template diff --git a/src/msgpack/rpc/request_impl.h b/src/msgpack/rpc/request_impl.h index a75d207..85dc3e9 100644 --- a/src/msgpack/rpc/request_impl.h +++ b/src/msgpack/rpc/request_impl.h @@ -30,7 +30,7 @@ class request_impl { request_impl(shared_message_sendable ms, msgid_t msgid, object method, object params, auto_zone z) : m_ms(ms), m_msgid(msgid), - m_method(method), m_params(params), m_zone(z) { } + m_method(method), m_params(params), m_zone(std::move(z)) { } ~request_impl() { } @@ -45,11 +45,11 @@ class request_impl { return !m_ms; } - void send_data(auto_vreflife vbuf) + void send_data(auto_vreflife vbuf /**/) { shared_message_sendable ms = m_ms; if(!ms) { return; } - ms->send_data(vbuf); + ms->send_data(std::move(vbuf)); m_ms.reset(); } diff --git a/src/msgpack/rpc/server.cc b/src/msgpack/rpc/server.cc index b2f8e93..8847896 100644 --- a/src/msgpack/rpc/server.cc +++ b/src/msgpack/rpc/server.cc @@ -56,7 +56,7 @@ void server_impl::on_request( { shared_request sr(new request_impl( ms, msgid, - method, params, z)); + method, params, std::move(z))); m_dp->dispatch(request(sr)); } @@ -65,7 +65,7 @@ void server_impl::on_notify( { shared_request sr(new request_impl( shared_message_sendable(), 0, - method, params, z)); + method, params, std::move(z))); m_dp->dispatch(request(sr)); } diff --git a/src/msgpack/rpc/server_impl.h b/src/msgpack/rpc/server_impl.h index 9644c25..d46cd62 100644 --- a/src/msgpack/rpc/server_impl.h +++ b/src/msgpack/rpc/server_impl.h @@ -47,7 +47,7 @@ class server_impl : public session_pool_impl { private: dispatcher* m_dp; - std::auto_ptr m_stran; + std::unique_ptr m_stran; private: server_impl(); diff --git a/src/msgpack/rpc/session.cc b/src/msgpack/rpc/session.cc index af7d6f7..59a7f6a 100644 --- a/src/msgpack/rpc/session.cc +++ b/src/msgpack/rpc/session.cc @@ -59,13 +59,13 @@ future session_impl::send_request_impl(msgid_t msgid, sbuffer* sbuf) return future(f); } -future session_impl::send_request_impl(msgid_t msgid, auto_vreflife vbuf) +future session_impl::send_request_impl(msgid_t msgid, auto_vreflife vbuf /**/) { LOG_DEBUG("sending... msgid=",msgid); shared_future f(new future_impl(shared_from_this(), m_loop)); m_reqtable.insert(msgid, f); - m_tran->send_data(vbuf); + m_tran->send_data(std::move(vbuf)); return future(f); } @@ -75,9 +75,9 @@ void session_impl::send_notify_impl(sbuffer* sbuf) m_tran->send_data(sbuf); } -void session_impl::send_notify_impl(auto_vreflife vbuf) +void session_impl::send_notify_impl(auto_vreflife vbuf /**/) { - m_tran->send_data(vbuf); + m_tran->send_data(std::move(vbuf)); } msgid_t session_impl::next_msgid() @@ -127,7 +127,7 @@ void session_impl::on_response(msgid_t msgid, LOG_DEBUG("no entry on request table for msgid=",msgid); return; } - f->set_result(result, error, z); + f->set_result(result, error, std::move(z)); } @@ -146,8 +146,8 @@ void session::set_timeout(unsigned int sec) unsigned int session::get_timeout() const { return m_pimpl->get_timeout(); } -future session::send_request_impl(msgid_t msgid, std::auto_ptr > vbuf) - { return m_pimpl->send_request_impl(msgid, vbuf); } +future session::send_request_impl(msgid_t msgid, std::unique_ptr > vbuf /**/) + { return m_pimpl->send_request_impl(msgid, std::move(vbuf)); } future session::send_request_impl(msgid_t msgid, sbuffer* sbuf) { return m_pimpl->send_request_impl(msgid, sbuf); } @@ -155,8 +155,8 @@ future session::send_request_impl(msgid_t msgid, sbuffer* sbuf) void session::send_notify_impl(sbuffer* sbuf) { return m_pimpl->send_notify_impl(sbuf); } -void session::send_notify_impl(std::auto_ptr > vbuf) - { return m_pimpl->send_notify_impl(vbuf); } +void session::send_notify_impl(std::unique_ptr > vbuf /**/) + { return m_pimpl->send_notify_impl(std::move(vbuf)); } msgid_t session::next_msgid() { return m_pimpl->next_msgid(); } diff --git a/src/msgpack/rpc/session.h b/src/msgpack/rpc/session.h index 4330da6..0640090 100644 --- a/src/msgpack/rpc/session.h +++ b/src/msgpack/rpc/session.h @@ -49,14 +49,14 @@ class session : public caller { const Parameter& param, shared_zone msglife); future send_request_impl(msgid_t msgid, sbuffer* sbuf); - future send_request_impl(msgid_t msgid, std::auto_ptr > vbuf); + future send_request_impl(msgid_t msgid, std::unique_ptr > vbuf /**/); template void send_notify(Method method, const Parameter& param, shared_zone msglife); void send_notify_impl(sbuffer* sbuf); - void send_notify_impl(std::auto_ptr > vbuf); + void send_notify_impl(std::unique_ptr > vbuf /**/); friend class caller; @@ -79,10 +79,10 @@ future session::send_request(Method method, msg_request msgreq(method, param, msgid); if(msglife) { - std::auto_ptr > vbuf( + std::unique_ptr > vbuf( new with_shared_zone(msglife)); msgpack::pack(*vbuf, msgreq); - return send_request_impl(msgid, vbuf); + return send_request_impl(msgid, std::move(vbuf)); } else { msgpack::sbuffer sbuf; @@ -98,10 +98,10 @@ void session::send_notify(Method method, msg_notify msgreq(method, param); if(msglife) { - std::auto_ptr > vbuf( + std::unique_ptr > vbuf( new with_shared_zone(msglife)); msgpack::pack(*vbuf, msgreq); - return send_notify_impl(vbuf); + return send_notify_impl(std::move(vbuf)); } else { msgpack::sbuffer sbuf; diff --git a/src/msgpack/rpc/session_impl.h b/src/msgpack/rpc/session_impl.h index 4722e19..2e8e1d4 100644 --- a/src/msgpack/rpc/session_impl.h +++ b/src/msgpack/rpc/session_impl.h @@ -64,10 +64,10 @@ class session_impl : public mp::enable_shared_from_this { public: future send_request_impl(msgid_t msgid, sbuffer* sbuf); - future send_request_impl(msgid_t msgid, auto_vreflife vbuf); + future send_request_impl(msgid_t msgid, auto_vreflife vbuf /**/); void send_notify_impl(sbuffer* sbuf); - void send_notify_impl(auto_vreflife vbuf); + void send_notify_impl(auto_vreflife vbuf /**/); public: void on_response(msgid_t msgid, @@ -83,7 +83,7 @@ class session_impl : public mp::enable_shared_from_this { loop m_loop; - std::auto_ptr m_tran; + std::unique_ptr m_tran; msgid_t m_msgid_rr; reqtable m_reqtable; diff --git a/src/msgpack/rpc/session_pool_impl.h b/src/msgpack/rpc/session_pool_impl.h index 62d41c1..fa02c4f 100644 --- a/src/msgpack/rpc/session_pool_impl.h +++ b/src/msgpack/rpc/session_pool_impl.h @@ -67,7 +67,7 @@ class session_pool_impl : public mp::enable_shared_from_this loop m_loop; - std::auto_ptr m_builder; + std::unique_ptr m_builder; private: session_pool_impl(const session_pool_impl&); diff --git a/src/msgpack/rpc/transport.h b/src/msgpack/rpc/transport.h index 62e3bf3..b069e1c 100644 --- a/src/msgpack/rpc/transport.h +++ b/src/msgpack/rpc/transport.h @@ -35,13 +35,13 @@ class builder { builder() : m_timeout(30) { } virtual ~builder() { } - virtual std::auto_ptr build( + virtual std::unique_ptr build( session_impl* s, const address& addr) const = 0; template class base; - virtual std::auto_ptr copy() const = 0; + virtual std::unique_ptr copy() const = 0; public: void set_timeout(unsigned int sec) @@ -58,31 +58,31 @@ class listener { public: virtual ~listener() { } - virtual std::auto_ptr listen( + virtual std::unique_ptr listen( server_impl* svr) const = 0; template class base; - virtual std::auto_ptr copy() const = 0; + virtual std::unique_ptr copy() const = 0; }; template class builder::base : public builder { public: - std::auto_ptr copy() const + std::unique_ptr copy() const { - return std::auto_ptr(new IMPL(*static_cast(this))); + return std::unique_ptr(new IMPL(*static_cast(this))); } }; template class listener::base : public listener { public: - std::auto_ptr copy() const + std::unique_ptr copy() const { - return std::auto_ptr(new IMPL(*static_cast(this))); + return std::unique_ptr(new IMPL(*static_cast(this))); } }; diff --git a/src/msgpack/rpc/transport/base.h b/src/msgpack/rpc/transport/base.h index 6aabe8a..f7164ef 100644 --- a/src/msgpack/rpc/transport/base.h +++ b/src/msgpack/rpc/transport/base.h @@ -57,7 +57,7 @@ namespace msgpack { // message_sendable interface void send_data(sbuffer* sbuf); - void send_data(std::auto_ptr vbufife); + void send_data(std::unique_ptr vbufife); // mp::wavy::handler interface void on_read(mp::wavy::event& e); @@ -101,11 +101,11 @@ namespace msgpack { // message_sendable interface class response_sender; void send_data(const sockaddr* addrbuf, socklen_t addrlen, sbuffer* sbuf); - void send_data(const sockaddr* addrbuf, socklen_t addrlen, std::auto_ptr vbuf); + void send_data(const sockaddr* addrbuf, socklen_t addrlen, std::unique_ptr vbuf); // connected dgram void send_data(sbuffer* sbuf); - void send_data(std::auto_ptr vbuf); + void send_data(std::unique_ptr vbuf); // mp::wavy::handler interface void on_read(mp::wavy::event& e); @@ -178,9 +178,11 @@ namespace msgpack { } template - inline void stream_handler::send_data(std::auto_ptr vbuf) + inline void stream_handler::send_data(std::unique_ptr vbuf) { - m_loop->writev(fd(), vbuf->vector(), vbuf->vector_size(), vbuf); + std::auto_ptr vbuf_auto = std::auto_ptr(vbuf.release()); + + m_loop->writev(fd(), vbuf->vector(), vbuf->vector_size(), vbuf_auto); } @@ -193,7 +195,7 @@ namespace msgpack { } template - inline void dgram_handler::send_data(const sockaddr* addrbuf, socklen_t addrlen, std::auto_ptr vbuf) + inline void dgram_handler::send_data(const sockaddr* addrbuf, socklen_t addrlen, std::unique_ptr vbuf) { // FIXME fd is non-blocking mode // FIXME check errno == EAGAIN @@ -216,10 +218,10 @@ namespace msgpack { } template - inline void dgram_handler::send_data(std::auto_ptr vbuf) + inline void dgram_handler::send_data(std::unique_ptr vbuf) { //// FIXME? - //m_loop->writev(fd(), vbuf->vector(), vbuf->vector_size(), z); + //m_loop->writev(fd(), vbuf->vector(), vbuf->vector_size(), std::move(z)); struct msghdr msg; memset(&msg, 0, sizeof(msg)); msg.msg_iov = const_cast(vbuf->vector()); @@ -239,7 +241,7 @@ namespace msgpack { msg_request req; msg.convert(&req); static_cast(this)->on_request( - req.msgid, req.method, req.param, z); + req.msgid, req.method, req.param, std::move(z)); } break; @@ -247,7 +249,7 @@ namespace msgpack { msg_response res; msg.convert(&res); static_cast(this)->on_response( - res.msgid, res.result, res.error, z); + res.msgid, res.result, res.error, std::move(z)); } break; @@ -255,7 +257,7 @@ namespace msgpack { msg_notify req; msg.convert(&req); static_cast(this)->on_notify( - req.method, req.param, z); + req.method, req.param, std::move(z)); } break; @@ -277,7 +279,7 @@ namespace msgpack { msg_request req; msg.convert(&req); static_cast(this)->on_request( - req.msgid, req.method, req.param, z, + req.msgid, req.method, req.param, std::move(z), addrbuf, addrlen); } break; @@ -286,7 +288,7 @@ namespace msgpack { msg_response res; msg.convert(&res); static_cast(this)->on_response( - res.msgid, res.result, res.error, z); + res.msgid, res.result, res.error, std::move(z)); } break; @@ -294,7 +296,7 @@ namespace msgpack { msg_notify req; msg.convert(&req); static_cast(this)->on_notify( - req.method, req.param, z); + req.method, req.param, std::move(z)); } break; @@ -319,11 +321,11 @@ namespace msgpack { //} else { // e.next(); //} - //stream_handler::on_message(msg, z); + //stream_handler::on_message(msg, std::move(z)); //return; // FIXME - stream_handler::on_message(msg, z); + stream_handler::on_message(msg, std::move(z)); if(m_pac.nonparsed_size() > 0) { continue; } @@ -395,7 +397,7 @@ namespace msgpack { result.zone()->push_finalizer(&::free, buffer.data); buffer.release(); - dgram_handler::on_message(result.get(), result.zone(), (struct sockaddr*)&addrbuf, addrlen); + dgram_handler::on_message(result.get(), std::move(result.zone()), (struct sockaddr*)&addrbuf, addrlen); } catch(msgpack::type_error& ex) { LOG_ERROR("connection: type error"); @@ -431,7 +433,7 @@ namespace msgpack { ~response_sender(); void send_data(sbuffer* sbuf); - void send_data(std::auto_ptr vbuf); + void send_data(std::unique_ptr vbuf); private: mp::shared_ptr > m_handler; @@ -466,9 +468,9 @@ namespace msgpack { } template - void dgram_handler::response_sender::send_data(std::auto_ptr vbuf) + void dgram_handler::response_sender::send_data(std::unique_ptr vbuf) { - m_handler->send_data((struct sockaddr*)&m_addrbuf, m_addrlen, vbuf); + m_handler->send_data((struct sockaddr*)&m_addrbuf, m_addrlen, std::move(vbuf)); } template diff --git a/src/msgpack/rpc/transport/tcp.cc b/src/msgpack/rpc/transport/tcp.cc index 144bd66..3ea3d2d 100644 --- a/src/msgpack/rpc/transport/tcp.cc +++ b/src/msgpack/rpc/transport/tcp.cc @@ -68,7 +68,7 @@ class client_transport : public rpc::client_transport { public: void send_data(sbuffer* sbuf); - void send_data(auto_vreflife vbuf); + void send_data(auto_vreflife vbuf /**/); private: typedef std::vector sockpool_t; @@ -124,7 +124,7 @@ void client_socket::on_response(msgid_t msgid, if(!s) { throw closed_exception(); } - s->on_response(msgid, result, error, z); + s->on_response(msgid, result, error, std::move(z)); } @@ -264,7 +264,7 @@ void client_transport::send_data(sbuffer* sbuf) } } -void client_transport::send_data(auto_vreflife vbuf) +void client_transport::send_data(auto_vreflife vbuf /**/) { // FIXME if(!m_session->get_loop_ref()->is_running()) { @@ -278,11 +278,13 @@ void client_transport::send_data(auto_vreflife vbuf) ref->connecting = 1; } ref->pending_xf.push_writev(vbuf->vector(), vbuf->vector_size()); - ref->pending_xf.push_finalize(vbuf); + + std::auto_ptr vbuf_auto = std::auto_ptr(vbuf.release()); + ref->pending_xf.push_finalize(vbuf_auto); } else { // FIXME pesudo connecting load balance client_socket* sock = ref->sockpool[0]; - sock->send_data(vbuf); + sock->send_data(std::move(vbuf)); } } @@ -341,7 +343,7 @@ void server_socket::on_request( if(!svr) { throw closed_exception(); } - svr->on_request(get_response_sender(), msgid, method, params, z); + svr->on_request(get_response_sender(), msgid, method, params, std::move(z)); } void server_socket::on_notify( @@ -351,7 +353,7 @@ void server_socket::on_notify( if(!svr) { throw closed_exception(); } - svr->on_notify(method, params, z); + svr->on_notify(method, params, std::move(z)); } @@ -426,9 +428,9 @@ tcp_builder::tcp_builder() : tcp_builder::~tcp_builder() { } -std::auto_ptr tcp_builder::build(session_impl* s, const address& addr) const +std::unique_ptr tcp_builder::build(session_impl* s, const address& addr) const { - return std::auto_ptr( + return std::unique_ptr( new transport::tcp::client_transport(s, addr, *this)); } @@ -441,9 +443,9 @@ tcp_listener::tcp_listener(const address& addr) : tcp_listener::~tcp_listener() { } -std::auto_ptr tcp_listener::listen(server_impl* svr) const +std::unique_ptr tcp_listener::listen(server_impl* svr) const { - return std::auto_ptr( + return std::unique_ptr( new transport::tcp::server_transport(svr, m_addr)); } diff --git a/src/msgpack/rpc/transport/tcp.h b/src/msgpack/rpc/transport/tcp.h index 8e8c3c8..dee23a1 100644 --- a/src/msgpack/rpc/transport/tcp.h +++ b/src/msgpack/rpc/transport/tcp.h @@ -32,7 +32,7 @@ class tcp_builder : public builder::base { tcp_builder(); ~tcp_builder(); - std::auto_ptr build(session_impl* s, const address& addr) const; + std::unique_ptr build(session_impl* s, const address& addr) const; tcp_builder& connect_timeout(double sec) { m_connect_timeout = sec; return *this; } @@ -59,7 +59,7 @@ class tcp_listener : public listener::base { ~tcp_listener(); - std::auto_ptr listen(server_impl* svr) const; + std::unique_ptr listen(server_impl* svr) const; private: address m_addr; diff --git a/src/msgpack/rpc/transport/udp.cc b/src/msgpack/rpc/transport/udp.cc index 95f6b99..21e0846 100644 --- a/src/msgpack/rpc/transport/udp.cc +++ b/src/msgpack/rpc/transport/udp.cc @@ -61,7 +61,7 @@ class client_transport : public rpc::client_transport { public: void send_data(sbuffer* sbuf); - void send_data(auto_vreflife vbuf); + void send_data(auto_vreflife vbuf /**/); private: mp::shared_ptr m_sock; @@ -86,7 +86,7 @@ void client_socket::on_response(msgid_t msgid, throw closed_exception(); } s->on_response( - msgid, result, error, z); + msgid, result, error, std::move(z)); } @@ -123,9 +123,9 @@ void client_transport::send_data(sbuffer* sbuf) m_sock->send_data(sbuf); } -void client_transport::send_data(auto_vreflife vbuf) +void client_transport::send_data(auto_vreflife vbuf /**/) { - m_sock->send_data(vbuf); + m_sock->send_data(std::move(vbuf)); } @@ -183,7 +183,7 @@ void server_socket::on_request( throw closed_exception(); } svr->on_request(get_response_sender(addrbuf, addrlen), - msgid, method, params, z); + msgid, method, params, std::move(z)); } void server_socket::on_notify( @@ -193,7 +193,7 @@ void server_socket::on_notify( if(!svr) { throw closed_exception(); } - svr->on_notify(method, params, z); + svr->on_notify(method, params, std::move(z)); } @@ -244,9 +244,9 @@ udp_builder::udp_builder() { } udp_builder::~udp_builder() { } -std::auto_ptr udp_builder::build(session_impl* s, const address& addr) const +std::unique_ptr udp_builder::build(session_impl* s, const address& addr) const { - return std::auto_ptr(new transport::udp::client_transport(s, addr, *this)); + return std::unique_ptr(new transport::udp::client_transport(s, addr, *this)); } @@ -258,9 +258,9 @@ udp_listener::udp_listener(const address& addr) : udp_listener::~udp_listener() { } -std::auto_ptr udp_listener::listen(server_impl* svr) const +std::unique_ptr udp_listener::listen(server_impl* svr) const { - return std::auto_ptr( + return std::unique_ptr( new transport::udp::server_transport(svr, m_addr)); } diff --git a/src/msgpack/rpc/transport/udp.h b/src/msgpack/rpc/transport/udp.h index 529c3d5..102fd40 100644 --- a/src/msgpack/rpc/transport/udp.h +++ b/src/msgpack/rpc/transport/udp.h @@ -32,7 +32,7 @@ class udp_builder : public builder::base { udp_builder(); ~udp_builder(); - std::auto_ptr build(session_impl* s, const address& addr) const; + std::unique_ptr build(session_impl* s, const address& addr) const; }; @@ -43,7 +43,7 @@ class udp_listener : public listener::base { ~udp_listener(); - std::auto_ptr listen(server_impl* svr) const; + std::unique_ptr listen(server_impl* svr) const; private: address m_addr; diff --git a/src/msgpack/rpc/transport/unix.cc b/src/msgpack/rpc/transport/unix.cc index f15b992..d67525e 100644 --- a/src/msgpack/rpc/transport/unix.cc +++ b/src/msgpack/rpc/transport/unix.cc @@ -68,7 +68,7 @@ class client_transport : public rpc::client_transport { public: void send_data(sbuffer* sbuf); - void send_data(auto_vreflife vbuf); + void send_data(auto_vreflife vbuf /**/); private: session_impl* m_session; @@ -93,7 +93,7 @@ void client_socket::on_response(msgid_t msgid, if(!s) { throw closed_exception(); } - s->on_response(msgid, result, error, z); + s->on_response(msgid, result, error, std::move(z)); } @@ -131,9 +131,9 @@ void client_transport::send_data(sbuffer* sbuf) m_sock->send_data(sbuf); } -void client_transport::send_data(auto_vreflife vbuf) +void client_transport::send_data(auto_vreflife vbuf /**/) { - m_sock->send_data(vbuf); + m_sock->send_data(std::move(vbuf)); } @@ -191,7 +191,7 @@ void server_socket::on_request( if(!svr) { throw closed_exception(); } - svr->on_request(get_response_sender(), msgid, method, params, z); + svr->on_request(get_response_sender(), msgid, method, params, std::move(z)); } void server_socket::on_notify( @@ -201,7 +201,7 @@ void server_socket::on_notify( if(!svr) { throw closed_exception(); } - svr->on_notify(method, params, z); + svr->on_notify(method, params, std::move(z)); } @@ -269,10 +269,10 @@ unix_builder::unix_builder() { } unix_builder::~unix_builder() { } -std::auto_ptr unix_builder::build( +std::unique_ptr unix_builder::build( session_impl* s, const address& addr) const { - return std::auto_ptr( + return std::unique_ptr( new transport::unix::client_transport(s, addr, *this)); } @@ -285,9 +285,9 @@ unix_listener::unix_listener(const address& addr) : unix_listener::~unix_listener() { } -std::auto_ptr unix_listener::listen(server_impl* svr) const +std::unique_ptr unix_listener::listen(server_impl* svr) const { - return std::auto_ptr( + return std::unique_ptr( new transport::unix::server_transport(svr, m_addr)); } diff --git a/src/msgpack/rpc/transport/unix.h b/src/msgpack/rpc/transport/unix.h index bcbc707..24151b7 100644 --- a/src/msgpack/rpc/transport/unix.h +++ b/src/msgpack/rpc/transport/unix.h @@ -32,7 +32,7 @@ class unix_builder : public builder::base { unix_builder(); ~unix_builder(); - std::auto_ptr build(session_impl* s, const address& addr) const; + std::unique_ptr build(session_impl* s, const address& addr) const; }; @@ -43,7 +43,7 @@ class unix_listener : public listener::base { ~unix_listener(); - std::auto_ptr listen(server_impl* svr) const; + std::unique_ptr listen(server_impl* svr) const; private: address m_addr; diff --git a/src/msgpack/rpc/types.h b/src/msgpack/rpc/types.h index 0b160cb..7053c0f 100644 --- a/src/msgpack/rpc/types.h +++ b/src/msgpack/rpc/types.h @@ -25,7 +25,7 @@ namespace msgpack { namespace rpc { -typedef std::auto_ptr auto_zone; +typedef std::unique_ptr auto_zone; typedef mp::shared_ptr shared_zone; From 5a330bb178524fd4058ad5364e29d8a7215864b7 Mon Sep 17 00:00:00 2001 From: Dave Date: Mon, 15 Dec 2014 11:54:04 +0900 Subject: [PATCH 5/6] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index e09d03f..af6611a 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,10 @@ Configuration for OS X: $ ./configure CXXFLAGS='-DMP_UNORDERED_MAP_BOOST -DMP_FUNCTIONAL_BOOST -DMP_MEMORY_BOOST -O3 -Wall -I/usr/local/include -g -DCCLOG_LEVEL=10' --with-msgpack=/usr/local +OS X with C++11: + + $ ./configure CXXFLAGS='-DMP_UNORDERED_MAP_BOOST -DMP_FUNCTIONAL_BOOST -DMP_MEMORY_BOOST -O3 -Wall -I/usr/local/include -g -DCCLOG_LEVEL=10 -std=c++11' --with-msgpack=/usr/local + ## Usage [Test cases](http://github.com/msgpack/msgpack-rpc/tree/master/cpp/test/) will give you a sample usage. From 72f1419f5597cec7298cc0d19b226d713a5cf4b7 Mon Sep 17 00:00:00 2001 From: Dave Date: Mon, 15 Dec 2014 11:55:15 +0900 Subject: [PATCH 6/6] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index af6611a..ae520eb 100644 --- a/README.md +++ b/README.md @@ -22,11 +22,13 @@ Configure and install in the usual way: Configuration for OS X: - $ ./configure CXXFLAGS='-DMP_UNORDERED_MAP_BOOST -DMP_FUNCTIONAL_BOOST -DMP_MEMORY_BOOST -O3 -Wall -I/usr/local/include -g -DCCLOG_LEVEL=10' --with-msgpack=/usr/local + $ ./configure CXXFLAGS='-DMP_UNORDERED_MAP_BOOST -DMP_FUNCTIONAL_BOOST -DMP_MEMORY_BOOST \ + -O3 -Wall -I/usr/local/include -g -DCCLOG_LEVEL=10' --with-msgpack=/usr/local OS X with C++11: - $ ./configure CXXFLAGS='-DMP_UNORDERED_MAP_BOOST -DMP_FUNCTIONAL_BOOST -DMP_MEMORY_BOOST -O3 -Wall -I/usr/local/include -g -DCCLOG_LEVEL=10 -std=c++11' --with-msgpack=/usr/local + $ ./configure CXXFLAGS='-DMP_UNORDERED_MAP_BOOST -DMP_FUNCTIONAL_BOOST -DMP_MEMORY_BOOST \ + -O3 -Wall -I/usr/local/include -g -DCCLOG_LEVEL=10 -std=c++11' --with-msgpack=/usr/local ## Usage