mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-26 07:28:45 -07:00
Add initial documentation and structure for DorkNet project
- Create README.md for project overview and setup instructions - Add admin-ui/README.md for admin UI details and development setup - Introduce client-mod/README.md explaining the MelonLoader mod functionality - Establish docker/README.md for Docker setup and configuration - Create docs/README.md to index project documentation - Implement advanced-setup.md for Docker stack configuration - Document architecture in architecture.md - Provide easy-setup.md for hosting instructions - Add FAQ.md for common questions and legal considerations - Create joining-a-server.md for player connection instructions - Establish troubleshooting.md for common issues and resolutions - Introduce easy-app/README.md for the unified desktop application - Add server/README.md for ASP.NET Core backend details - Document tools/README.md for CLI helper scripts
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
# Architecture
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────────┐
|
||||
│ Rec Room 2020.03.10 client (patched) │
|
||||
│ ┌────────────────────┐ ┌──────────────────────────────────┐ │
|
||||
│ │ IL2CPP game code │ │ MelonLoader + client-mod │ │
|
||||
│ │ • set_BaseUri │←───│ • rewrites *.rec.net hosts │ │
|
||||
│ │ • Photon client │ │ • injects Photon AppId │ │
|
||||
│ │ • BouncyCastle TLS│ │ • bypasses TLS trust check │ │
|
||||
│ └─────────┬──────────┘ └──────────────────────────────────┘ │
|
||||
└────────────┼─────────────────────────────────────────────────────┘
|
||||
│ HTTPS to *.your-server.example.com
|
||||
▼
|
||||
┌──────────────────────────────────────────────────────────────────┐
|
||||
│ DorkNet server (ASP.NET Core) │
|
||||
│ │
|
||||
│ Subdomain-multiplexed routing: │
|
||||
│ api.* → REST endpoints (rooms, players, store, etc.) │
|
||||
│ auth.* → OAuth-style /connect/token, /photon/customauth │
|
||||
│ accounts.* → /account/bulk, /account/me, /account/{id}/bio │
|
||||
│ match.* → /goto/room/*, /player/heartbeat, /roominstance/*│
|
||||
│ chat.* → /thread, /thread/{id}/message │
|
||||
│ cdn.* → static asset serving (room blobs, images) │
|
||||
│ notify.* → SignalR hub for push notifications │
|
||||
│ img.* → signed image fetch + on-the-fly resize │
|
||||
│ leaderboard.* → /leaderboard/SetStat, GetPlayerRank, etc. │
|
||||
│ admin.* → React SPA + /api/admin/v1/* │
|
||||
│ │
|
||||
│ Storage: │
|
||||
│ • Postgres (advanced mode) / SQLite (easy mode) │
|
||||
│ • Redis presence cache (advanced) / in-memory (easy) │
|
||||
│ • data/images/ — room thumbnails + player polaroids │
|
||||
└──────────────┬───────────────────────────────────────────────────┘
|
||||
│
|
||||
│ The server does NOT host Photon. Players' clients
|
||||
│ connect to Photon Cloud directly via the AppId
|
||||
│ the server hands them.
|
||||
▼
|
||||
┌──────────────────────────────────────────────────────────────────┐
|
||||
│ Photon Cloud (external — Exit Games) │
|
||||
│ Each Rec Room instance = one Photon room. Photon handles │
|
||||
│ realtime sync between clients in the same instance. │
|
||||
│ Server only touches Photon to authenticate connections via │
|
||||
│ /photon/customauth. │
|
||||
└──────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Why subdomains?
|
||||
|
||||
The 2020 Rec Room client routes every request through a hardcoded
|
||||
service map (`RecNet.Core.SendRequest(method, Service.Match, …)`) that
|
||||
picks a host per service. We mirror the official `*.rec.net` layout so
|
||||
the watch's URI synthesis works unmodified after a single root-host
|
||||
rewrite by the client mod.
|
||||
|
||||
## Why SignalR?
|
||||
|
||||
The 2020 client expects WebSocket push notifications from a long-poll-or-
|
||||
WebSocket "Notifications" service. SignalR's transport negotiation
|
||||
matches what the client expects after a small DTO-shape wrap; see
|
||||
`Services/NotificationService.cs`.
|
||||
|
||||
## Why a separate Photon Cloud?
|
||||
|
||||
The 2020 build is tightly coupled to Photon Realtime SDK 4 — replacing it
|
||||
would mean shipping a custom game client. Using Photon Cloud as-is means
|
||||
clients talk peer-to-peer through Photon's relay; our server only
|
||||
witnesses the auth handshake. That's also why voice chat needs a Photon
|
||||
Voice AppId — voice runs through Photon Voice (a separate service from
|
||||
Photon Realtime).
|
||||
Reference in New Issue
Block a user