9 releases (breaking)
0.7.0 | Dec 30, 2024 |
---|---|
0.6.0 | Mar 27, 2023 |
0.5.2 | Mar 12, 2023 |
0.4.0 | Dec 28, 2022 |
0.1.0 | Sep 20, 2022 |
#87 in WebSocket
133 downloads per month
15KB
289 lines
Axum Websocket Rooms
room manager for websocket connections
use axum_ws_rooms::RoomsManager;
type Manager = RoomsManager<i32, i32, String>;
#[tokio::main]
async fn main() {
// init manager
let manager = std::sync::Arc::new(Manager::new());
// create two rooms
manager.new_room(1, None).await;
manager.new_room(2, None).await;
// spawn a task that acts as a receiver
let receiver = tokio::spawn({
let manager = manager.clone();
async move {
// initialise a user and join room 1 and start receiving messages
let mut receiver = manager.init_user(1, None).await;
let _ = manager.join_room(1, 1).await;
while let Ok(data) = receiver.recv().await {
println!("received data `{}`", data);
}
}
});
// spawn a task that acts as sender
let sender = tokio::spawn({
let manager = manager.clone();
async move {
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
let _ = manager
.send_message_to_room(&1, "test message to room 1".into())
.await;
let _ = manager
.send_message_to_room(&2, "test message to room 2".into())
.await;
}
});
let _ = tokio::join!(sender, receiver);
}
Why?
For a project i wanted to group users into rooms and send messages to them so i created this library.
Example
examples are available in /examples
directory
Dependencies
~2.2–8MB
~62K SLoC