Mercurial > hg > piper-cpp
comparison utilities/vampipe-server.cpp @ 58:c38e12d4bbdd
Merge from branch outputid-string-in-featureset
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Mon, 19 Sep 2016 14:48:43 +0100 |
parents | 815e94fedc1c |
children | a5ba837bca28 |
comparison
equal
deleted
inserted
replaced
48:ce6cb3308bd7 | 58:c38e12d4bbdd |
---|---|
63 break; | 63 break; |
64 case RRType::Process: | 64 case RRType::Process: |
65 VampnProto::readVampRequest_Process(rr.processRequest, reader, mapper); | 65 VampnProto::readVampRequest_Process(rr.processRequest, reader, mapper); |
66 break; | 66 break; |
67 case RRType::Finish: | 67 case RRType::Finish: |
68 VampnProto::readVampRequest_Finish(rr.finishPlugin, reader, mapper); | 68 VampnProto::readVampRequest_Finish(rr.finishRequest, reader, mapper); |
69 break; | 69 break; |
70 case RRType::NotValid: | 70 case RRType::NotValid: |
71 break; | 71 break; |
72 } | 72 } |
73 | 73 |
78 writeResponseCapnp(RequestOrResponse &rr) | 78 writeResponseCapnp(RequestOrResponse &rr) |
79 { | 79 { |
80 ::capnp::MallocMessageBuilder message; | 80 ::capnp::MallocMessageBuilder message; |
81 VampResponse::Builder builder = message.initRoot<VampResponse>(); | 81 VampResponse::Builder builder = message.initRoot<VampResponse>(); |
82 | 82 |
83 switch (rr.type) { | 83 if (!rr.success) { |
84 | 84 |
85 case RRType::List: | 85 VampnProto::buildVampResponse_Error(builder, rr.errorText, rr.type); |
86 VampnProto::buildVampResponse_List(builder, "", rr.listResponse); | 86 |
87 break; | 87 } else { |
88 case RRType::Load: | 88 |
89 VampnProto::buildVampResponse_Load(builder, rr.loadResponse, mapper); | 89 switch (rr.type) { |
90 break; | 90 |
91 case RRType::Configure: | 91 case RRType::List: |
92 VampnProto::buildVampResponse_Configure(builder, rr.configurationResponse); | 92 VampnProto::buildVampResponse_List(builder, rr.listResponse); |
93 break; | 93 break; |
94 case RRType::Process: | 94 case RRType::Load: |
95 VampnProto::buildVampResponse_Process(builder, rr.processResponse); | 95 VampnProto::buildVampResponse_Load(builder, rr.loadResponse, mapper); |
96 break; | 96 break; |
97 case RRType::Finish: | 97 case RRType::Configure: |
98 VampnProto::buildVampResponse_Finish(builder, rr.finishResponse); | 98 VampnProto::buildVampResponse_Configure(builder, rr.configurationResponse, mapper); |
99 break; | 99 break; |
100 case RRType::NotValid: | 100 case RRType::Process: |
101 break; | 101 VampnProto::buildVampResponse_Process(builder, rr.processResponse, mapper); |
102 } | 102 break; |
103 | 103 case RRType::Finish: |
104 VampnProto::buildVampResponse_Finish(builder, rr.finishResponse, mapper); | |
105 break; | |
106 case RRType::NotValid: | |
107 break; | |
108 } | |
109 } | |
110 | |
111 writeMessageToFd(1, message); | |
112 } | |
113 | |
114 void | |
115 writeExceptionCapnp(const std::exception &e, RRType type) | |
116 { | |
117 ::capnp::MallocMessageBuilder message; | |
118 VampResponse::Builder builder = message.initRoot<VampResponse>(); | |
119 VampnProto::buildVampResponse_Exception(builder, e, type); | |
120 | |
104 writeMessageToFd(1, message); | 121 writeMessageToFd(1, message); |
105 } | 122 } |
106 | 123 |
107 RequestOrResponse | 124 RequestOrResponse |
108 handleRequest(const RequestOrResponse &request) | 125 handleRequest(const RequestOrResponse &request) |
166 throw runtime_error("wrong block size supplied to process"); | 183 throw runtime_error("wrong block size supplied to process"); |
167 } | 184 } |
168 fbuffers[i] = preq.inputBuffers[i].data(); | 185 fbuffers[i] = preq.inputBuffers[i].data(); |
169 } | 186 } |
170 | 187 |
188 response.processResponse.plugin = preq.plugin; | |
171 response.processResponse.features = | 189 response.processResponse.features = |
172 preq.plugin->process(fbuffers, preq.timestamp); | 190 preq.plugin->process(fbuffers, preq.timestamp); |
173 response.success = true; | 191 response.success = true; |
174 | 192 |
175 delete[] fbuffers; | 193 delete[] fbuffers; |
176 break; | 194 break; |
177 } | 195 } |
178 | 196 |
179 case RRType::Finish: | 197 case RRType::Finish: |
180 { | 198 { |
181 auto h = mapper.pluginToHandle(request.finishPlugin); | 199 response.finishResponse.plugin = request.finishRequest.plugin; |
182 | |
183 response.finishResponse.features = | 200 response.finishResponse.features = |
184 request.finishPlugin->getRemainingFeatures(); | 201 request.finishRequest.plugin->getRemainingFeatures(); |
185 | 202 |
186 mapper.removePlugin(h); | 203 // We do not delete the plugin here -- we need it in the |
187 delete request.finishPlugin; | 204 // mapper when converting the features. It gets deleted by the |
205 // caller. | |
206 | |
188 response.success = true; | 207 response.success = true; |
189 break; | 208 break; |
190 } | 209 } |
191 | 210 |
192 case RRType::NotValid: | 211 case RRType::NotValid: |
202 usage(); | 221 usage(); |
203 } | 222 } |
204 | 223 |
205 while (true) { | 224 while (true) { |
206 | 225 |
226 RequestOrResponse request; | |
227 | |
207 try { | 228 try { |
208 | 229 |
209 RequestOrResponse request = readRequestCapnp(); | 230 request = readRequestCapnp(); |
210 | 231 |
211 cerr << "vampipe-server: request received, of type " | 232 cerr << "vampipe-server: request received, of type " |
212 << int(request.type) | 233 << int(request.type) |
213 << endl; | 234 << endl; |
214 | 235 |
224 << endl; | 245 << endl; |
225 | 246 |
226 writeResponseCapnp(response); | 247 writeResponseCapnp(response); |
227 | 248 |
228 cerr << "vampipe-server: response written" << endl; | 249 cerr << "vampipe-server: response written" << endl; |
250 | |
251 if (request.type == RRType::Finish) { | |
252 auto h = mapper.pluginToHandle(request.finishRequest.plugin); | |
253 mapper.removePlugin(h); | |
254 delete request.finishRequest.plugin; | |
255 } | |
229 | 256 |
230 } catch (std::exception &e) { | 257 } catch (std::exception &e) { |
258 | |
231 cerr << "vampipe-server: error: " << e.what() << endl; | 259 cerr << "vampipe-server: error: " << e.what() << endl; |
260 | |
261 writeExceptionCapnp(e, request.type); | |
262 | |
232 exit(1); | 263 exit(1); |
233 } | 264 } |
234 } | 265 } |
235 | 266 |
236 exit(0); | 267 exit(0); |