Move logic from StreamServer into new Server class

This commit is contained in:
badaix 2020-07-20 11:54:58 +02:00
parent bd19c51d58
commit d52015ff09
11 changed files with 912 additions and 713 deletions

View file

@ -51,10 +51,10 @@ using session_ptr = std::shared_ptr<StreamSession>;
* Receives (via the MessageReceiver interface) and answers messages from the clients
* Forwards PCM data to the clients
*/
class StreamServer : public MessageReceiver, public ControlMessageReceiver, public PcmListener
class StreamServer : public MessageReceiver
{
public:
StreamServer(boost::asio::io_context& io_context, const ServerSettings& serverSettings);
StreamServer(boost::asio::io_context& io_context, const ServerSettings& serverSettings, MessageReceiver* messageReceiver = nullptr);
virtual ~StreamServer();
void start();
@ -63,35 +63,21 @@ public:
/// 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
void onMessageReceived(StreamSession* connection, const msg::BaseMessage& baseMessage, char* buffer) override;
void onDisconnect(StreamSession* connection) override;
void addSession(const std::shared_ptr<StreamSession>& session);
void onMetaChanged(const PcmStream* pcmStream, std::shared_ptr<msg::StreamTags> meta);
void onNewChunk(const PcmStream* pcmStream, bool isDefaultStream, std::shared_ptr<msg::PcmChunk> chunk, double duration);
/// Implementation of ControllMessageReceiver::onMessageReceived, called by ControlServer::onMessageReceived
std::string onMessageReceived(ControlSession* connection, const std::string& message) override;
// TODO Refactor: ControlServer implements ControlMessageReceiver, calling this one.
void onNewSession(const std::shared_ptr<ControlSession>& session) override
{
std::ignore = session;
};
void onNewSession(const std::shared_ptr<StreamSession>& session) override;
/// Implementation of PcmListener
void onMetaChanged(const PcmStream* pcmStream) override;
void onStateChanged(const PcmStream* pcmStream, const ReaderState& state) override;
void onNewChunk(const PcmStream* pcmStream, std::shared_ptr<msg::PcmChunk> chunk, double duration) override;
void onResync(const PcmStream* pcmStream, double ms) override;
session_ptr getStreamSession(const std::string& mac) const;
session_ptr getStreamSession(StreamSession* session) const;
private:
void startAccept();
void handleAccept(tcp::socket socket);
session_ptr getStreamSession(const std::string& mac) const;
session_ptr getStreamSession(StreamSession* session) const;
void ProcessRequest(const jsonrpcpp::request_ptr request, jsonrpcpp::entity_ptr& response, jsonrpcpp::notification_ptr& notification) const;
void cleanup();
/// Save the server state deferred to prevent blocking and lower disk io
/// @param deferred the delay after the last call to saveConfig
void saveConfig(const std::chrono::milliseconds& deferred = std::chrono::seconds(2));
/// Clients call this when they receive a message. Implementation of MessageReceiver::onMessageReceived
void onMessageReceived(StreamSession* connection, const msg::BaseMessage& baseMessage, char* buffer) override;
void onDisconnect(StreamSession* connection) override;
mutable std::recursive_mutex sessionsMutex_;
mutable std::recursive_mutex clientMutex_;
@ -102,8 +88,7 @@ private:
ServerSettings settings_;
Queue<std::shared_ptr<msg::BaseMessage>> messages_;
std::unique_ptr<ControlServer> controlServer_;
std::unique_ptr<StreamManager> streamManager_;
MessageReceiver* messageReceiver_;
};