mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-06 02:00:46 +00:00
ZeroMQ IPC (first steps)
This commit is contained in:
1 parent
08d7fc6797
commit
e88cc5ff24
2 files changed
+98
-33
No files matched your search
+56
@@ -0,0 +1,56 @@
|
||||
use zmq;
|
||||
use zmq::{Error, Socket};
|
||||
|
||||
pub struct QueueSender {
|
||||
context: zmq::Context,
|
||||
socket: Option<zmq::Socket>,
|
||||
}
|
||||
|
||||
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<T>(&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;
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
+42
-33
@@ -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;
|
||||
},
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
Reference in new issue
Block a user