diff vamp-client/CapnpRRClient.h @ 126:2004ec2b653e

Ensure we read right up to end of buffered data after server exits; adjust waiting schedule on Windows (where waitForReadyRead is far too wasteful of sleep time)
author Chris Cannam <c.cannam@qmul.ac.uk>
date Fri, 28 Oct 2016 14:31:58 +0100
parents ff3fd8d1b2dc
children 183fe1f03980
line wrap: on
line diff
--- a/vamp-client/CapnpRRClient.h	Fri Oct 28 11:08:17 2016 +0100
+++ b/vamp-client/CapnpRRClient.h	Fri Oct 28 14:31:58 2016 +0100
@@ -102,7 +102,7 @@
     listPluginData() override {
 
         if (!m_transport->isOK()) {
-            throw std::runtime_error("Piper server failed to start");
+            throw std::runtime_error("Piper server crashed or failed to start");
         }
 
         capnp::MallocMessageBuilder message;
@@ -111,7 +111,7 @@
         ReqId id = getId();
         builder.getId().setNumber(id);
 
-        auto karr = call(message);
+        auto karr = call(message, true);
 
         capnp::FlatArrayMessageReader responseMessage(karr);
         piper::RpcResponse::Reader reader = responseMessage.getRoot<piper::RpcResponse>();
@@ -127,7 +127,7 @@
     loadPlugin(const LoadRequest &req) override {
 
         if (!m_transport->isOK()) {
-            throw std::runtime_error("Piper server failed to start");
+            throw std::runtime_error("Piper server crashed or failed to start");
         }
 
         LoadResponse resp;
@@ -158,7 +158,7 @@
               PluginConfiguration config) override {
 
         if (!m_transport->isOK()) {
-            throw std::runtime_error("Piper server failed to start");
+            throw std::runtime_error("Piper server crashed or failed to start");
         }
 
         ConfigurationRequest request;
@@ -172,7 +172,7 @@
         ReqId id = getId();
         builder.getId().setNumber(id);
 
-        auto karr = call(message);
+        auto karr = call(message, true);
 
         capnp::FlatArrayMessageReader responseMessage(karr);
         piper::RpcResponse::Reader reader = responseMessage.getRoot<piper::RpcResponse>();
@@ -196,7 +196,7 @@
             Vamp::RealTime timestamp) override {
 
         if (!m_transport->isOK()) {
-            throw std::runtime_error("Piper server failed to start");
+            throw std::runtime_error("Piper server crashed or failed to start");
         }
 
         ProcessRequest request;
@@ -210,7 +210,7 @@
         ReqId id = getId();
         builder.getId().setNumber(id);
 
-        auto karr = call(message);
+        auto karr = call(message, false);
 
         capnp::FlatArrayMessageReader responseMessage(karr);
         piper::RpcResponse::Reader reader = responseMessage.getRoot<piper::RpcResponse>();
@@ -231,7 +231,7 @@
     finish(PluginStub *plugin) override {
 
         if (!m_transport->isOK()) {
-            throw std::runtime_error("Piper server failed to start");
+            throw std::runtime_error("Piper server crashed or failed to start");
         }
 
         FinishRequest request;
@@ -244,7 +244,7 @@
         ReqId id = getId();
         builder.getId().setNumber(id);
         
-        auto karr = call(message);
+        auto karr = call(message, true);
 
         capnp::FlatArrayMessageReader responseMessage(karr);
         piper::RpcResponse::Reader reader = responseMessage.getRoot<piper::RpcResponse>();
@@ -273,7 +273,7 @@
         // Reload the plugin on the server side, and configure it as requested
         
         if (!m_transport->isOK()) {
-            throw std::runtime_error("Piper server failed to start");
+            throw std::runtime_error("Piper server crashed or failed to start");
         }
 
         if (m_mapper.havePlugin(plugin)) {
@@ -334,10 +334,11 @@
     }
 
     kj::Array<capnp::word>
-    call(capnp::MallocMessageBuilder &message) {
+    call(capnp::MallocMessageBuilder &message, bool slow) {
         auto arr = capnp::messageToFlatArray(message);
         auto responseBuffer = m_transport->call(arr.asChars().begin(),
-                                                arr.asChars().size());
+                                                arr.asChars().size(),
+                                                slow);
         return toKJArray(responseBuffer);
     }
     
@@ -358,7 +359,7 @@
         ReqId id = getId();
         builder.getId().setNumber(id);
 
-        auto karr = call(message);
+        auto karr = call(message, false);
 
         //!!! ... --> will also need some way to kill this process
         //!!! (from another thread)