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()
{
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;
}

View file

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

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)
{
// 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));
}
}

View file

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