From 1fa446e183cc3443d2244e45235918b6d2d82f02 Mon Sep 17 00:00:00 2001 From: rdb Date: Tue, 29 Nov 2022 16:52:58 +0100 Subject: [PATCH] pstats: Start new session if client disconnects before sending data This provides a better UX; if the client disconnects after the graphs open, it's quite obvious that there's still a PStats session open, but otherwise it's not obvious (and a little annoying) if you have to realize that PStats is no longer listening and you have to start a new session. --- pandatool/src/gtk-stats/gtkStatsServer.cxx | 19 ++++++++++++++----- pandatool/src/win-stats/winStatsServer.cxx | 19 ++++++++++++++----- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/pandatool/src/gtk-stats/gtkStatsServer.cxx b/pandatool/src/gtk-stats/gtkStatsServer.cxx index 3693a7571f..ae81157c4e 100644 --- a/pandatool/src/gtk-stats/gtkStatsServer.cxx +++ b/pandatool/src/gtk-stats/gtkStatsServer.cxx @@ -69,12 +69,21 @@ make_monitor(const NetAddress &address) { */ void GtkStatsServer:: lost_connection(PStatMonitor *monitor) { - // Store a backup now, in case PStats crashes or something. - _last_session.make_dir(); - if (monitor->write(_last_session)) { - nout << "Wrote to " << _last_session << "\n"; + if (_monitor != nullptr && !_monitor->_have_data) { + // We didn't have any data yet. Just silently restart the session. + _monitor->close(); + _monitor = nullptr; + if (new_session()) { + return; + } } else { - nout << "Failed to write to " << _last_session << "\n"; + // Store a backup now, in case PStats crashes or something. + _last_session.make_dir(); + if (monitor->write(_last_session)) { + nout << "Wrote to " << _last_session << "\n"; + } else { + nout << "Failed to write to " << _last_session << "\n"; + } } stop_listening(); diff --git a/pandatool/src/win-stats/winStatsServer.cxx b/pandatool/src/win-stats/winStatsServer.cxx index 4664d22425..63834a2565 100644 --- a/pandatool/src/win-stats/winStatsServer.cxx +++ b/pandatool/src/win-stats/winStatsServer.cxx @@ -81,12 +81,21 @@ make_monitor(const NetAddress &address) { */ void WinStatsServer:: lost_connection(PStatMonitor *monitor) { - // Store a backup now, in case PStats crashes or something. - _last_session.make_dir(); - if (monitor->write(_last_session)) { - nout << "Wrote to " << _last_session << "\n"; + if (_monitor != nullptr && !_monitor->_have_data) { + // We didn't have any data yet. Just silently restart the session. + _monitor->close(); + _monitor = nullptr; + if (new_session()) { + return; + } } else { - nout << "Failed to write to " << _last_session << "\n"; + // Store a backup now, in case PStats crashes or something. + _last_session.make_dir(); + if (monitor->write(_last_session)) { + nout << "Wrote to " << _last_session << "\n"; + } else { + nout << "Failed to write to " << _last_session << "\n"; + } } stop_listening();