diff --git a/main.cpp b/main.cpp index b5349592..66ab2f11 100644 --- a/main.cpp +++ b/main.cpp @@ -41,6 +41,11 @@ int main(int argc, char * argv[]) { piCout << "[Server] data from" << cl << ":" << str; if (str == "ping") cl->write(PIString("pong").toByteArray()); })); + CONNECTL(cl, closed, ([&clients, cl](){ + cl->stop(); + clients.removeAll(cl); + cl->deleteLater(); + })); cl->startThreadedRead(); })); if (cli.hasArgument("name")) s.setServerName(cli.argumentValue("name")); diff --git a/utils/cloud_dispatcher/cloudserver.cpp b/utils/cloud_dispatcher/cloudserver.cpp index 8080b1da..3a25a7d0 100644 --- a/utils/cloud_dispatcher/cloudserver.cpp +++ b/utils/cloud_dispatcher/cloudserver.cpp @@ -39,6 +39,7 @@ void CloudServer::addClient(DispatcherClient * c) { void CloudServer::removeClient(DispatcherClient * c) { clients.removeOne(c); index_clients.removeOne(c->clientId()); + server->sendDisconnected(c->clientId()); } diff --git a/utils/cloud_dispatcher/dispatcherclient.cpp b/utils/cloud_dispatcher/dispatcherclient.cpp index 0faf1fd1..289e6e1d 100644 --- a/utils/cloud_dispatcher/dispatcherclient.cpp +++ b/utils/cloud_dispatcher/dispatcherclient.cpp @@ -36,6 +36,11 @@ void DispatcherClient::sendConnected(uint client_id) { } +void DispatcherClient::sendDisconnected(uint client_id) { + tcp.sendDisconnected(client_id); +} + + void DispatcherClient::sendData(const PIByteArray & data) { if (tcp.role() == PICloud::TCP::Client) tcp.sendData(data); else piCoutObj << "error sendData, invalid role"; diff --git a/utils/cloud_dispatcher/dispatcherclient.h b/utils/cloud_dispatcher/dispatcherclient.h index 1df69102..de6d016e 100644 --- a/utils/cloud_dispatcher/dispatcherclient.h +++ b/utils/cloud_dispatcher/dispatcherclient.h @@ -14,6 +14,7 @@ public: void start(); void close(); void sendConnected(uint client_id); + void sendDisconnected(uint client_id); void sendData(const PIByteArray & data); void sendDataToClient(const PIByteArray & data, uint client_id); void authorise(bool ok);