Mercurial > hg > piper-vamp-js
comparison VamPipePluginLibrary.cpp @ 81:5e6ff69b4209
Make base64/text selectable when serialising process and feature blocks; add base64 version as an output format for vampipe-convert; make VamPipePluginLibrary switch to returning base64 encoding as soon as it is fed any as input
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Thu, 08 Sep 2016 15:27:48 +0100 |
parents | c2a90b45642e |
children | a313ce2577ea |
comparison
equal
deleted
inserted
replaced
80:8f2cf0e26510 | 81:5e6ff69b4209 |
---|---|
62 throw VampJson::Failure("object expected for content field"); | 62 throw VampJson::Failure("object expected for content field"); |
63 } | 63 } |
64 return j; | 64 return j; |
65 } | 65 } |
66 | 66 |
67 VamPipePluginLibrary::VamPipePluginLibrary(vector<VamPipeAdapterBase *> pp) | 67 VamPipePluginLibrary::VamPipePluginLibrary(vector<VamPipeAdapterBase *> pp) : |
68 m_useBase64(false) | |
68 { | 69 { |
69 for (VamPipeAdapterBase *p: pp) { | 70 for (VamPipeAdapterBase *p: pp) { |
70 string key = p->getStaticData().pluginKey; | 71 string key = p->getStaticData().pluginKey; |
71 m_adapters[key] = p; | 72 m_adapters[key] = p; |
72 } | 73 } |
73 } | 74 } |
74 | 75 |
75 RequestOrResponse | 76 RequestOrResponse |
76 VamPipePluginLibrary::readRequest(string req) const | 77 VamPipePluginLibrary::readRequest(string req) |
77 { | 78 { |
78 RequestOrResponse rr; | 79 RequestOrResponse rr; |
79 rr.direction = RequestOrResponse::Request; | 80 rr.direction = RequestOrResponse::Request; |
80 | 81 |
81 Json j = convertRequestJson(req); | 82 Json j = convertRequestJson(req); |
82 | 83 |
83 //!!! reduce, reduce | 84 //!!! reduce, reduce |
84 rr.type = VampJson::getRequestResponseType(j); | 85 rr.type = VampJson::getRequestResponseType(j); |
86 VampJson::BufferSerialisation serialisation = VampJson::BufferSerialisation::Text; | |
85 | 87 |
86 switch (rr.type) { | 88 switch (rr.type) { |
87 | 89 |
88 case RRType::List: | 90 case RRType::List: |
89 VampJson::toVampRequest_List(j); // type check only | 91 VampJson::toVampRequest_List(j); // type check only |
93 break; | 95 break; |
94 case RRType::Configure: | 96 case RRType::Configure: |
95 rr.configurationRequest = VampJson::toVampRequest_Configure(j, m_mapper); | 97 rr.configurationRequest = VampJson::toVampRequest_Configure(j, m_mapper); |
96 break; | 98 break; |
97 case RRType::Process: | 99 case RRType::Process: |
98 rr.processRequest = VampJson::toVampRequest_Process(j, m_mapper); | 100 rr.processRequest = VampJson::toVampRequest_Process(j, m_mapper, serialisation); |
99 break; | 101 break; |
100 case RRType::Finish: | 102 case RRType::Finish: |
101 rr.finishPlugin = VampJson::toVampRequest_Finish(j, m_mapper); | 103 rr.finishPlugin = VampJson::toVampRequest_Finish(j, m_mapper); |
102 break; | 104 break; |
103 case RRType::NotValid: | 105 case RRType::NotValid: |
104 break; | 106 break; |
105 } | 107 } |
106 | 108 |
109 if (serialisation == VampJson::BufferSerialisation::Base64) { | |
110 m_useBase64 = true; | |
111 } | |
112 | |
107 return rr; | 113 return rr; |
108 } | 114 } |
109 | 115 |
110 string | 116 string |
111 VamPipePluginLibrary::writeResponse(const RequestOrResponse &rr) const | 117 VamPipePluginLibrary::writeResponse(const RequestOrResponse &rr) const |
112 { | 118 { |
113 Json j; | 119 Json j; |
114 | 120 |
121 VampJson::BufferSerialisation serialisation = | |
122 (m_useBase64 ? | |
123 VampJson::BufferSerialisation::Base64 : | |
124 VampJson::BufferSerialisation::Text); | |
125 | |
115 switch (rr.type) { | 126 switch (rr.type) { |
116 | 127 |
117 case RRType::List: | 128 case RRType::List: |
118 j = VampJson::fromVampResponse_List("", rr.listResponse); | 129 j = VampJson::fromVampResponse_List("", rr.listResponse); |
119 break; | 130 break; |
122 break; | 133 break; |
123 case RRType::Configure: | 134 case RRType::Configure: |
124 j = VampJson::fromVampResponse_Configure(rr.configurationResponse); | 135 j = VampJson::fromVampResponse_Configure(rr.configurationResponse); |
125 break; | 136 break; |
126 case RRType::Process: | 137 case RRType::Process: |
127 j = VampJson::fromVampResponse_Process(rr.processResponse); | 138 j = VampJson::fromVampResponse_Process(rr.processResponse, serialisation); |
128 break; | 139 break; |
129 case RRType::Finish: | 140 case RRType::Finish: |
130 j = VampJson::fromVampResponse_Finish(rr.finishResponse); | 141 j = VampJson::fromVampResponse_Finish(rr.finishResponse, serialisation); |
131 break; | 142 break; |
132 case RRType::NotValid: | 143 case RRType::NotValid: |
133 break; | 144 break; |
134 } | 145 } |
135 | 146 |
187 RequestOrResponse request; | 198 RequestOrResponse request; |
188 | 199 |
189 try { | 200 try { |
190 request = readRequest(req); | 201 request = readRequest(req); |
191 } catch (const std::exception &e) { | 202 } catch (const std::exception &e) { |
203 std::cerr << "FAILURE" << std::endl; | |
192 return VampJson::fromException(e, RRType::NotValid).dump(); | 204 return VampJson::fromException(e, RRType::NotValid).dump(); |
193 } | 205 } |
194 | 206 |
195 RequestOrResponse response; | 207 RequestOrResponse response; |
196 response.direction = RequestOrResponse::Response; | 208 response.direction = RequestOrResponse::Response; |
251 } | 263 } |
252 fbuffers[i] = preq.inputBuffers[i].data(); | 264 fbuffers[i] = preq.inputBuffers[i].data(); |
253 } | 265 } |
254 | 266 |
255 response.processResponse.features = | 267 response.processResponse.features = |
256 preq.plugin->process(fbuffers, preq.timestamp); | 268 preq.plugin->process(fbuffers, preq.timestamp); |
257 response.success = true; | 269 response.success = true; |
258 | 270 |
259 delete[] fbuffers; | 271 delete[] fbuffers; |
260 break; | 272 break; |
261 } | 273 } |