From c9b0a15dc0cb2636733c85425187f4221b22d2e9 Mon Sep 17 00:00:00 2001 From: badaix Date: Sun, 5 Nov 2017 13:24:26 +0100 Subject: [PATCH] use less raw pointers --- message/message.h | 4 ++++ server/streamServer.cpp | 32 +++++++++++++++--------------- server/streamServer.h | 2 +- server/streamSession.cpp | 15 ++++---------- server/streamSession.h | 7 +++---- server/streamreader/pcmStream.h | 2 +- server/streamreader/pipeStream.cpp | 1 + 7 files changed, 30 insertions(+), 33 deletions(-) diff --git a/message/message.h b/message/message.h index 967317cd..7478fea3 100644 --- a/message/message.h +++ b/message/message.h @@ -111,6 +111,10 @@ namespace msg const size_t max_size = 1000000; +struct BaseMessage; + +using message_ptr = std::shared_ptr; + struct BaseMessage { BaseMessage() : type(kBase), id(0), refersTo(0) diff --git a/server/streamServer.cpp b/server/streamServer.cpp index 10ec3532..0bf109f2 100644 --- a/server/streamServer.cpp +++ b/server/streamServer.cpp @@ -49,12 +49,12 @@ void StreamServer::onStateChanged(const PcmStream* pcmStream, const ReaderState& } -void StreamServer::onChunkRead(const PcmStream* pcmStream, const msg::PcmChunk* chunk, double duration) +void StreamServer::onChunkRead(const PcmStream* pcmStream, msg::PcmChunk* chunk, double duration) { // LOG(INFO) << "onChunkRead (" << pcmStream->getName() << "): " << duration << "ms\n"; bool isDefaultStream(pcmStream == streamManager_->getDefaultStream().get()); - std::shared_ptr shared_message(chunk); + msg::message_ptr shared_message(chunk); std::lock_guard mlock(sessionsMutex_); for (auto s : sessions_) { @@ -183,13 +183,13 @@ void StreamServer::ProcessRequest(const jsonrpcpp::request_ptr request, jsonrpcp session_ptr session = getStreamSession(clientInfo->id); if (session != nullptr) { - msg::ServerSettings serverSettings; - serverSettings.setBufferMs(settings_.bufferMs); - serverSettings.setVolume(clientInfo->config.volume.percent); + auto serverSettings = make_shared(); + serverSettings->setBufferMs(settings_.bufferMs); + serverSettings->setVolume(clientInfo->config.volume.percent); GroupPtr group = Config::instance().getGroupFromClient(clientInfo); - serverSettings.setMuted(clientInfo->config.volume.muted || group->muted); - serverSettings.setLatency(clientInfo->config.latency); - session->send(&serverSettings); + serverSettings->setMuted(clientInfo->config.volume.muted || group->muted); + serverSettings->setLatency(clientInfo->config.latency); + session->send(serverSettings); } } } @@ -219,13 +219,13 @@ void StreamServer::ProcessRequest(const jsonrpcpp::request_ptr request, jsonrpcp session_ptr session = getStreamSession(client->id); if (session != nullptr) { - msg::ServerSettings serverSettings; - serverSettings.setBufferMs(settings_.bufferMs); - serverSettings.setVolume(client->config.volume.percent); + auto serverSettings = make_shared(); + serverSettings->setBufferMs(settings_.bufferMs); + serverSettings->setVolume(client->config.volume.percent); GroupPtr group = Config::instance().getGroupFromClient(client); - serverSettings.setMuted(client->config.volume.muted || group->muted); - serverSettings.setLatency(client->config.latency); - session->send(&serverSettings); + serverSettings->setMuted(client->config.volume.muted || group->muted); + serverSettings->setLatency(client->config.latency); + session->send(serverSettings); } } @@ -448,7 +448,7 @@ void StreamServer::onMessageReceived(StreamSession* connection, const msg::BaseM // LOG(DEBUG) << "onMessageReceived: " << baseMessage.type << ", size: " << baseMessage.size << ", id: " << baseMessage.id << ", refers: " << baseMessage.refersTo << ", sent: " << baseMessage.sent.sec << "," << baseMessage.sent.usec << ", recv: " << baseMessage.received.sec << "," << baseMessage.received.usec << "\n"; if (baseMessage.type == message_type::kTime) { - msg::Time* timeMsg = new msg::Time(); + auto timeMsg = make_shared(); timeMsg->deserialize(baseMessage, buffer); timeMsg->refersTo = timeMsg->id; timeMsg->latency = timeMsg->received - timeMsg->sent; @@ -485,7 +485,7 @@ void StreamServer::onMessageReceived(StreamSession* connection, const msg::BaseM ClientInfoPtr client = group->getClient(connection->clientId); LOG(DEBUG) << "request kServerSettings\n"; - msg::ServerSettings* serverSettings = new msg::ServerSettings(); + auto serverSettings = make_shared(); serverSettings->setVolume(client->config.volume.percent); serverSettings->setMuted(client->config.volume.muted || group->muted); serverSettings->setLatency(client->config.latency); diff --git a/server/streamServer.h b/server/streamServer.h index 21671759..73fa2eb4 100644 --- a/server/streamServer.h +++ b/server/streamServer.h @@ -93,7 +93,7 @@ public: /// Implementation of PcmListener virtual void onStateChanged(const PcmStream* pcmStream, const ReaderState& state); - virtual void onChunkRead(const PcmStream* pcmStream, const msg::PcmChunk* chunk, double duration); + virtual void onChunkRead(const PcmStream* pcmStream, msg::PcmChunk* chunk, double duration); virtual void onResync(const PcmStream* pcmStream, double ms); private: diff --git a/server/streamSession.cpp b/server/streamSession.cpp index 89d6565e..d72e6331 100644 --- a/server/streamSession.cpp +++ b/server/streamSession.cpp @@ -118,14 +118,7 @@ void StreamSession::socketRead(void* _to, size_t _bytes) } -void StreamSession::sendAsync(const msg::BaseMessage* message, bool sendNow) -{ - std::shared_ptr shared_message(message); - sendAsync(shared_message, sendNow); -} - - -void StreamSession::sendAsync(const shared_ptr& message, bool sendNow) +void StreamSession::sendAsync(const msg::message_ptr& message, bool sendNow) { if (!message) return; @@ -153,7 +146,7 @@ void StreamSession::setBufferMs(size_t bufferMs) } -bool StreamSession::send(const msg::BaseMessage* message) const +bool StreamSession::send(const msg::message_ptr& message) const { //TODO on exception: set active = false // LOG(INFO) << "send: " << message->type << ", size: " << message->getSize() << ", id: " << message->id << ", refers: " << message->refersTo << "\n"; @@ -235,7 +228,7 @@ void StreamSession::writer() { asio::streambuf streambuf; std::ostream stream(&streambuf); - shared_ptr message; + shared_ptr message; while (active_) { if (messages_.try_pop(message, std::chrono::milliseconds(500))) @@ -254,7 +247,7 @@ void StreamSession::writer() continue; } } - send(message.get()); + send(message); } } } diff --git a/server/streamSession.h b/server/streamSession.h index fdae5f69..d6ed31b7 100644 --- a/server/streamSession.h +++ b/server/streamSession.h @@ -63,11 +63,10 @@ public: void stop(); /// Sends a message to the client (synchronous) - bool send(const msg::BaseMessage* message) const; + bool send(const msg::message_ptr& message) const; /// Sends a message to the client (asynchronous) - void sendAsync(const std::shared_ptr& message, bool sendNow = false); - void sendAsync(const msg::BaseMessage* message, bool sendNow = false); + void sendAsync(const msg::message_ptr& message, bool sendNow = false); bool active() const; @@ -98,7 +97,7 @@ protected: mutable std::mutex socketMutex_; std::shared_ptr socket_; MessageReceiver* messageReceiver_; - Queue> messages_; + Queue> messages_; size_t bufferMs_; PcmStreamPtr pcmStream_; }; diff --git a/server/streamreader/pcmStream.h b/server/streamreader/pcmStream.h index b9fcaf28..d1ba34b1 100644 --- a/server/streamreader/pcmStream.h +++ b/server/streamreader/pcmStream.h @@ -51,7 +51,7 @@ class PcmListener { public: virtual void onStateChanged(const PcmStream* pcmStream, const ReaderState& state) = 0; - virtual void onChunkRead(const PcmStream* pcmStream, const msg::PcmChunk* chunk, double duration) = 0; + virtual void onChunkRead(const PcmStream* pcmStream, msg::PcmChunk* chunk, double duration) = 0; virtual void onResync(const PcmStream* pcmStream, double ms) = 0; }; diff --git a/server/streamreader/pipeStream.cpp b/server/streamreader/pipeStream.cpp index 86b48094..e56d1d3c 100644 --- a/server/streamreader/pipeStream.cpp +++ b/server/streamreader/pipeStream.cpp @@ -113,6 +113,7 @@ void PipeStream::worker() if (!active_) break; + /// TODO: use less raw pointers, make this encoding more transparent encoder_->encode(chunk.get()); if (!active_) break;