Last active
August 29, 2015 14:21
-
-
Save sdogruyol/f897eb1ca4b7cd7f4f64 to your computer and use it in GitHub Desktop.
Chat Server
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
extern crate websocket; | |
use std::thread; | |
use std::sync::{Arc, Mutex}; | |
use websocket::{Server, Message, Sender, Receiver}; | |
fn main() { | |
let server = Server::bind("0.0.0.0:2794").unwrap(); | |
let mut senders = Arc::new(Mutex::new(vec![])); | |
for connection in server { | |
// Spawn a new thread for each connection. | |
let mut senders = senders.clone(); | |
thread::spawn(move || { | |
let request = connection.unwrap().read_request().unwrap(); // Get the request | |
request.validate().unwrap(); | |
let response = request.accept(); // Form a response | |
let mut client = response.send().unwrap(); // Send the response | |
let ip = client.get_mut_sender() | |
.get_mut() | |
.peer_addr() | |
.unwrap(); | |
println!("Connection from {}", ip); | |
let (mut sender, mut receiver) = client.split(); | |
{ | |
let mut senders = senders.lock().unwrap(); | |
senders.push(sender); | |
} | |
// println!("{}", senders.len()); | |
for message in receiver.incoming_messages() { | |
let message = message.unwrap(); | |
match message { | |
Message::Close(_) => { | |
// let message = Message::Close(None); | |
// sender.send_message(message).unwrap(); | |
println!("Client {} disconnected", ip); | |
return; | |
} | |
Message::Ping(data) => { | |
// let message = Message::Pong(data); | |
// sender.send_message(message).unwrap(); | |
return; | |
} | |
_ =>{ | |
for sender in senders.lock().unwrap().iter_mut() { | |
let mut message = message.clone(); | |
println!("Sending"); | |
sender.send_message(message).unwrap(); | |
} | |
}, | |
} | |
} | |
}); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment