From c7655f3e5532c007975edcb6a33414e6a4ae8095 Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@d8a302eb-03bc-478d-80e4-98257eca68ef> Date: Sat, 20 Sep 2014 16:58:21 +0000 Subject: [PATCH] socket stuff git-svn-id: svn://elaine/murooma/trunk@278 d8a302eb-03bc-478d-80e4-98257eca68ef --- server/serverSession.cpp | 11 ++++++----- server/serverSession.h | 1 + 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/server/serverSession.cpp b/server/serverSession.cpp index 6451ecd6..93516d95 100644 --- a/server/serverSession.cpp +++ b/server/serverSession.cpp @@ -48,7 +48,7 @@ void ServerSession::add(shared_ptr message) bool ServerSession::send(BaseMessage* message) { -// std::unique_lock mlock(mutex_); + std::unique_lock mlock(mutex_); //cout << "send: " << message->type << ", size: " << message->getSize() << "\n"; if (!connected()) return false; @@ -110,17 +110,18 @@ void ServerSession::writer() { boost::asio::streambuf streambuf; std::ostream stream(&streambuf); - for (;;) + shared_ptr message; + while (active_) { - shared_ptr message(messages.pop()); - send(message.get()); + if (messages.try_pop(message, std::chrono::milliseconds(500))) + send(message.get()); } } catch (std::exception& e) { std::cerr << "Exception in thread: " << e.what() << "\n"; - active_ = false; } + active_ = false; } diff --git a/server/serverSession.h b/server/serverSession.h index a9ba03af..d14333ce 100644 --- a/server/serverSession.h +++ b/server/serverSession.h @@ -51,6 +51,7 @@ protected: void writer(); std::atomic active_; + mutable std::mutex mutex_; std::thread* readerThread; std::thread* writerThread; std::shared_ptr socket;