mirror of
https://github.com/robbert-vdh/yabridge.git
synced 2026-06-17 00:43:56 +02:00
Communicate over the socket instead of STDIN
This commit is contained in:
+12
-13
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <boost/asio/buffer.hpp>
|
||||||
#include <cinttypes>
|
#include <cinttypes>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <msgpack.hpp>
|
#include <msgpack.hpp>
|
||||||
@@ -66,15 +67,14 @@ struct EventResult {
|
|||||||
*
|
*
|
||||||
* @relates read_object
|
* @relates read_object
|
||||||
*/
|
*/
|
||||||
template <typename T, typename Stream>
|
template <typename T, typename Socket>
|
||||||
inline void write_object(Stream& stream, const T& object) {
|
inline void write_object(Socket& socket, const T& object) {
|
||||||
// TODO: Reuse buffers
|
// TODO: Reuse buffers
|
||||||
|
// TODO: Use boost's buffers directly after switching to bitsery
|
||||||
msgpack::sbuffer buffer;
|
msgpack::sbuffer buffer;
|
||||||
msgpack::pack(buffer, object);
|
msgpack::pack(buffer, object);
|
||||||
|
|
||||||
stream << buffer.size();
|
socket.send(boost::asio::buffer(buffer.data(), buffer.size()));
|
||||||
stream.write(buffer.data(), buffer.size());
|
|
||||||
stream.flush();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -87,13 +87,12 @@ inline void write_object(Stream& stream, const T& object) {
|
|||||||
*
|
*
|
||||||
* @relates write_object
|
* @relates write_object
|
||||||
*/
|
*/
|
||||||
template <typename T, typename Stream>
|
template <typename T, typename Socket>
|
||||||
inline T read_object(Stream& stream) {
|
inline T read_object(Socket& socket) {
|
||||||
size_t message_length;
|
|
||||||
stream >> message_length;
|
|
||||||
|
|
||||||
// TODO: Reuse buffers
|
// TODO: Reuse buffers
|
||||||
std::vector<char> buffer(message_length);
|
// TODO: Use boost's buffers directly after switching to bitsery
|
||||||
stream.read(buffer.data(), message_length);
|
char buffer[65536];
|
||||||
return msgpack::unpack(buffer.data(), message_length).get().convert();
|
auto message_length = socket.receive(boost::asio::buffer(buffer));
|
||||||
|
|
||||||
|
return msgpack::unpack(buffer, message_length).get().convert();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -102,9 +102,9 @@ intptr_t Bridge::dispatch(AEffect* /*plugin*/,
|
|||||||
}
|
}
|
||||||
|
|
||||||
const Event event{opcode, parameter, value, option};
|
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) {
|
if (response.result) {
|
||||||
std::copy(response.result->begin(), response.result->end(),
|
std::copy(response.result->begin(), response.result->end(),
|
||||||
static_cast<char*>(result));
|
static_cast<char*>(result));
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ int main(int argc, char* argv[]) {
|
|||||||
// TODO: Remove debug, we're just reporting the plugin's name we retrieved
|
// TODO: Remove debug, we're just reporting the plugin's name we retrieved
|
||||||
// above
|
// above
|
||||||
while (true) {
|
while (true) {
|
||||||
auto event = read_object<Event>(std::cin);
|
auto event = read_object<Event>(host_vst_dispatch);
|
||||||
|
|
||||||
EventResult response;
|
EventResult response;
|
||||||
if (event.opcode == effGetEffectName) {
|
if (event.opcode == effGetEffectName) {
|
||||||
@@ -96,7 +96,7 @@ int main(int argc, char* argv[]) {
|
|||||||
response.return_value = 0;
|
response.return_value = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
write_object(std::cout, response);
|
write_object(host_vst_dispatch, response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user