Skip to content

Commit 7ffdf7e

Browse files
committed
Added async server example and updated examples.
1 parent 4e9c6f2 commit 7ffdf7e

File tree

5 files changed

+76
-3
lines changed

5 files changed

+76
-3
lines changed

examples/async-server.rs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
extern crate websocket;
2+
extern crate futures;
3+
extern crate tokio_core;
4+
5+
use websocket::message::{Message, OwnedMessage};
6+
use websocket::server::InvalidConnection;
7+
use websocket::async::Server;
8+
use websocket::async::client::Client;
9+
use websocket::async::WebSocketFuture;
10+
11+
use tokio_core::reactor::Core;
12+
use tokio_core::net::TcpStream;
13+
use futures::{Future, Sink, Stream};
14+
15+
fn main() {
16+
let mut core = Core::new().unwrap();
17+
let handle = core.handle();
18+
// bind to the server
19+
let server = Server::bind("127.0.0.1:2794", &handle).unwrap();
20+
21+
// time to build the server's future
22+
// this will be a struct containing everything the server is going to do
23+
24+
// a stream of incoming connections
25+
let f = server.incoming()
26+
// we don't wanna save the stream if it drops
27+
.map_err(|InvalidConnection { error, .. }| error.into())
28+
// negotiate with the client
29+
.and_then(|upgrade| {
30+
// check if it has the protocol we want
31+
let uses_proto = upgrade.protocols().iter().any(|s| s == "rust-websocket");
32+
33+
let f: WebSocketFuture<Option<Client<TcpStream>>> = if uses_proto {
34+
// accept the request to be a ws connection if it does
35+
Box::new(upgrade.use_protocol("rust-websocket").accept().map(|(s, _)| Some(s)))
36+
} else {
37+
// reject it if it doesn't
38+
Box::new(upgrade.reject().map(|_| None).map_err(|e| e.into()))
39+
};
40+
f
41+
})
42+
// get rid of the bad connections
43+
.filter_map(|i| i)
44+
// send a greeting!
45+
.and_then(|s| s.send(Message::text("Hello World!").into()))
46+
// simple echo server impl
47+
.and_then(|s| {
48+
let (sink, stream) = s.split();
49+
stream.filter_map(|m| {
50+
println!("Message from Client: {:?}", m);
51+
match m {
52+
OwnedMessage::Ping(p) => Some(OwnedMessage::Pong(p)),
53+
OwnedMessage::Pong(_) => None,
54+
_ => Some(m),
55+
}
56+
}).forward(sink)
57+
})
58+
// TODO: ??
59+
.collect();
60+
61+
core.run(f).unwrap();
62+
}

examples/autobahn-server.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
extern crate websocket;
22

33
use std::thread;
4-
use websocket::{Server, Message, OwnedMessage};
4+
use websocket::{Message, OwnedMessage};
5+
use websocket::sync::Server;
6+
57

68
fn main() {
79
let server = Server::bind("127.0.0.1:9002").unwrap();

examples/hyper.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ extern crate hyper;
33

44
use std::thread;
55
use std::io::Write;
6-
use websocket::{Server, Message, OwnedMessage};
6+
use websocket::{Message, OwnedMessage};
7+
use websocket::sync::Server;
78
use hyper::Server as HttpServer;
89
use hyper::net::Fresh;
910
use hyper::server::request::Request;

examples/server.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
extern crate websocket;
22

33
use std::thread;
4-
use websocket::{Server, OwnedMessage};
4+
use websocket::OwnedMessage;
5+
use websocket::sync::Server;
56

67
fn main() {
78
let server = Server::bind("127.0.0.1:2794").unwrap();

src/lib.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,13 @@ pub mod sync {
112112
pub use server::upgrade::sync::IntoWs;
113113
pub use server::upgrade::sync as upgrade;
114114
}
115+
pub use server::sync::Server;
115116

116117
pub mod client {
117118
pub use client::sync::*;
118119
pub use client::builder::ClientBuilder;
119120
}
121+
pub use client::sync::Client;
120122
}
121123

122124
#[cfg(feature="async")]
@@ -136,16 +138,21 @@ pub mod async {
136138
pub use server::upgrade::async::IntoWs;
137139
pub use server::upgrade::async as upgrade;
138140
}
141+
pub use server::async::Server;
139142

140143
pub mod client {
141144
pub use client::async::*;
142145
pub use client::builder::ClientBuilder;
143146
}
147+
pub use client::async::Client;
148+
149+
pub use result::async::WebSocketFuture;
144150
}
145151

146152
pub use self::message::Message;
147153
pub use self::message::CloseData;
148154
pub use self::message::OwnedMessage;
155+
pub use self::client::builder::ClientBuilder;
149156

150157
pub use self::result::WebSocketError;
151158
pub use self::result::WebSocketResult;

0 commit comments

Comments
 (0)