Usage

If you're looking to easily send Udp Messages then this crate is perfect for you. It gives you the ability to define your own Net Messages by simply creating a struct and implementing a trait.

Important to note:

If you have any suggestions for this crate, let me know! If something is not clear or confusing, let me know!

Example

```rust use udp_netmsg::{NetMessenger, Message}; use std::io::Cursor; use byteorder::{BigEndian,ReadBytesExt, WriteBytesExt};

[derive(Debug)]

struct UpdatePos { pub id: u32, pub x: f32, pub y: f32, pub z: f32 }

impl Message for UpdatePos { fn frombuffer(mut buffer: Cursor>)->Box { let id = buffer.readu32::().unwrap(); let x = buffer.readf32::().unwrap(); let y = buffer.readf32::().unwrap(); let z = buffer.read_f32::().unwrap(); return Box::new(UpdatePos{id,x,y,z}) }

fn to_buffer(&self)->Vec<u8> {
    let mut wtr: Vec<u8> = Vec::new();
    //this buffer is 16 + 4 more for the header
    wtr.write_u32::<BigEndian>(self.id).unwrap();
    wtr.write_f32::<BigEndian>(self.x).unwrap();
    wtr.write_f32::<BigEndian>(self.y).unwrap();
    wtr.write_f32::<BigEndian>(self.z).unwrap();
    return wtr
}

//header
fn id()->u32 {return 834227670}

} fn main() { //port: port for receiving //targetip: port for sending //recvbuffersizebytes: size of biggest datagram to be received let mut net_msg = NetMessenger::new( String::from("12000"), String::from("127.0.0.1:12000"), 20);

//register the struct so it knows how to read message!
net_msg.register(UpdatePos::id(), UpdatePos::from_buffer);

//Sends message. Returns Ok or Err
match net_msg.send(Box::from(UpdatePos{id: 16, x: 5.0f32, y:5.0f32, z:5.0f32})) {
    Ok(_) => println!("message sent!"),
    Err(e) => println!("message failed to send because: {}", e)
}

//Set blocking or not
//returns Some(Message) or None
match net_msg.recv(false) {
    //Some(Msg: Box<Message>)
    Some(msg) => {
        //now downcast to particular struct here

        if let Some(t) = msg.downcast_ref::<UpdatePos>() {
            println!("id: {} at ({},{},{})", t.id, t.x, t.y, t.z);}
        //else if let Some(t) = msg.downcast_ref::<Another msg type>() {}
    }
    None => {println!("no message received!")}
}

} ```