aboutsummaryrefslogtreecommitdiff
path: root/karld/src/interface/websocket.rs
diff options
context:
space:
mode:
Diffstat (limited to 'karld/src/interface/websocket.rs')
-rw-r--r--karld/src/interface/websocket.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/karld/src/interface/websocket.rs b/karld/src/interface/websocket.rs
new file mode 100644
index 0000000..b69de20
--- /dev/null
+++ b/karld/src/interface/websocket.rs
@@ -0,0 +1,46 @@
+use std::thread;
+use websocket::sync::Server;
+use websocket::OwnedMessage;
+
+pub fn run() {
+ let server = Server::bind("127.0.0.1:2794").unwrap();
+
+ for request in server.filter_map(Result::ok) {
+ // Spawn a new thread for each connection.
+ thread::spawn(|| {
+ if !request.protocols().contains(&"rust-websocket".to_string()) {
+ request.reject().unwrap();
+ return;
+ }
+
+ let mut client = request.use_protocol("rust-websocket").accept().unwrap();
+
+ let ip = client.peer_addr().unwrap();
+
+ println!("Connection from {}", ip);
+
+ let message = OwnedMessage::Text("Hello".to_string());
+ client.send_message(&message).unwrap();
+
+ let (mut receiver, mut sender) = client.split().unwrap();
+
+ for message in receiver.incoming_messages() {
+ let message = message.unwrap();
+
+ match message {
+ OwnedMessage::Close(_) => {
+ let message = OwnedMessage::Close(None);
+ sender.send_message(&message).unwrap();
+ println!("Client {} disconnected", ip);
+ return;
+ }
+ OwnedMessage::Ping(ping) => {
+ let message = OwnedMessage::Pong(ping);
+ sender.send_message(&message).unwrap();
+ }
+ _ => sender.send_message(&message).unwrap(),
+ }
+ }
+ });
+ }
+}