Mercurial > hg > piper-cpp
comparison utilities/vampipe-server.cpp @ 32:2d97883d20df
Wire up a couple of server actions
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Tue, 24 May 2016 17:17:03 +0100 |
parents | b376ab0ce003 |
children | 0b48b10140bb |
comparison
equal
deleted
inserted
replaced
31:b376ab0ce003 | 32:2d97883d20df |
---|---|
5 | 5 |
6 #include <iostream> | 6 #include <iostream> |
7 #include <sstream> | 7 #include <sstream> |
8 #include <stdexcept> | 8 #include <stdexcept> |
9 | 9 |
10 #include <map> | |
11 #include <set> | |
12 | |
10 using namespace std; | 13 using namespace std; |
11 using namespace vampipe; | 14 using namespace vampipe; |
15 using namespace Vamp; | |
16 using namespace Vamp::HostExt; | |
12 | 17 |
13 void usage() | 18 void usage() |
14 { | 19 { |
15 string myname = "vampipe-server"; | 20 string myname = "vampipe-server"; |
16 cerr << "\n" << myname << | 21 cerr << "\n" << myname << |
20 "and writes Vamp response messages in the same format to stdout.\n\n"; | 25 "and writes Vamp response messages in the same format to stdout.\n\n"; |
21 | 26 |
22 exit(2); | 27 exit(2); |
23 } | 28 } |
24 | 29 |
30 class Mapper : public PluginHandleMapper | |
31 { | |
32 public: | |
33 Mapper() : m_nextHandle(1) { } | |
34 | |
35 void addPlugin(Plugin *p) { | |
36 if (m_rplugins.find(p) == m_rplugins.end()) { | |
37 int32_t h = m_nextHandle++; | |
38 m_plugins[h] = p; | |
39 m_rplugins[p] = h; | |
40 } | |
41 } | |
42 | |
43 int32_t pluginToHandle(Plugin *p) { | |
44 if (m_rplugins.find(p) == m_rplugins.end()) { | |
45 throw NotFound(); | |
46 } | |
47 return m_rplugins[p]; | |
48 } | |
49 | |
50 Plugin *handleToPlugin(int32_t h) { | |
51 if (m_plugins.find(h) == m_plugins.end()) { | |
52 throw NotFound(); | |
53 } | |
54 return m_plugins[h]; | |
55 } | |
56 | |
57 bool isInitialised(int32_t h) { | |
58 return m_initialisedPlugins.find(h) != m_initialisedPlugins.end(); | |
59 } | |
60 | |
61 void markInitialised(int32_t h) { | |
62 m_initialisedPlugins.insert(h); | |
63 } | |
64 | |
65 private: | |
66 int32_t m_nextHandle; // NB plugin handle type must fit in JSON number | |
67 map<uint32_t, Plugin *> m_plugins; | |
68 map<Plugin *, uint32_t> m_rplugins; | |
69 set<uint32_t> m_initialisedPlugins; | |
70 }; | |
71 | |
72 static Mapper mapper; | |
73 | |
25 RequestOrResponse | 74 RequestOrResponse |
26 readRequestCapnp() | 75 readRequestCapnp() |
27 { | 76 { |
28 RequestOrResponse rr; | 77 RequestOrResponse rr; |
29 rr.direction = RequestOrResponse::Request; | 78 rr.direction = RequestOrResponse::Request; |
40 break; | 89 break; |
41 case RRType::Load: | 90 case RRType::Load: |
42 VampnProto::readVampRequest_Load(rr.loadRequest, reader); | 91 VampnProto::readVampRequest_Load(rr.loadRequest, reader); |
43 break; | 92 break; |
44 case RRType::Configure: | 93 case RRType::Configure: |
45 VampnProto::readVampRequest_Configure(rr.configurationRequest, reader, | 94 VampnProto::readVampRequest_Configure(rr.configurationRequest, |
46 rr.mapper); | 95 reader, mapper); |
47 break; | 96 break; |
48 case RRType::Process: | 97 case RRType::Process: |
49 VampnProto::readVampRequest_Process(rr.processRequest, reader, | 98 VampnProto::readVampRequest_Process(rr.processRequest, reader, mapper); |
50 rr.mapper); | |
51 break; | 99 break; |
52 case RRType::Finish: | 100 case RRType::Finish: |
53 VampnProto::readVampRequest_Finish(rr.finishPlugin, reader, | 101 VampnProto::readVampRequest_Finish(rr.finishPlugin, reader, mapper); |
54 rr.mapper); | |
55 break; | 102 break; |
56 case RRType::NotValid: | 103 case RRType::NotValid: |
57 break; | 104 break; |
58 } | 105 } |
59 | 106 |
70 | 117 |
71 case RRType::List: | 118 case RRType::List: |
72 VampnProto::buildVampResponse_List(builder, "", rr.listResponse); | 119 VampnProto::buildVampResponse_List(builder, "", rr.listResponse); |
73 break; | 120 break; |
74 case RRType::Load: | 121 case RRType::Load: |
75 VampnProto::buildVampResponse_Load(builder, rr.loadResponse, rr.mapper); | 122 VampnProto::buildVampResponse_Load(builder, rr.loadResponse, mapper); |
76 break; | 123 break; |
77 case RRType::Configure: | 124 case RRType::Configure: |
78 VampnProto::buildVampResponse_Configure(builder, rr.configurationResponse); | 125 VampnProto::buildVampResponse_Configure(builder, rr.configurationResponse); |
79 break; | 126 break; |
80 case RRType::Process: | 127 case RRType::Process: |
93 RequestOrResponse | 140 RequestOrResponse |
94 processRequest(const RequestOrResponse &request) | 141 processRequest(const RequestOrResponse &request) |
95 { | 142 { |
96 RequestOrResponse response; | 143 RequestOrResponse response; |
97 response.direction = RequestOrResponse::Response; | 144 response.direction = RequestOrResponse::Response; |
98 //!!! DO THE WORK! | 145 response.type = request.type; |
146 | |
147 auto loader = PluginLoader::getInstance(); | |
148 | |
149 switch (request.type) { | |
150 | |
151 case RRType::List: | |
152 response.listResponse = loader->listPluginData(); | |
153 response.success = true; | |
154 break; | |
155 | |
156 case RRType::Load: | |
157 response.loadResponse = loader->loadPlugin(request.loadRequest); | |
158 if (response.loadResponse.plugin != nullptr) { | |
159 mapper.addPlugin(response.loadResponse.plugin); | |
160 response.success = true; | |
161 } | |
162 break; | |
163 | |
164 default: | |
165 //!!! | |
166 ; | |
167 } | |
168 | |
99 return response; | 169 return response; |
100 } | 170 } |
101 | 171 |
102 int main(int argc, char **argv) | 172 int main(int argc, char **argv) |
103 { | 173 { |