trigger onDisconnect

This commit is contained in:
badaix 2015-09-01 22:53:16 +02:00
parent e05e2fdd9d
commit e5698d8ab1
4 changed files with 24 additions and 5 deletions

View file

@ -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;
} }

View file

@ -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_;

View file

@ -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));
} }
} }

View file

@ -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);