Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/netrexmc/raknet
RakNet implementation in Rust
https://github.com/netrexmc/raknet
raknet rust rust-lang
Last synced: 1 day ago
JSON representation
RakNet implementation in Rust
- Host: GitHub
- URL: https://github.com/netrexmc/raknet
- Owner: NetrexMC
- License: apache-2.0
- Created: 2021-02-17T22:34:27.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2024-07-22T18:07:19.000Z (6 months ago)
- Last Synced: 2025-01-12T10:05:18.634Z (1 day ago)
- Topics: raknet, rust, rust-lang
- Language: Rust
- Homepage:
- Size: 721 KB
- Stars: 45
- Watchers: 3
- Forks: 12
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# rak-rs
A fully functional RakNet implementation in pure rust, asynchronously driven.
## Getting Started
RakNet (rak-rs) is available on [crates.io](https://crates.io/crates/rak-rs), to use it, add the following to your `Cargo.toml`:
```toml
[dependencies]
rak-rs = "0.3.3"
```## Features
This RakNet implementation comes with 3 primary features, `async_std`, `async_tokio` and `mcpe`. However, by default, only `async_std` is enabled, and `mcpe` requires you to modify your `Cargo.toml`.
If you wish to use these features, add them to your `Cargo.toml` as seen below:
```toml
[dependencies]
rak-rs = { version = "0.3.3", default-features = false, features = [ "async_tokio", "mcpe" ] }
```rak-rs also provides the following modules:
- [`rak_rs::client`](https://docs.rs/rak-rs/latest/rak-rs/client) - A client implementation of RakNet, allowing you to connect to a RakNet server.
- [`rak_rs::connection`](https://docs.rs/rak-rs/latest/rak-rs/client) - A bare-bones implementation of a Raknet peer, this is mainly used for types.
- [`rak_rs::error`](https://docs.rs/rak-rs/latest/rak-rs/error) - A module with errors that both the Client and Server can respond with.
- [`rak_rs::protocol`](https://docs.rs/rak-rs/latest/rak-rs/protocol) - A lower level implementation of RakNet, responsible for encoding and decoding packets.
- [`rak_rs::server`](https://docs.rs/rak-rs/latest/rak-rs/server) - The base server implementation of RakNet.
- [`rak_rs::util`](https://docs.rs/rak-rs/latest/rak-rs/utils) - General utilities used within `rak-rs`.# Client
The `client` module provides a way for you to interact with RakNet servers with code.
**Example:**
```rust
use rak_rs::client::{Client, DEFAULT_MTU};
use std::net::ToSocketAddrs;#[async_std::main]
async fn main() {
let version: u8 = 10;
let mut client = Client::new(version, DEFAULT_MTU);client.connect("my_server.net:19132").await.unwrap();
// receive packets
loop {
let packet = client.recv().await.unwrap();println!("Received a packet! {:?}", packet);
client.send_ord(vec![254, 0, 1, 1], Some(1));
}
}```
# Server
A RakNet server implementation in pure rust.
**Example:**
```rust
use rakrs::connection::Connection;
use rakrs::Listener;
use rakrs::#[async_std::main]
async fn main() {
let mut server = Listener::bind("0.0.0.0:19132").await.unwrap();
server.start().await.unwrap();loop {
let conn = server.accept().await;
async_std::task::spawn(handle(conn.unwrap()));
}
}async fn handle(mut conn: Connection) {
loop {
// keeping the connection alive
if conn.is_closed() {
println!("Connection closed!");
break;
}
if let Ok(pk) = conn.recv().await {
println!("Got a connection packet {:?} ", pk);
}
}
}
```