Created
January 3, 2015 09:23
-
-
Save IndianBoy42/1e76efd1a9986fdd37f3 to your computer and use it in GitHub Desktop.
Playing around with TCP stuff in rust
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Server implemented as Trait to allow various forms of handling | |
pub trait Server | |
where Self: Send { | |
fn get_response(&self, &String) -> Option<String>; //Takes a message and returns a response | |
fn acceptor(&self) -> TcpAcceptor; | |
fn new(address: &str) -> Self; | |
fn start(&self) { | |
for stream in self.acceptor().incoming() { | |
Thread::spawn( move|| { | |
match stream { | |
Err(e) => panic!("[SERVER] Connection Failed: {}", e), | |
Ok(mut conn) => { | |
println!("[SERVER] Connection Succeeded"); | |
let msg = match conn.read_to_string() { | |
Err(e) => panic!("[SERVER] Read Failed: {}", e), | |
Ok(m) => m | |
}; | |
println!("[SERVER] Read Succeeded: {}", msg); | |
let res = match self.get_response( &msg.to_string() ) { | |
None => "No Response Found - Invalid Message(?)".to_string(), | |
Some(s) => s | |
}; | |
match conn.write_str(res.as_slice()) { | |
Err(e) => panic!("[SERVER] Write Failed: {}", e), | |
_ => println!("[SERVER] Write Succeeded") | |
} | |
match conn.close_read() { | |
Err(e) => println!("[SERVER] Socket Close Failed: {}", e), | |
_ => {} | |
}; | |
} | |
} | |
}).detach(); | |
} | |
} | |
fn close(&self) { | |
match self.acceptor().close_accept() { | |
Err(e) => println!("[SERVER] Server Close Failed: {}", e), | |
_ => {} | |
}; | |
} | |
} | |
//Error: | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:21:23: 49:5 error: cannot infer an appropriate lifetime due to conflicting requirements | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:21 Thread::spawn( move|| { | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:22 match stream { | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:23 Err(e) => panic!("[SERVER] Connection Failed: {}", e), | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:24 Ok(mut conn) => { | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:25 println!("[SERVER] Connection Succeeded"); | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:26 | |
... | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:21:4: 21:17 note: first, the lifetime cannot outlive the expression at 21:3... | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:21 Thread::spawn( move|| { | |
^~~~~~~~~~~~~ | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:21:4: 21:17 note: ...so that the declared lifetime parameter bounds are satisfied | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:21 Thread::spawn( move|| { | |
^~~~~~~~~~~~~ | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:21:4: 49:6 note: but, the lifetime must be valid for the call at 21:3... | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:21 Thread::spawn( move|| { | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:22 match stream { | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:23 Err(e) => panic!("[SERVER] Connection Failed: {}", e), | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:24 Ok(mut conn) => { | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:25 println!("[SERVER] Connection Succeeded"); | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:26 | |
... | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:21:23: 49:5 note: ...so that argument is valid for the call | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:21 Thread::spawn( move|| { | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:22 match stream { | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:23 Err(e) => panic!("[SERVER] Connection Failed: {}", e), | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:24 Ok(mut conn) => { | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:25 println!("[SERVER] Connection Succeeded"); | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:26 | |
... | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:21:4: 21:17 error: declared lifetime bound not satisfied | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:21 Thread::spawn( move|| { | |
^~~~~~~~~~~~~ | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:19:18: 51:3 note: lifetime parameter instantiated with the anonymous lifetime #1 defined on the block at 19:17 | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:19 fn start(&self) { | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:20 for stream in self.acceptor().incoming() { | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:21 Thread::spawn( move|| { | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:22 match stream { | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:23 Err(e) => panic!("[SERVER] Connection Failed: {}", e), | |
/media/STORAGE/Dev/rust/webbers/src/net.rs:24 Ok(mut conn) => { | |
... | |
note: but lifetime parameter must outlive the static lifetime | |
error: aborting due to 2 previous errors |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment