# Real Racing 3 Community Server A cross-platform .NET 8+ community server implementation for Real Racing 3, enabling custom/private server functionality. ## Overview This server emulates EA's Synergy backend infrastructure, allowing players to: - Host community servers - Play offline or on private networks - Customize game content and progression - Preserve the game when official servers shut down ## Features - ✅ Cross-platform support (Windows, Linux, macOS) - ✅ Minimal ASP.NET Core Web API implementation - ✅ All critical Synergy API endpoints - ✅ Session management & authentication - ✅ User profile & device management - ✅ DRM/Purchase verification (stub for community use) - ✅ Product catalog management - ✅ Analytics/tracking endpoints (optional logging) - ✅ Configurable via JSON - ✅ SQLite database for data persistence ## Requirements - .NET 8.0 SDK or later - SQLite (included via NuGet) - Port 443 (HTTPS) or custom port with SSL certificate ## Quick Start ### 1. Build the Server ```bash cd RR3CommunityServer dotnet restore dotnet build ``` ### 2. Configure Edit `appsettings.json` to customize server behavior. ### 3. Run ```bash dotnet run ``` The server will start on `https://localhost:5001` by default. ### 4. Redirect Game Traffic You'll need to intercept DNS/HTTPS traffic from the game to redirect EA servers to your server: **Option A: Hosts File (Simple)** ``` # Add to C:\Windows\System32\drivers\etc\hosts (Windows) # or /etc/hosts (Linux/macOS) 127.0.0.1 syn-dir.sn.eamobile.com 127.0.0.1 director-stage.sn.eamobile.com ``` **Option B: Proxy/VPN (Advanced)** Use tools like Proxifier, mitmproxy, or custom VPN to redirect traffic. **Option C: SSL Interception (Full Control)** Use mitmproxy with custom CA certificate installed on device. ## Architecture ``` [Real Racing 3 App] ↓ HTTPS [Community Server] ↓ [SQLite Database] ``` The server implements EA's Synergy API protocol: - JSON request/response format - Custom headers: `EAM-SESSION`, `EAM-USER-ID`, `EA-SELL-ID` - Session-based authentication - RESTful endpoints ## API Endpoints ### User Management - `GET /user/api/android/getDeviceID` - Register device - `GET /user/api/android/validateDeviceID` - Validate device - `GET /user/api/android/getAnonUid` - Get anonymous ID ### Product Catalog - `GET /product/api/core/getAvailableItems` - Get item catalog - `GET /product/api/core/getMTXGameCategories` - Get categories - `POST /product/api/core/getDownloadItemUrl` - Get download URLs ### DRM & Purchases - `GET /drm/api/core/getNonce` - Get DRM nonce - `GET /drm/api/core/getPurchasedItems` - Get purchases - `POST /drm/api/android/verifyAndRecordPurchase` - Verify purchase ### Tracking & Analytics - `POST /tracking/api/core/logEvent` - Log analytics event ### Director (Discovery) - `GET /director/api/android/getDirectionByPackage` - Service discovery ## Configuration See `appsettings.json` for configuration options: ```json { "Server": { "EnableAnalytics": false, "EnablePurchaseVerification": false, "AllowUnverifiedDevices": true }, "Catalog": { "DataPath": "./catalog-data", "EnableCustomContent": true } } ``` ## Security Notes ⚠️ **For Community Use Only** This server is for: - Private/LAN play - Game preservation - Educational purposes - Offline gameplay **NOT for:** - Piracy or circumventing legitimate purchases - Cheating in official multiplayer - Redistributing EA's content ## Project Structure ``` RR3CommunityServer/ ├── Controllers/ # API endpoint controllers │ ├── DirectorController.cs │ ├── UserController.cs │ ├── ProductController.cs │ ├── DrmController.cs │ └── TrackingController.cs ├── Models/ # Data models & DTOs ├── Services/ # Business logic ├── Data/ # Database context ├── Middleware/ # Session/auth middleware ├── appsettings.json # Configuration └── Program.cs # Entry point ``` ## Development ### Adding New Endpoints 1. Create controller in `Controllers/` 2. Add models in `Models/` 3. Implement service logic in `Services/` 4. Update database schema if needed ### Testing ```bash # Run unit tests dotnet test # Test API endpoints curl -k -H "EAM-SESSION: test-session" https://localhost:5001/user/api/android/getDeviceID?deviceId=test123 ``` ## Contributing Contributions welcome! Please: 1. Fork the repository 2. Create a feature branch 3. Submit a pull request ## License This project is for educational and preservation purposes. Real Racing 3 and related trademarks are property of Electronic Arts Inc. ## Disclaimer This is an independent community project not affiliated with EA or Firemonkeys. Use responsibly and respect intellectual property rights.