diff --git a/server/control_server.hpp b/server/control_server.hpp index 4d460ffc..e956457f 100644 --- a/server/control_server.hpp +++ b/server/control_server.hpp @@ -53,11 +53,6 @@ public: /// Send a message to all connected clients void send(const std::string& message, const ControlSession* excludeSession = nullptr); - /// Clients call this when they receive a message. Implementation of MessageReceiver::onMessageReceived - std::string onMessageReceived(ControlSession* session, const std::string& message) override; - void onNewSession(const std::shared_ptr& session) override; - void onNewSession(const std::shared_ptr& session) override; - private: void startAccept(); @@ -65,6 +60,11 @@ private: void handleAccept(tcp::socket socket, Args&&... args); void cleanup(); + /// Implementation of ControlMessageReceiver + std::string onMessageReceived(ControlSession* session, const std::string& message) override; + void onNewSession(const std::shared_ptr& session) override; + void onNewSession(const std::shared_ptr& session) override; + mutable std::recursive_mutex session_mutex_; std::vector> sessions_; diff --git a/server/control_session.hpp b/server/control_session.hpp index 98539682..c9d833b9 100644 --- a/server/control_session.hpp +++ b/server/control_session.hpp @@ -55,7 +55,7 @@ public: class ControlSession : public std::enable_shared_from_this { public: - /// ctor. Received message from the client are passed to MessageReceiver + /// ctor. Received message from the client are passed to ControlMessageReceiver ControlSession(ControlMessageReceiver* receiver) : message_receiver_(receiver) { } diff --git a/server/control_session_http.cpp b/server/control_session_http.cpp index d199712e..88043823 100644 --- a/server/control_session_http.cpp +++ b/server/control_session_http.cpp @@ -252,7 +252,7 @@ void ControlSessionHttp::on_read(beast::error_code ec, std::size_t bytes_transfe } LOG(DEBUG, LOG_TAG) << "read: " << bytes_transferred << ", method: " << req_.method_string() << ", content type: " << req_[beast::http::field::content_type] - << ", target: " << req_.target() << ", body: " << req_.body() << "\n"; + << ", target: " << req_.target() << ", body: " << req_.body() << "\n"; // See if it is a WebSocket Upgrade if (websocket::is_upgrade(req_)) diff --git a/server/control_session_http.hpp b/server/control_session_http.hpp index d9807a8a..26a32a6c 100644 --- a/server/control_session_http.hpp +++ b/server/control_session_http.hpp @@ -39,7 +39,7 @@ namespace net = boost::asio; // from class ControlSessionHttp : public ControlSession { public: - /// ctor. Received message from the client are passed to MessageReceiver + /// ctor. Received message from the client are passed to ControlMessageReceiver ControlSessionHttp(ControlMessageReceiver* receiver, boost::asio::io_context& ioc, tcp::socket&& socket, const ServerSettings::Http& settings); ~ControlSessionHttp() override; void start() override; diff --git a/server/control_session_tcp.hpp b/server/control_session_tcp.hpp index 854ed640..e04e3254 100644 --- a/server/control_session_tcp.hpp +++ b/server/control_session_tcp.hpp @@ -31,7 +31,7 @@ class ControlSessionTcp : public ControlSession { public: - /// ctor. Received message from the client are passed to MessageReceiver + /// ctor. Received message from the client are passed to ControlMessageReceiver ControlSessionTcp(ControlMessageReceiver* receiver, boost::asio::io_context& ioc, tcp::socket&& socket); ~ControlSessionTcp() override; void start() override; diff --git a/server/control_session_ws.hpp b/server/control_session_ws.hpp index c6d9e2d6..c5836b46 100644 --- a/server/control_session_ws.hpp +++ b/server/control_session_ws.hpp @@ -39,7 +39,7 @@ namespace net = boost::asio; // from class ControlSessionWebsocket : public ControlSession { public: - /// ctor. Received message from the client are passed to MessageReceiver + /// ctor. Received message from the client are passed to ControlMessageReceiver ControlSessionWebsocket(ControlMessageReceiver* receiver, boost::asio::io_context& ioc, websocket::stream&& socket); ~ControlSessionWebsocket() override; void start() override; diff --git a/server/server.hpp b/server/server.hpp index f0927fbb..d1691b0d 100644 --- a/server/server.hpp +++ b/server/server.hpp @@ -29,12 +29,12 @@ #include "common/queue.h" #include "common/sample_format.hpp" #include "control_server.hpp" -#include "stream_server.hpp" #include "jsonrpcpp.hpp" #include "message/codec_header.hpp" #include "message/message.hpp" #include "message/server_settings.hpp" #include "server_settings.hpp" +#include "stream_server.hpp" #include "stream_session.hpp" #include "streamreader/stream_manager.hpp" @@ -49,10 +49,10 @@ using session_ptr = std::shared_ptr; /** * Reads PCM data using PipeStream, implements PcmListener to get the (encoded) PCM stream. * Accepts and holds client connections (StreamSession) - * Receives (via the MessageReceiver interface) and answers messages from the clients + * Receives (via the StreamMessageReceiver interface) and answers messages from the clients * Forwards PCM data to the clients */ -class Server : public MessageReceiver, public ControlMessageReceiver, public PcmListener +class Server : public StreamMessageReceiver, public ControlMessageReceiver, public PcmListener { public: Server(boost::asio::io_context& io_context, const ServerSettings& serverSettings); @@ -61,16 +61,13 @@ public: void start(); void stop(); - /// Send a message to all connceted clients - // void send(const msg::BaseMessage* message); - - /// Clients call this when they receive a message. Implementation of MessageReceiver::onMessageReceived +private: + /// Implementation of StreamMessageReceiver void onMessageReceived(StreamSession* connection, const msg::BaseMessage& baseMessage, char* buffer) override; void onDisconnect(StreamSession* connection) override; - /// Implementation of ControllMessageReceiver::onMessageReceived, called by ControlServer::onMessageReceived + /// Implementation of ControllMessageReceiver std::string onMessageReceived(ControlSession* connection, const std::string& message) override; - // TODO Refactor: ControlServer implements ControlMessageReceiver, calling this one. void onNewSession(const std::shared_ptr& session) override { std::ignore = session; diff --git a/server/snapserver.cpp b/server/snapserver.cpp index 862390ee..09c1bff3 100644 --- a/server/snapserver.cpp +++ b/server/snapserver.cpp @@ -30,8 +30,8 @@ #include "common/utils/string_utils.hpp" #include "encoder/encoder_factory.hpp" #include "message/message.hpp" -#include "server_settings.hpp" #include "server.hpp" +#include "server_settings.hpp" #if defined(HAS_AVAHI) || defined(HAS_BONJOUR) #include "publishZeroConf/publish_mdns.hpp" #endif diff --git a/server/stream_server.cpp b/server/stream_server.cpp index 3d6da842..d1d5ff54 100644 --- a/server/stream_server.cpp +++ b/server/stream_server.cpp @@ -33,7 +33,7 @@ using json = nlohmann::json; static constexpr auto LOG_TAG = "StreamServer"; -StreamServer::StreamServer(boost::asio::io_context& io_context, const ServerSettings& serverSettings, MessageReceiver* messageReceiver) +StreamServer::StreamServer(boost::asio::io_context& io_context, const ServerSettings& serverSettings, StreamMessageReceiver* messageReceiver) : io_context_(io_context), config_timer_(io_context), settings_(serverSettings), messageReceiver_(messageReceiver) { } diff --git a/server/stream_server.hpp b/server/stream_server.hpp index a636a24f..c9c6b21c 100644 --- a/server/stream_server.hpp +++ b/server/stream_server.hpp @@ -48,13 +48,13 @@ using session_ptr = std::shared_ptr; /** * Reads PCM data using PipeStream, implements PcmListener to get the (encoded) PCM stream. * Accepts and holds client connections (StreamSession) - * Receives (via the MessageReceiver interface) and answers messages from the clients + * Receives (via the StreamMessageReceiver interface) and answers messages from the clients * Forwards PCM data to the clients */ -class StreamServer : public MessageReceiver +class StreamServer : public StreamMessageReceiver { public: - StreamServer(boost::asio::io_context& io_context, const ServerSettings& serverSettings, MessageReceiver* messageReceiver = nullptr); + StreamServer(boost::asio::io_context& io_context, const ServerSettings& serverSettings, StreamMessageReceiver* messageReceiver = nullptr); virtual ~StreamServer(); void start(); @@ -75,7 +75,7 @@ private: void handleAccept(tcp::socket socket); void cleanup(); - /// Clients call this when they receive a message. Implementation of MessageReceiver::onMessageReceived + /// Implementation of StreamMessageReceiver void onMessageReceived(StreamSession* connection, const msg::BaseMessage& baseMessage, char* buffer) override; void onDisconnect(StreamSession* connection) override; @@ -88,7 +88,7 @@ private: ServerSettings settings_; Queue> messages_; - MessageReceiver* messageReceiver_; + StreamMessageReceiver* messageReceiver_; }; diff --git a/server/stream_session.cpp b/server/stream_session.cpp index b143db62..4446da7c 100644 --- a/server/stream_session.cpp +++ b/server/stream_session.cpp @@ -29,7 +29,7 @@ using namespace streamreader; static constexpr auto LOG_TAG = "StreamSession"; -StreamSession::StreamSession(boost::asio::io_context& ioc, MessageReceiver* receiver) : messageReceiver_(receiver), pcmStream_(nullptr), strand_(ioc) +StreamSession::StreamSession(boost::asio::io_context& ioc, StreamMessageReceiver* receiver) : messageReceiver_(receiver), pcmStream_(nullptr), strand_(ioc) { base_msg_size_ = baseMessage_.getSize(); buffer_.resize(base_msg_size_); diff --git a/server/stream_session.hpp b/server/stream_session.hpp index e1ef8a37..d5b4f3c3 100644 --- a/server/stream_session.hpp +++ b/server/stream_session.hpp @@ -40,7 +40,7 @@ class StreamSession; /// Interface: callback for a received message. -class MessageReceiver +class StreamMessageReceiver { public: virtual void onMessageReceived(StreamSession* connection, const msg::BaseMessage& baseMessage, char* buffer) = 0; @@ -110,13 +110,13 @@ using WriteHandler = std::function { public: - /// ctor. Received message from the client are passed to MessageReceiver - StreamSession(boost::asio::io_context& ioc, MessageReceiver* receiver); + /// ctor. Received message from the client are passed to StreamMessageReceiver + StreamSession(boost::asio::io_context& ioc, StreamMessageReceiver* receiver); virtual ~StreamSession() = default; virtual std::string getIP() = 0; @@ -124,7 +124,7 @@ public: virtual void start() = 0; virtual void stop() = 0; - void setMessageReceiver(MessageReceiver* receiver) + void setMessageReceiver(StreamMessageReceiver* receiver) { messageReceiver_ = receiver; } @@ -153,7 +153,7 @@ protected: msg::BaseMessage baseMessage_; std::vector buffer_; size_t base_msg_size_; - MessageReceiver* messageReceiver_; + StreamMessageReceiver* messageReceiver_; size_t bufferMs_; streamreader::PcmStreamPtr pcmStream_; boost::asio::io_context::strand strand_; diff --git a/server/stream_session_tcp.cpp b/server/stream_session_tcp.cpp index 3a62bf96..8a99175b 100644 --- a/server/stream_session_tcp.cpp +++ b/server/stream_session_tcp.cpp @@ -29,7 +29,7 @@ using namespace streamreader; static constexpr auto LOG_TAG = "StreamSessionTCP"; -StreamSessionTcp::StreamSessionTcp(boost::asio::io_context& ioc, MessageReceiver* receiver, tcp::socket&& socket) +StreamSessionTcp::StreamSessionTcp(boost::asio::io_context& ioc, StreamMessageReceiver* receiver, tcp::socket&& socket) : StreamSession(ioc, receiver), socket_(std::move(socket)) { } diff --git a/server/stream_session_tcp.hpp b/server/stream_session_tcp.hpp index 2cb31734..76d2cb99 100644 --- a/server/stream_session_tcp.hpp +++ b/server/stream_session_tcp.hpp @@ -28,13 +28,13 @@ using boost::asio::ip::tcp; /** * Endpoint for a connected client. * Messages are sent to the client with the "send" method. - * Received messages from the client are passed to the MessageReceiver callback + * Received messages from the client are passed to the StreamMessageReceiver callback */ class StreamSessionTcp : public StreamSession { public: - /// ctor. Received message from the client are passed to MessageReceiver - StreamSessionTcp(boost::asio::io_context& ioc, MessageReceiver* receiver, tcp::socket&& socket); + /// ctor. Received message from the client are passed to StreamMessageReceiver + StreamSessionTcp(boost::asio::io_context& ioc, StreamMessageReceiver* receiver, tcp::socket&& socket); ~StreamSessionTcp() override; void start() override; void stop() override; diff --git a/server/stream_session_ws.cpp b/server/stream_session_ws.cpp index 23b750aa..98fe2d02 100644 --- a/server/stream_session_ws.cpp +++ b/server/stream_session_ws.cpp @@ -26,7 +26,7 @@ using namespace std; static constexpr auto LOG_TAG = "StreamSessionWS"; -StreamSessionWebsocket::StreamSessionWebsocket(boost::asio::io_context& ioc, MessageReceiver* receiver, websocket::stream&& socket) +StreamSessionWebsocket::StreamSessionWebsocket(boost::asio::io_context& ioc, StreamMessageReceiver* receiver, websocket::stream&& socket) : StreamSession(ioc, receiver), ws_(std::move(socket)) { LOG(DEBUG, LOG_TAG) << "StreamSessionWS\n"; diff --git a/server/stream_session_ws.hpp b/server/stream_session_ws.hpp index 75d60d3a..201ae848 100644 --- a/server/stream_session_ws.hpp +++ b/server/stream_session_ws.hpp @@ -39,8 +39,8 @@ namespace net = boost::asio; // from class StreamSessionWebsocket : public StreamSession { public: - /// ctor. Received message from the client are passed to MessageReceiver - StreamSessionWebsocket(boost::asio::io_context& ioc, MessageReceiver* receiver, websocket::stream&& socket); + /// ctor. Received message from the client are passed to StreamMessageReceiver + StreamSessionWebsocket(boost::asio::io_context& ioc, StreamMessageReceiver* receiver, websocket::stream&& socket); ~StreamSessionWebsocket() override; void start() override; void stop() override;