From bc1e5919a628c9c3b026f8d161ef778f9a8b7b35 Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Tue, 28 Jun 2016 14:52:45 +0200 Subject: [PATCH] added Stream::shutdown --- src/uvw/stream.hpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/uvw/stream.hpp b/src/uvw/stream.hpp index 33406d34..ae974192 100644 --- a/src/uvw/stream.hpp +++ b/src/uvw/stream.hpp @@ -13,6 +13,10 @@ template class Stream: public Handle { static constexpr unsigned int DEFAULT_BACKLOG = 128; + static void shutdownCallback(T &t, std::function &cb, uv_shutdown_t *, int status) { + cb(UVWError{status}, t); + } + static void listenCallback(T &t, std::function &cb, uv_stream_t *, int status) { cb(UVWError{status}, t); } @@ -21,10 +25,11 @@ protected: using Handle::Handle; public: - // TODO shutdown - - void listen(std::function cb) noexcept { - listen(DEFAULT_BACKLOG, std::move(cb)); + void shutdown(std::function cb) noexcept { + using CBF = typename Handle::template CallbackFactory; + auto func = CBF::template on<&Stream::shutdownCallback>(*static_cast(this), cb); + auto err = uv_shutdown(sdown.get(), this->template get(), func); + if(err) { Stream::error(err); } } void listen(int backlog, std::function cb) noexcept { @@ -34,8 +39,11 @@ public: if(err) { Stream::error(err); } } + void listen(std::function cb) noexcept { + listen(DEFAULT_BACKLOG, std::move(cb)); + } + // TODO read - // TODO stop UVWError stop() noexcept { return UVWError{uv_read_stop(this->template get())}; @@ -53,7 +61,7 @@ public: } private: - std::function listenCb; + std::unique_ptr sdown; };