From e88cc5ff244929ab1cb670deeae9ba6eda246068 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Sun, 13 Oct 2019 00:41:46 -0400 Subject: [PATCH] ZeroMQ IPC (first steps) --- src/ipc.rs | 56 +++++++++++++++++++++++++++++++++++++++ src/main.rs | 75 ++++++++++++++++++++++++++++++----------------------- 2 files changed, 98 insertions(+), 33 deletions(-) create mode 100644 src/ipc.rs diff --git a/src/ipc.rs b/src/ipc.rs new file mode 100644 index 0000000000..4248f54832 --- /dev/null +++ b/src/ipc.rs @@ -0,0 +1,56 @@ +use zmq; +use zmq::{Error, Socket}; + +pub struct QueueSender { + context: zmq::Context, + socket: Option, +} + +impl QueueSender { + pub fn new() -> Self { + Self { + context: zmq::Context::new(), + socket: None, + } + } + + /// Connect to ZeroMQ server. + pub fn connect(&mut self) -> bool { + let mut socket = match self.context.socket(zmq::REQ) { + Err(_) => { + return false; + }, + Ok(s) => s, + }; + + match socket.connect("tcp://127.0.0.1:5555") { + Err(_) => { + return false; + }, + Ok(_) => { + self.socket = Some(socket); + return true; + }, + } + } + + /// Send data to socket + pub fn send(&mut self, data: T) -> bool + where T: zmq::Sendable + { + let mut socket = match &mut self.socket { + None => { + return false; + }, + Some(s) => s, + }; + match socket.send(data, 0) { + Err(_) => { + return false; + }, + Ok(_) => { + return true; + }, + } + } +} diff --git a/src/main.rs b/src/main.rs index 5c59a3544f..9a7d56c57f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,6 +7,7 @@ extern crate wavy; extern crate world_sys; extern crate zmq; +pub mod ipc; pub mod synthesis; use wavy::*; @@ -29,13 +30,14 @@ use tensorflow::Tensor; use tensorflow::version; use zmq::{Error, Socket}; +use ipc::QueueSender; + const INPUT_NAME : &'static str = "input_A_test"; const OUTPUT_NAME : &'static str = "generator_A2B_3/output_transpose"; fn main() { print_version(); - load_model(); - //load_model_2(); + //load_model(); // TODO: This works. Temporarily commented out run_audio().expect("should work"); //run_audio().expect("should work"); } @@ -180,40 +182,13 @@ fn run_audio() -> Result<(), AudioError> { let mut buffer = VecDeque::new(); - thread::spawn(|| { - let ctx = zmq::Context::new(); - let mut socket = ctx.socket(zmq::REQ).unwrap(); - let mut reconnect = false; - socket.connect("tcp://127.0.0.1:5555").unwrap(); - - loop { - if reconnect { - match ctx.socket(zmq::REQ) { - Err(_) => {}, - Ok(s) => { - match s.connect("tcp://127.0.0.1:5555") { - Err(_) => {}, - Ok(_) => { - socket = s; - reconnect = false; - }, - } - }, - } - } - match socket.send("hello world!", 0) { - Ok(_) => { - println!("Sent"); - }, - Err(_) => { - reconnect = true; - }, - } - } - }); + let mut queue_sender = QueueSender::new(); loop { mic.record(&mut |_index, l, r| { + if !queue_sender.send("test hello") { + queue_sender.connect(); + } buffer.push_back((l, l)); }); @@ -226,3 +201,37 @@ fn run_audio() -> Result<(), AudioError> { }); } } + +fn zeromq_test() { + thread::spawn(|| { + let ctx = zmq::Context::new(); + let mut socket = ctx.socket(zmq::REQ).unwrap(); + let mut reconnect = false; + socket.connect("tcp://127.0.0.1:5555").unwrap(); + + loop { + if reconnect { + match ctx.socket(zmq::REQ) { + Err(_) => {}, + Ok(s) => { + match s.connect("tcp://127.0.0.1:5555") { + Err(_) => {}, + Ok(_) => { + socket = s; + reconnect = false; + }, + } + }, + } + } + match socket.send("hello world!", 0) { + Ok(_) => { + println!("Sent"); + }, + Err(_) => { + reconnect = true; + }, + } + } + }); +}