extern crate rosc;
|
|
|
|
use rosc::encoder;
|
|
use rosc::{OscMessage, OscPacket, OscType};
|
|
use std::net::{SocketAddrV4, UdpSocket};
|
|
use std::str::FromStr;
|
|
use std::time::Duration;
|
|
use std::{env, f32, thread};
|
|
|
|
fn get_addr_from_arg(arg: &str) -> SocketAddrV4 {
|
|
SocketAddrV4::from_str(arg).unwrap()
|
|
}
|
|
|
|
fn main() {
|
|
let args: Vec<String> = env::args().collect();
|
|
let usage = format!(
|
|
"Usage: {} HOST_IP:HOST_PORT CLIENT_IP:CLIENT_PORT",
|
|
&args[0]
|
|
);
|
|
if args.len() < 3 {
|
|
panic!(usage);
|
|
}
|
|
let host_addr = get_addr_from_arg(&args[1]);
|
|
let to_addr = get_addr_from_arg(&args[2]);
|
|
let sock = UdpSocket::bind(host_addr).unwrap();
|
|
|
|
// switch view
|
|
let msg_buf = encoder::encode(&OscPacket::Message(OscMessage {
|
|
addr: "/3".to_string(),
|
|
args: vec![],
|
|
}))
|
|
.unwrap();
|
|
|
|
sock.send_to(&msg_buf, to_addr).unwrap();
|
|
|
|
// send random values to xy fields
|
|
let steps = 128;
|
|
let step_size: f32 = 2.0 * f32::consts::PI / steps as f32;
|
|
for i in 0.. {
|
|
let x = 0.5 + (step_size * (i % steps) as f32).sin() / 2.0;
|
|
let y = 0.5 + (step_size * (i % steps) as f32).cos() / 2.0;
|
|
let mut msg_buf = encoder::encode(&OscPacket::Message(OscMessage {
|
|
addr: "/3/xy1".to_string(),
|
|
args: vec![OscType::Float(x), OscType::Float(y)],
|
|
}))
|
|
.unwrap();
|
|
|
|
sock.send_to(&msg_buf, to_addr).unwrap();
|
|
msg_buf = encoder::encode(&OscPacket::Message(OscMessage {
|
|
addr: "/3/xy2".to_string(),
|
|
args: vec![OscType::Float(y), OscType::Float(x)],
|
|
}))
|
|
.unwrap();
|
|
sock.send_to(&msg_buf, to_addr).unwrap();
|
|
thread::sleep(Duration::from_millis(20));
|
|
}
|
|
}
|