Communicate over the socket instead of STDIN

This commit is contained in:
Robbert van der Helm
2020-02-24 16:43:04 +01:00
parent df47104297
commit 5c946fff6a
3 changed files with 16 additions and 17 deletions
+12 -13
View File
@@ -16,6 +16,7 @@
#pragma once
#include <boost/asio/buffer.hpp>
#include <cinttypes>
#include <iostream>
#include <msgpack.hpp>
@@ -66,15 +67,14 @@ struct EventResult {
*
* @relates read_object
*/
template <typename T, typename Stream>
inline void write_object(Stream& stream, const T& object) {
template <typename T, typename Socket>
inline void write_object(Socket& socket, const T& object) {
// TODO: Reuse buffers
// TODO: Use boost's buffers directly after switching to bitsery
msgpack::sbuffer buffer;
msgpack::pack(buffer, object);
stream << buffer.size();
stream.write(buffer.data(), buffer.size());
stream.flush();
socket.send(boost::asio::buffer(buffer.data(), buffer.size()));
}
/**
@@ -87,13 +87,12 @@ inline void write_object(Stream& stream, const T& object) {
*
* @relates write_object
*/
template <typename T, typename Stream>
inline T read_object(Stream& stream) {
size_t message_length;
stream >> message_length;
template <typename T, typename Socket>
inline T read_object(Socket& socket) {
// TODO: Reuse buffers
std::vector<char> buffer(message_length);
stream.read(buffer.data(), message_length);
return msgpack::unpack(buffer.data(), message_length).get().convert();
// TODO: Use boost's buffers directly after switching to bitsery
char buffer[65536];
auto message_length = socket.receive(boost::asio::buffer(buffer));
return msgpack::unpack(buffer, message_length).get().convert();
}
+2 -2
View File
@@ -102,9 +102,9 @@ intptr_t Bridge::dispatch(AEffect* /*plugin*/,
}
const Event event{opcode, parameter, value, option};
write_object(vst_stdin, event);
write_object(host_vst_dispatch, event);
const auto response = read_object<EventResult>(vst_stdout);
const auto response = read_object<EventResult>(host_vst_dispatch);
if (response.result) {
std::copy(response.result->begin(), response.result->end(),
static_cast<char*>(result));
+2 -2
View File
@@ -86,7 +86,7 @@ int main(int argc, char* argv[]) {
// TODO: Remove debug, we're just reporting the plugin's name we retrieved
// above
while (true) {
auto event = read_object<Event>(std::cin);
auto event = read_object<Event>(host_vst_dispatch);
EventResult response;
if (event.opcode == effGetEffectName) {
@@ -96,7 +96,7 @@ int main(int argc, char* argv[]) {
response.return_value = 0;
}
write_object(std::cout, response);
write_object(host_vst_dispatch, response);
}
}