Crates.io | hydra-websockets |
lib.rs | hydra-websockets |
version | 0.1.30 |
source | src |
created_at | 2024-05-24 22:09:09.48694 |
updated_at | 2024-06-30 18:25:33.08529 |
description | A websocket server for the hydra framework. |
homepage | |
repository | https://github.com/dtzxporter/hydra |
max_upload_size | |
id | 1251585 |
size | 63,258 |
A websocket server library for the hydra framework.
A basic echo websocket server with Hydra.
Make sure you have added Hydra, Hydra Websockets in your Cargo.toml:
[dependencies]
hydra = "0.1"
hydra-websockets = "0.1"
Then, in your main.rs:
use std::net::SocketAddr;
use hydra::Application;
use hydra::ExitReason;
use hydra::GenServer;
use hydra::GenServerOptions;
use hydra::Pid;
use hydra::Process;
use hydra_websockets::WebsocketCommands;
use hydra_websockets::WebsocketHandler;
use hydra_websockets::WebsocketMessage;
use hydra_websockets::WebsocketRequest;
use hydra_websockets::WebsocketResponse;
use hydra_websockets::WebsocketServer;
use hydra_websockets::WebsocketServerConfig;
struct MyWebsocketHandler;
impl WebsocketHandler for MyWebsocketHandler {
type Message = ();
fn accept(
_request: &WebsocketRequest,
response: WebsocketResponse,
) -> Result<(WebsocketResponse, Self), ExitReason> {
// You can extract any header information from `request` and pass it to the handler.
Ok((response, MyWebsocketHandler))
}
async fn websocket_handle(
&mut self,
message: WebsocketMessage,
) -> Result<Option<WebsocketCommands>, ExitReason> {
match message {
WebsocketMessage::Text(text) => {
tracing::info!(handler = ?Process::current(), message = ?text, "Got message");
// Echo the command back to the client.
Ok(Some(WebsocketCommands::with_send(text)))
}
_ => {
// Hydra websockets automatically responds to ping requests.
Ok(None)
}
}
}
}
struct MyWebsocketApplication;
impl Application for MyWebsocketApplication {
async fn start(&self) -> Result<Pid, ExitReason> {
let address: SocketAddr = "127.0.0.1:1337".parse().unwrap();
let config = WebsocketServerConfig::new(address);
WebsocketServer::<MyWebsocketHandler>::new(config)
.start_link(GenServerOptions::new())
.await
}
}
fn main() {
Application::run(MyWebsocketApplication)
}
Find more examples in the examples folder. You can run them with: cargo run --example=server
.
This project is licensed under the MIT license
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Hydra by you, shall be licensed as MIT, without any additional terms or conditions.