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

Download history 2/week @ 2024-10-04 1/week @ 2024-11-01 1/week @ 2024-11-08 1/week @ 2024-12-06 117/week @ 2024-12-27 14/week @ 2025-01-03 2/week @ 2025-01-10

133 downloads per month

MIT license

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