Mercurial > hg > piper-cpp
comparison utilities/vampipe-server.cpp @ 73:7bfc07576830
Ensure id is passed through properly in convert and in server
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Mon, 10 Oct 2016 15:03:47 +0100 |
parents | a5ba837bca28 |
children |
comparison
equal
deleted
inserted
replaced
72:16acd7d24b1a | 73:7bfc07576830 |
---|---|
28 exit(2); | 28 exit(2); |
29 } | 29 } |
30 | 30 |
31 static CountingPluginHandleMapper mapper; | 31 static CountingPluginHandleMapper mapper; |
32 | 32 |
33 static RequestOrResponse::RpcId readId(const RpcRequest::Reader &r) | |
34 { | |
35 int number; | |
36 string tag; | |
37 switch (r.getId().which()) { | |
38 case RpcRequest::Id::Which::NUMBER: | |
39 number = r.getId().getNumber(); | |
40 return { RequestOrResponse::RpcId::Number, number, "" }; | |
41 case RpcRequest::Id::Which::TAG: | |
42 tag = r.getId().getTag(); | |
43 return { RequestOrResponse::RpcId::Tag, 0, tag }; | |
44 case RpcRequest::Id::Which::NONE: | |
45 return { RequestOrResponse::RpcId::Absent, 0, "" }; | |
46 } | |
47 return {}; | |
48 } | |
49 | |
50 static void buildId(RpcResponse::Builder &b, const RequestOrResponse::RpcId &id) | |
51 { | |
52 switch (id.type) { | |
53 case RequestOrResponse::RpcId::Number: | |
54 b.getId().setNumber(id.number); | |
55 break; | |
56 case RequestOrResponse::RpcId::Tag: | |
57 b.getId().setTag(id.tag); | |
58 break; | |
59 case RequestOrResponse::RpcId::Absent: | |
60 b.getId().setNone(); | |
61 break; | |
62 } | |
63 } | |
64 | |
33 RequestOrResponse | 65 RequestOrResponse |
34 readRequestCapnp() | 66 readRequestCapnp() |
35 { | 67 { |
36 RequestOrResponse rr; | 68 RequestOrResponse rr; |
37 rr.direction = RequestOrResponse::Request; | 69 rr.direction = RequestOrResponse::Request; |
46 | 78 |
47 ::capnp::InputStreamMessageReader message(buffered); | 79 ::capnp::InputStreamMessageReader message(buffered); |
48 RpcRequest::Reader reader = message.getRoot<RpcRequest>(); | 80 RpcRequest::Reader reader = message.getRoot<RpcRequest>(); |
49 | 81 |
50 rr.type = VampnProto::getRequestResponseType(reader); | 82 rr.type = VampnProto::getRequestResponseType(reader); |
83 rr.id = readId(reader); | |
51 | 84 |
52 switch (rr.type) { | 85 switch (rr.type) { |
53 | 86 |
54 case RRType::List: | 87 case RRType::List: |
55 VampnProto::readRpcRequest_List(reader); // type check only | 88 VampnProto::readRpcRequest_List(reader); // type check only |
78 writeResponseCapnp(RequestOrResponse &rr) | 111 writeResponseCapnp(RequestOrResponse &rr) |
79 { | 112 { |
80 ::capnp::MallocMessageBuilder message; | 113 ::capnp::MallocMessageBuilder message; |
81 RpcResponse::Builder builder = message.initRoot<RpcResponse>(); | 114 RpcResponse::Builder builder = message.initRoot<RpcResponse>(); |
82 | 115 |
116 buildId(builder, rr.id); | |
117 | |
83 if (!rr.success) { | 118 if (!rr.success) { |
84 | 119 |
85 VampnProto::buildRpcResponse_Error(builder, rr.errorText, rr.type); | 120 VampnProto::buildRpcResponse_Error(builder, rr.errorText, rr.type); |
86 | 121 |
87 } else { | 122 } else { |
238 cerr << "vampipe-server: eof reached" << endl; | 273 cerr << "vampipe-server: eof reached" << endl; |
239 break; | 274 break; |
240 } | 275 } |
241 | 276 |
242 RequestOrResponse response = handleRequest(request); | 277 RequestOrResponse response = handleRequest(request); |
278 response.id = request.id; | |
243 | 279 |
244 cerr << "vampipe-server: request handled, writing response" | 280 cerr << "vampipe-server: request handled, writing response" |
245 << endl; | 281 << endl; |
246 | 282 |
247 writeResponseCapnp(response); | 283 writeResponseCapnp(response); |