Files
DungeonsOfKharadum/WEBRTC_SETUP.md

134 lines
3.8 KiB
Markdown

# WebRTC Multiplayer Setup
The game now supports WebRTC multiplayer for WebAssembly (browser) builds!
## How It Works
The `NetworkManager` automatically detects the platform:
- **Native builds** (Windows, Linux, Mac): Uses **ENet** (traditional UDP networking)
- **Web builds**: Uses **WebRTC** (peer-to-peer browser networking)
## Important Note About WebRTC
WebRTC requires a **signaling mechanism** to establish connections between peers. This is different from ENet which uses direct IP:port connections.
### Current Implementation Status
**Done:**
- Auto-detection of web platform
- WebRTCMultiplayerPeer creation for host and client
- Basic connection setup
- **STUN server configured** (`stun:ruinborn.thefirstboss.com:3578`) for NAT traversal
⚠️ **Requires Additional Setup:**
- **Signaling server** to exchange connection info between peers
- Session Description Protocol (SDP) offer/answer exchange
- ICE candidate exchange
## Quick Setup Options
### Option 1: Use a Public Signaling Server (Easiest)
Use a service like:
- [peerjs-server](https://github.com/peers/peerjs-server)
- [Matchbox](https://github.com/johanhelsing/matchbox) (Godot-specific)
- Roll your own simple WebSocket server
### Option 2: Manual Connection (For Testing)
For local testing, you can manually exchange connection strings:
1. Host creates a game
2. Host copies their connection info
3. Joiner pastes host's connection info
4. Joiner generates their own connection info
5. Host pastes joiner's connection info
### Option 3: Implement Signaling Server (Recommended for Production)
Create a simple WebSocket signaling server that:
1. Maintains a list of active lobbies
2. Relays SDP offers/answers between peers
3. Relays ICE candidates between peers
## Example: Using Matchbox (Recommended)
Matchbox is a simple signaling server specifically for Godot WebRTC:
```bash
# Install matchbox server
cargo install matchbox_server
# Run the server
matchbox_server
```
Then update the code to connect to your matchbox server when in web mode.
## Testing WebRTC Locally
1. **Export for HTML5**:
- Project -> Export -> Add -> HTML5 (WebAssembly)
- Export the project
2. **Run a local web server**:
```bash
# Python 3
python -m http.server 8000
# Or use any web server
```
3. **Open in browsers**:
- Host: `http://localhost:8000`
- Client: `http://localhost:8000` (in another browser tab/window)
4. **Connect**:
- One browser hosts
- Other browser joins
- (Requires signaling server to be running)
## Alternative: WebSocket Multiplayer
If WebRTC setup is too complex, you can use WebSocketMultiplayerPeer instead:
```gdscript
# In network_manager.gd, replace WebRTCMultiplayerPeer with:
var peer = WebSocketMultiplayerPeer.new()
# For host:
peer.create_server(port)
# For client:
peer.create_client("ws://your-server:port")
```
WebSocket is simpler but requires a dedicated server (can't be P2P like WebRTC).
## Production Deployment
For production, you'll need:
1. A signaling server (for WebRTC) or game server (for WebSocket)
2. HTTPS hosting (required for WebRTC in browsers)
3. Proper CORS configuration
4. STUN/TURN servers for NAT traversal (optional but recommended)
## Current Status
The game will:
- ✅ Detect web platform automatically
- ✅ Create WebRTC peers
- ⚠️ Require signaling server setup to actually connect
**To complete the setup**, implement one of the options above based on your needs.
## Quick Recommendation
**For Testing**: Use Matchbox (Option 3)
**For Production**: Implement a proper signaling server with lobby/matchmaking
## Resources
- [Godot WebRTC Documentation](https://docs.godotengine.org/en/stable/tutorials/networking/webrtc.html)
- [Matchbox Server](https://github.com/johanhelsing/matchbox)
- [WebRTC for Godot Tutorial](https://docs.godotengine.org/en/stable/tutorials/networking/high_level_multiplayer.html#webrtc)