mirror of
https://github.com/badaix/snapcast.git
synced 2025-05-16 18:46:15 +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()
|
void ServerSession::stop()
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> mlock(mutex_);
|
std::unique_lock<std::mutex> mlock(mutex_);
|
||||||
active_ = false;
|
setActive(false);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
boost::system::error_code ec;
|
boost::system::error_code ec;
|
||||||
|
@ -146,7 +146,6 @@ void ServerSession::getNextMessage()
|
||||||
|
|
||||||
void ServerSession::reader()
|
void ServerSession::reader()
|
||||||
{
|
{
|
||||||
active_ = true;
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
while (active_)
|
while (active_)
|
||||||
|
@ -158,7 +157,7 @@ void ServerSession::reader()
|
||||||
{
|
{
|
||||||
logS(kLogErr) << "Exception in ServerSession::reader(): " << e.what() << endl;
|
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;
|
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:
|
public:
|
||||||
virtual void onMessageReceived(ServerSession* connection, const msg::BaseMessage& baseMessage, char* buffer) = 0;
|
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 getNextMessage();
|
||||||
void reader();
|
void reader();
|
||||||
void writer();
|
void writer();
|
||||||
|
void setActive(bool active);
|
||||||
|
|
||||||
std::atomic<bool> active_;
|
std::atomic<bool> active_;
|
||||||
std::atomic<bool> streamActive_;
|
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)
|
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";
|
// 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);
|
gettimeofday(&client->lastSeen, NULL);
|
||||||
|
|
||||||
json notification = JsonNotification::getJson("Client.OnConnect", client->toJson());
|
json notification = JsonNotification::getJson("Client.OnConnect", client->toJson());
|
||||||
logO << std::setw(4) << notification << std::endl;
|
|
||||||
controlServer->send(notification.dump(4));
|
controlServer->send(notification.dump(4));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,6 +82,7 @@ public:
|
||||||
|
|
||||||
/// Clients call this when they receive a message. Implementation of MessageReceiver::onMessageReceived
|
/// 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 onMessageReceived(ServerSession* connection, const msg::BaseMessage& baseMessage, char* buffer);
|
||||||
|
virtual void onDisconnect(ServerSession* connection);
|
||||||
|
|
||||||
/// Implementation of PipeListener
|
/// Implementation of PipeListener
|
||||||
virtual void onChunkRead(const PipeReader* pipeReader, const msg::PcmChunk* chunk, double duration);
|
virtual void onChunkRead(const PipeReader* pipeReader, const msg::PcmChunk* chunk, double duration);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue