mirror of
https://github.com/badaix/snapcast.git
synced 2025-05-11 08:06:41 +02:00
trigger onDisconnect
This commit is contained in:
parent
e05e2fdd9d
commit
e5698d8ab1
4 changed files with 24 additions and 5 deletions
|
@ -51,7 +51,7 @@ void ServerSession::start()
|
|||
void ServerSession::stop()
|
||||
{
|
||||
std::unique_lock<std::mutex> mlock(mutex_);
|
||||
active_ = false;
|
||||
setActive(false);
|
||||
try
|
||||
{
|
||||
boost::system::error_code ec;
|
||||
|
@ -146,7 +146,6 @@ void ServerSession::getNextMessage()
|
|||
|
||||
void ServerSession::reader()
|
||||
{
|
||||
active_ = true;
|
||||
try
|
||||
{
|
||||
while (active_)
|
||||
|
@ -158,7 +157,7 @@ void ServerSession::reader()
|
|||
{
|
||||
logS(kLogErr) << "Exception in ServerSession::reader(): " << e.what() << endl;
|
||||
}
|
||||
active_ = false;
|
||||
setActive(false);
|
||||
}
|
||||
|
||||
|
||||
|
@ -195,7 +194,15 @@ void ServerSession::writer()
|
|||
{
|
||||
logS(kLogErr) << "Exception in ServerSession::writer(): " << e.what() << endl;
|
||||
}
|
||||
active_ = false;
|
||||
setActive(false);
|
||||
}
|
||||
|
||||
|
||||
void ServerSession::setActive(bool active)
|
||||
{
|
||||
if (active_ && !active && (messageReceiver_ != NULL))
|
||||
messageReceiver_->onDisconnect(this);
|
||||
active_ = active;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ class MessageReceiver
|
|||
{
|
||||
public:
|
||||
virtual void onMessageReceived(ServerSession* connection, const msg::BaseMessage& baseMessage, char* buffer) = 0;
|
||||
virtual void onDisconnect(ServerSession* connection) = 0;
|
||||
};
|
||||
|
||||
|
||||
|
@ -96,6 +97,7 @@ protected:
|
|||
void getNextMessage();
|
||||
void reader();
|
||||
void writer();
|
||||
void setActive(bool active);
|
||||
|
||||
std::atomic<bool> active_;
|
||||
std::atomic<bool> streamActive_;
|
||||
|
|
|
@ -81,6 +81,16 @@ void StreamServer::onResync(const PipeReader* pipeReader, double ms)
|
|||
}
|
||||
|
||||
|
||||
void StreamServer::onDisconnect(ServerSession* connection)
|
||||
{
|
||||
ClientInfoPtr client = Config::instance().getClientInfo(connection->macAddress);
|
||||
client->connected = false;
|
||||
gettimeofday(&client->lastSeen, NULL);
|
||||
json notification = JsonNotification::getJson("Client.OnDisconnect", client->toJson());
|
||||
controlServer->send(notification.dump(4));
|
||||
}
|
||||
|
||||
|
||||
void StreamServer::onMessageReceived(ServerSession* connection, const msg::BaseMessage& baseMessage, char* buffer)
|
||||
{
|
||||
// logO << "getNextMessage: " << 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";
|
||||
|
@ -144,7 +154,6 @@ void StreamServer::onMessageReceived(ServerSession* connection, const msg::BaseM
|
|||
gettimeofday(&client->lastSeen, NULL);
|
||||
|
||||
json notification = JsonNotification::getJson("Client.OnConnect", client->toJson());
|
||||
logO << std::setw(4) << notification << std::endl;
|
||||
controlServer->send(notification.dump(4));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -82,6 +82,7 @@ public:
|
|||
|
||||
/// Clients call this when they receive a message. Implementation of MessageReceiver::onMessageReceived
|
||||
virtual void onMessageReceived(ServerSession* connection, const msg::BaseMessage& baseMessage, char* buffer);
|
||||
virtual void onDisconnect(ServerSession* connection);
|
||||
|
||||
/// Implementation of PipeListener
|
||||
virtual void onChunkRead(const PipeReader* pipeReader, const msg::PcmChunk* chunk, double duration);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue