Mercurial > hg > piper-cpp
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; }