mirror of
https://github.com/badaix/snapcast.git
synced 2025-05-09 23:26:47 +02:00
Move logic from StreamServer into new Server class
This commit is contained in:
parent
bd19c51d58
commit
d52015ff09
11 changed files with 912 additions and 713 deletions
|
@ -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_;
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue