mirror of
https://github.com/badaix/snapcast.git
synced 2025-05-10 15:46:42 +02:00
Save server config deferred
This commit is contained in:
parent
13dd05545d
commit
384e71b7c9
2 changed files with 22 additions and 5 deletions
|
@ -30,7 +30,8 @@ using namespace streamreader;
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
|
|
||||||
|
|
||||||
StreamServer::StreamServer(boost::asio::io_context& io_context, const ServerSettings& serverSettings) : io_context_(io_context), settings_(serverSettings)
|
StreamServer::StreamServer(boost::asio::io_context& io_context, const ServerSettings& serverSettings)
|
||||||
|
: io_context_(io_context), config_timer_(io_context), settings_(serverSettings)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,7 +170,7 @@ void StreamServer::onDisconnect(StreamSession* streamSession)
|
||||||
|
|
||||||
clientInfo->connected = false;
|
clientInfo->connected = false;
|
||||||
chronos::systemtimeofday(&clientInfo->lastSeen);
|
chronos::systemtimeofday(&clientInfo->lastSeen);
|
||||||
Config::instance().save();
|
saveConfig();
|
||||||
if (controlServer_ != nullptr)
|
if (controlServer_ != nullptr)
|
||||||
{
|
{
|
||||||
// Check if there is no session of this client is left
|
// Check if there is no session of this client is left
|
||||||
|
@ -572,7 +573,7 @@ std::string StreamServer::onMessageReceived(ControlSession* controlSession, cons
|
||||||
{
|
{
|
||||||
jsonrpcpp::request_ptr request = dynamic_pointer_cast<jsonrpcpp::Request>(entity);
|
jsonrpcpp::request_ptr request = dynamic_pointer_cast<jsonrpcpp::Request>(entity);
|
||||||
ProcessRequest(request, response, notification);
|
ProcessRequest(request, response, notification);
|
||||||
Config::instance().save();
|
saveConfig();
|
||||||
////cout << "Request: " << request->to_json().dump() << "\n";
|
////cout << "Request: " << request->to_json().dump() << "\n";
|
||||||
if (notification)
|
if (notification)
|
||||||
{
|
{
|
||||||
|
@ -604,7 +605,7 @@ std::string StreamServer::onMessageReceived(ControlSession* controlSession, cons
|
||||||
notificationBatch.add_ptr(notification);
|
notificationBatch.add_ptr(notification);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Config::instance().save();
|
saveConfig();
|
||||||
if (!notificationBatch.entities.empty())
|
if (!notificationBatch.entities.empty())
|
||||||
controlServer_->send(notificationBatch.to_json().dump(), controlSession);
|
controlServer_->send(notificationBatch.to_json().dump(), controlSession);
|
||||||
if (!responseBatch.entities.empty())
|
if (!responseBatch.entities.empty())
|
||||||
|
@ -690,7 +691,7 @@ void StreamServer::onMessageReceived(StreamSession* streamSession, const msg::Ba
|
||||||
}
|
}
|
||||||
LOG(DEBUG) << "Group: " << group->id << ", stream: " << group->streamId << "\n";
|
LOG(DEBUG) << "Group: " << group->id << ", stream: " << group->streamId << "\n";
|
||||||
|
|
||||||
Config::instance().save();
|
saveConfig();
|
||||||
|
|
||||||
streamSession->sendAsync(stream->getMeta());
|
streamSession->sendAsync(stream->getMeta());
|
||||||
streamSession->setPcmStream(stream);
|
streamSession->setPcmStream(stream);
|
||||||
|
@ -721,6 +722,19 @@ void StreamServer::onMessageReceived(StreamSession* streamSession, const msg::Ba
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void StreamServer::saveConfig()
|
||||||
|
{
|
||||||
|
config_timer_.cancel();
|
||||||
|
config_timer_.expires_after(2s);
|
||||||
|
config_timer_.async_wait([this](const boost::system::error_code& ec) {
|
||||||
|
if (!ec)
|
||||||
|
{
|
||||||
|
LOG(DEBUG) << "Saving config\n";
|
||||||
|
Config::instance().save();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
session_ptr StreamServer::getStreamSession(StreamSession* streamSession) const
|
session_ptr StreamServer::getStreamSession(StreamSession* streamSession) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -83,12 +83,15 @@ private:
|
||||||
session_ptr getStreamSession(StreamSession* session) const;
|
session_ptr getStreamSession(StreamSession* session) const;
|
||||||
void ProcessRequest(const jsonrpcpp::request_ptr request, jsonrpcpp::entity_ptr& response, jsonrpcpp::notification_ptr& notification) const;
|
void ProcessRequest(const jsonrpcpp::request_ptr request, jsonrpcpp::entity_ptr& response, jsonrpcpp::notification_ptr& notification) const;
|
||||||
void cleanup();
|
void cleanup();
|
||||||
|
/// save the server state deferred after 2s without a change to prevent blocking and too much disk io
|
||||||
|
void saveConfig();
|
||||||
|
|
||||||
mutable std::recursive_mutex sessionsMutex_;
|
mutable std::recursive_mutex sessionsMutex_;
|
||||||
mutable std::recursive_mutex clientMutex_;
|
mutable std::recursive_mutex clientMutex_;
|
||||||
std::vector<std::weak_ptr<StreamSession>> sessions_;
|
std::vector<std::weak_ptr<StreamSession>> sessions_;
|
||||||
boost::asio::io_context& io_context_;
|
boost::asio::io_context& io_context_;
|
||||||
std::vector<acceptor_ptr> acceptor_;
|
std::vector<acceptor_ptr> acceptor_;
|
||||||
|
boost::asio::steady_timer config_timer_;
|
||||||
|
|
||||||
ServerSettings settings_;
|
ServerSettings settings_;
|
||||||
Queue<std::shared_ptr<msg::BaseMessage>> messages_;
|
Queue<std::shared_ptr<msg::BaseMessage>> messages_;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue