rl_lang/interpreter/stdlib/net/
udp_send.rs1use crate::interpreter::{
2 evaluator::Evaluator,
3 stdlib::{
4 common::{extract_number, extract_string, verr, vi, vok, vs},
5 net::NetHandle,
6 },
7 values::Value,
8};
9
10pub fn func(eval: &mut Evaluator, id: Value, data: Value) -> Value {
11 let id = match extract_number(id, "udp_send") {
12 Ok(a) if a as i64 >= 0 => a as i64,
13 Ok(_) => return verr!(vs!("udp_send: id handle cannot be negative".to_string())),
14 Err(e) => return verr!(vs!(format!("{}", e))),
15 };
16 let data = match extract_string(data, "udp_send") {
17 Ok(s) => s,
18 Err(e) => return verr!(vs!(format!("{}", e))),
19 };
20 let socket = match eval.net_handles.get(&id) {
21 Some(NetHandle::UdpSocket(socket)) => socket,
22 Some(_) => {
23 return verr!(vs!(format!("udp_send: handle {} is not a UDP socket", id)));
24 }
25 None => return verr!(vs!(format!("udp_send: unknown handle {}", id))),
26 };
27 match socket.send(data.as_bytes()) {
28 Ok(n) => vok!(vi!(n as i64)),
29 Err(e) => verr!(vs!(format!("udp_send: {}", e))),
30 }
31}