Browse Source

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.
rdb 3 years ago
parent
commit
1fa446e183

+ 14 - 5
pandatool/src/gtk-stats/gtkStatsServer.cxx

@@ -69,12 +69,21 @@ make_monitor(const NetAddress &address) {
  */
  */
 void GtkStatsServer::
 void GtkStatsServer::
 lost_connection(PStatMonitor *monitor) {
 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 {
   } 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();
   stop_listening();

+ 14 - 5
pandatool/src/win-stats/winStatsServer.cxx

@@ -81,12 +81,21 @@ make_monitor(const NetAddress &address) {
  */
  */
 void WinStatsServer::
 void WinStatsServer::
 lost_connection(PStatMonitor *monitor) {
 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 {
   } 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();
   stop_listening();