1use std::net::SocketAddr;
2
3use hydra::Application;
4use hydra::ExitReason;
5use hydra::GenServer;
6use hydra::GenServerOptions;
7use hydra::Pid;
8use hydra::Process;
9
10use hydra_websockets::WebsocketCommands;
11use hydra_websockets::WebsocketHandler;
12use hydra_websockets::WebsocketMessage;
13use hydra_websockets::WebsocketRequest;
14use hydra_websockets::WebsocketResponse;
15use hydra_websockets::WebsocketServer;
16use hydra_websockets::WebsocketServerConfig;
17
18struct MyWebsocketHandler;
19
20impl WebsocketHandler for MyWebsocketHandler {
21 type Message = ();
22
23 fn accept(
24 _address: SocketAddr,
25 _request: &WebsocketRequest,
26 response: WebsocketResponse,
27 ) -> Result<(WebsocketResponse, Self), ExitReason> {
28 Ok((response, MyWebsocketHandler))
30 }
31
32 async fn websocket_handle(
33 &mut self,
34 message: WebsocketMessage,
35 ) -> Result<Option<WebsocketCommands>, ExitReason> {
36 match message {
37 WebsocketMessage::Text(text) => {
38 tracing::info!(handler = ?Process::current(), message = ?text.as_str(), "Got message");
39
40 Ok(Some(WebsocketCommands::with_send(text.as_str())))
42 }
43 _ => {
44 Ok(None)
46 }
47 }
48 }
49}
50
51struct MyWebsocketApplication;
52
53impl Application for MyWebsocketApplication {
54 async fn start(&self) -> Result<Pid, ExitReason> {
55 let address: SocketAddr = "127.0.0.1:1337".parse().unwrap();
56 let config = WebsocketServerConfig::new(address);
57
58 WebsocketServer::<MyWebsocketHandler>::new(config)
59 .start_link(GenServerOptions::new())
60 .await
61 }
62}
63
64fn main() {
65 Application::run(MyWebsocketApplication)
66}