extern crate env_logger;
extern crate solana_ws as ws;
use std::thread;
use std::thread::sleep;
use std::time::Duration;
use ws::{connect, listen, CloseCode, Handler, Message, Result, Sender};
fn main() {
env_logger::init();
struct Server {
out: Sender,
}
impl Handler for Server {
fn on_message(&mut self, msg: Message) -> Result<()> {
println!("Server got message '{}'. ", msg);
self.out.send(msg)
}
fn on_close(&mut self, code: CloseCode, reason: &str) {
println!("WebSocket closing for ({:?}) {}", code, reason);
println!("Shutting down server after first connection closes.");
self.out.shutdown().unwrap();
}
}
let server = thread::spawn(move || listen("127.0.0.1:3012", |out| Server { out }).unwrap());
sleep(Duration::from_millis(10));
let client = thread::spawn(move || {
connect("ws://127.0.0.1:3012", |out| {
out.send("Hello WebSocket").unwrap();
move |msg| {
println!("Client got message '{}'. ", msg);
out.close(CloseCode::Normal)
}
}).unwrap()
});
let _ = server.join();
let _ = client.join();
println!("All done.")
}