| Crates.io | shadownetwork2d |
| lib.rs | shadownetwork2d |
| version | 0.1.1 |
| created_at | 2025-08-12 02:19:10.868221+00 |
| updated_at | 2025-08-12 02:21:04.747033+00 |
| description | A comprehensive networking framework for Rust applications |
| homepage | |
| repository | https://github.com/jack/shadownetwork2d |
| max_upload_size | |
| id | 1791265 |
| size | 95,785 |
A high-performance, async networking library for 2D games built in Rust. Features TCP/UDP support, room-based multiplayer, anti-cheat detection, and comprehensive connection management.
Add to your Cargo.toml:
## Room-Based Multiplayer
```rust
use shadownetwork2d::*;
#[tokio::main]
async fn main() -> Result<(), NetworkError> {
let mut traveler = Traveler::new();
traveler.travel_to_tcp("127.0.0.1:8080").await?;
traveler.create_room("game_lobby".to_string(), 10).await?;
println!("Created room: game_lobby");
Ok(())
}
use shadownetwork2d::*;
let config = NetworkConfig {
max_connections: 500,
buffer_size: 16384,
compression: true,
encryption: false,
heartbeat_interval: 30000,
rate_limit_per_second: 100,
max_message_size: 2048,
enable_metrics: true,
connection_timeout: 120000,
max_rooms: 50,
max_travelers_per_room: 20,
};
let host = Host::new(config);
Data - General game dataHeartbeat - Keep-alive packetsConnect/Disconnect - Connection managementJoinRoom/LeaveRoom - Room operationsCreateRoom/DestroyRoom - Room managementAuthentication - User authenticationHostMigration - Automatic host switchingPing/Pong - Latency measurementCustom(String) - Application-specific messages[dependencies]
shadownetwork2d = { version = "0.1.0", features = ["compression", "encryption", "metrics"] }
compression - Enable message compressionencryption - Enable message encryption hooksmetrics - Enable detailed performance metricsMIT
[dependencies] shadownetwork2d = "0.1.0" tokio = { version = "1.0", features = ["full"] } bytes = "1.0"
[dependencies]
shadownetwork2d = "0.1.0"
tokio = { version = "1.0", features = ["full"] }
bytes = "1.0"
use shadownetwork2d::*;
use tokio;
#[tokio::main]
async fn main() -> Result<(), NetworkError> {
let message = Message::new(MessageType::Data, Bytes::from("Hello Server"));
traveler.send_tcp(message).await?;
while let Some(event) = traveler.receive().await {
match event {
NetworkEvent::MessageReceived { message, .. } => {
println!("Received: {:?}", message.msg_type);
break;
}
_ => {}
}
}
Ok(())
} config = NetworkConfig::default();
let mut host = Host::new(config);
host.start_traveling_tcp("127.0.0.1:8080").await?;
while let Some(event) = host.next_event().await {
match event {
NetworkEvent::TravelerArrived { id, addr, .. } => {
println!("New traveler connected: {} from {}", id, addr);
}
NetworkEvent::MessageReceived { from, message, .. } => {
println!("Message from {}: {:?}", from, message.msg_type);
host.send_to_traveler(from, message).await?;
}
NetworkEvent::TravelerLeft { id, .. } => {
println!("Traveler disconnected: {}", id);
}
_ => {}
}
}
Ok(())
}
use shadownetwork2d::*;
use bytes::Bytes;
#[tokio::main]
async fn main() -> Result<(), NetworkError> {
let mut traveler = Traveler::new();
traveler.travel_to_tcp("127.0.0.1:8080").await?;
let