diff vamp-client/ProcessQtTransport.h @ 134:3dcf0394971d

Debug output improvements, and make the checker actually attempt to call the descriptor function for known plugin types
author Chris Cannam <c.cannam@qmul.ac.uk>
date Wed, 16 Nov 2016 16:12:42 +0000
parents 2004ec2b653e
children 228a66adfb30
line wrap: on
line diff
--- a/vamp-client/ProcessQtTransport.h	Fri Nov 04 10:43:49 2016 +0000
+++ b/vamp-client/ProcessQtTransport.h	Wed Nov 16 16:12:42 2016 +0000
@@ -63,7 +63,10 @@
 class ProcessQtTransport : public SynchronousTransport
 {
 public:
-    ProcessQtTransport(std::string processName, std::string formatArg) :
+    ProcessQtTransport(std::string processName,
+                       std::string formatArg,
+                       LogCallback *logger) : // logger may be nullptr for cerr
+        m_logger(logger),
         m_completenessChecker(0),
         m_crashed(false) {
 
@@ -78,20 +81,22 @@
             if (m_process->state() == QProcess::NotRunning) {
                 QProcess::ProcessError err = m_process->error();
                 if (err == QProcess::FailedToStart) {
-                    std::cerr << "Unable to start server process "
-                              << processName << std::endl;
+                    log("Unable to start server process " + processName);
                 } else if (err == QProcess::Crashed) {
-                    std::cerr << "Server process " << processName
-                              << " crashed on startup" << std::endl;
+                    log("Server process " + processName + " crashed on startup");
                 } else {
-                    std::cerr << "Server process " << processName
-                              << " failed on startup with error code "
-                              << err << std::endl;
+                    QString e = QString("%1").arg(err);
+                    log("Server process " + processName +
+                        " failed on startup with error code " + e.toStdString());
                 }
                 delete m_process;
                 m_process = nullptr;
             }
         }
+
+        if (m_process) {
+            log("Server process " + processName + " started OK");
+        }
     }
 
     ~ProcessQtTransport() {
@@ -101,9 +106,7 @@
                 m_process->waitForFinished(200);
                 m_process->close();
                 m_process->waitForFinished();
-#ifdef DEBUG_TRANSPORT
-                std::cerr << "server exited" << std::endl;
-#endif
+                log("Server process exited normally");
             }
             delete m_process;
         }
@@ -120,14 +123,16 @@
     }
     
     std::vector<char>
-    call(const char *ptr, size_t size, bool slow) override {
+    call(const char *ptr, size_t size, std::string type, bool slow) override {
 
         QMutexLocker locker(&m_mutex);
         
         if (!m_completenessChecker) {
+            log("call: No completeness checker set on transport");
             throw std::logic_error("No completeness checker set on transport");
         }
         if (!isOK()) {
+            log("call: Transport is not OK");
             throw std::logic_error("Transport is not OK");
         }
         
@@ -169,10 +174,11 @@
                     !m_process->bytesAvailable()) {
                     QProcess::ProcessError err = m_process->error();
                     if (err == QProcess::Crashed) {
-                        std::cerr << "Server crashed during request" << std::endl;
+                        log("Server crashed during " + type + " request");
                     } else {
-                        std::cerr << "Server failed during request with error code "
-                                  << err << std::endl;
+                        QString e = QString("%1").arg(err);
+                        log("Server failed during " + type
+                            + " request with error code " + e.toStdString());
                     }
                     m_crashed = true;
                     throw ServerCrashed();
@@ -189,10 +195,16 @@
     }
     
 private:
+    LogCallback *m_logger;
     MessageCompletenessChecker *m_completenessChecker; //!!! I don't own this (currently)
     QProcess *m_process; // I own this
     QMutex m_mutex;
     bool m_crashed;
+
+    void log(std::string message) const {
+        if (m_logger) m_logger->log(message);
+        else std::cerr << message << std::endl;
+    }
 };
 
 }