comparison vamp-client/qt/ProcessQtTransport.h @ 170:590b1a1fd955

More work on error and exception handling
author Chris Cannam <cannam@all-day-breakfast.com>
date Tue, 31 Jan 2017 14:53:24 +0000
parents 6ccb195d6de6
children ce42f0bebae3
comparison
equal deleted inserted replaced
169:f13dc1db2229 170:590b1a1fd955
35 35
36 #ifndef PIPER_PROCESS_QT_TRANSPORT_H 36 #ifndef PIPER_PROCESS_QT_TRANSPORT_H
37 #define PIPER_PROCESS_QT_TRANSPORT_H 37 #define PIPER_PROCESS_QT_TRANSPORT_H
38 38
39 #include "../SynchronousTransport.h" 39 #include "../SynchronousTransport.h"
40 #include "../Exceptions.h"
40 41
41 #include <QProcess> 42 #include <QProcess>
42 #include <QString> 43 #include <QString>
43 #include <QMutex> 44 #include <QMutex>
44 #include <QTime> 45 #include <QTime>
179 if (!byteCount) { 180 if (!byteCount) {
180 181
181 if (responseStarted) { 182 if (responseStarted) {
182 if (duringResponseTimeout > 0 && ms > duringResponseTimeout) { 183 if (duringResponseTimeout > 0 && ms > duringResponseTimeout) {
183 log("Server timed out during response"); 184 log("Server timed out during response");
184 throw std::runtime_error("Request timed out"); 185 m_crashed = true;
186 throw RequestTimedOut();
185 } 187 }
186 } else { 188 } else {
187 if (beforeResponseTimeout > 0 && ms > beforeResponseTimeout) { 189 if (beforeResponseTimeout > 0 && ms > beforeResponseTimeout) {
188 log("Server timed out before response"); 190 log("Server timed out before response");
189 throw std::runtime_error("Request timed out"); 191 m_crashed = true;
192 throw RequestTimedOut();
190 } 193 }
191 } 194 }
192 195
193 #ifdef DEBUG_TRANSPORT 196 #ifdef DEBUG_TRANSPORT
194 std::cerr << "waiting for data from server (slow = " << slow << ")..." << std::endl; 197 std::cerr << "waiting for data from server (slow = " << slow << ")..." << std::endl;
228 buffer.resize(formerSize + byteCount); 231 buffer.resize(formerSize + byteCount);
229 m_process->read(buffer.data() + formerSize, byteCount); 232 m_process->read(buffer.data() + formerSize, byteCount);
230 switch (m_completenessChecker->check(buffer)) { 233 switch (m_completenessChecker->check(buffer)) {
231 case MessageCompletenessChecker::Complete: complete = true; break; 234 case MessageCompletenessChecker::Complete: complete = true; break;
232 case MessageCompletenessChecker::Incomplete: break; 235 case MessageCompletenessChecker::Incomplete: break;
233 case MessageCompletenessChecker::Invalid: 236 case MessageCompletenessChecker::Invalid: throw ProtocolError();
234 throw std::runtime_error
235 ("Invalid message received: corrupt stream from server?");
236 } 237 }
237 (void)t.restart(); // reset timeout when we read anything 238 (void)t.restart(); // reset timeout when we read anything
238 } 239 }
239 } 240 }
240 241