forked from klingtnet/rosc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsender.rs
57 lines (50 loc) · 1.69 KB
/
sender.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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));
}
}