diff vamp-client/PipedQProcessTransport.h @ 92:21f8af53eaf0

Reorganise some classes
author Chris Cannam <c.cannam@qmul.ac.uk>
date Thu, 13 Oct 2016 12:02:44 +0100
parents 6429a99abcad
children
line wrap: on
line diff
--- a/vamp-client/PipedQProcessTransport.h	Thu Oct 13 11:33:19 2016 +0100
+++ b/vamp-client/PipedQProcessTransport.h	Thu Oct 13 12:02:44 2016 +0100
@@ -14,9 +14,8 @@
 class PipedQProcessTransport : public SynchronousTransport
 {
 public:
-    PipedQProcessTransport(QString processName,
-                           MessageCompletenessChecker *checker) : //!!! ownership
-        m_completenessChecker(checker) {
+    PipedQProcessTransport(QString processName) :
+        m_completenessChecker(0) {
         m_process = new QProcess();
         m_process->setReadChannel(QProcess::StandardOutput);
         m_process->setProcessChannelMode(QProcess::ForwardedErrorChannel);
@@ -41,47 +40,47 @@
         }
     }
 
-    bool isOK() const override {
+    void
+    setCompletenessChecker(MessageCompletenessChecker *checker) {
+        //!!! ownership?
+        m_completenessChecker = checker;
+    }
+    
+    bool
+    isOK() const override {
         return m_process != nullptr;
     }
     
     std::vector<char>
     call(const char *ptr, size_t size) override {
 
+        if (!m_completenessChecker) {
+            throw std::logic_error("No completeness checker set on transport");
+        }
+        
         m_process->write(ptr, size);
         
         std::vector<char> buffer;
-        size_t wordSize = sizeof(capnp::word);
         bool complete = false;
         
         while (!complete) {
 
             m_process->waitForReadyRead(1000);
             qint64 byteCount = m_process->bytesAvailable();
-            qint64 wordCount = byteCount / wordSize;
 
-            if (!wordCount) {
+            if (!byteCount) {
                 if (m_process->state() == QProcess::NotRunning) {
                     std::cerr << "ERROR: Subprocess exited: Load failed" << std::endl;
                     throw std::runtime_error("Piper server exited unexpectedly");
                 }
             } else {
-                // only read whole words
-                byteCount = wordCount * wordSize;
                 size_t formerSize = buffer.size();
                 buffer.resize(formerSize + byteCount);
                 m_process->read(buffer.data() + formerSize, byteCount);
                 complete = m_completenessChecker->isComplete(buffer);
             }
         }
-/*
-        cerr << "buffer = ";
-        for (int i = 0; i < buffer.size(); ++i) {
-            if (i % 16 == 0) cerr << "\n";
-            cerr << int(buffer[i]) << " ";
-        }
-        cerr << "\n";
-*/        
+
         return buffer;
     }