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 }