{"id":26095400,"url":"https://github.com/alexmollard/enetplayground","last_synced_at":"2026-04-20T11:36:36.059Z","repository":{"id":280265579,"uuid":"941447535","full_name":"AlexMollard/EnetPlayGround","owner":"AlexMollard","description":"🌐 A playful networking sandbox where packets come to party and sometimes die - my personal experiment with ENet that sometimes works, often breaks, and always teaches me something new!","archived":false,"fork":false,"pushed_at":"2025-03-09T04:30:44.000Z","size":6180,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-09T13:16:11.609Z","etag":null,"topics":["cpp","enet","multiplayer","server","udp"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlexMollard.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-02T10:12:12.000Z","updated_at":"2025-03-09T04:30:47.000Z","dependencies_parsed_at":"2025-03-02T11:30:51.401Z","dependency_job_id":null,"html_url":"https://github.com/AlexMollard/EnetPlayGround","commit_stats":null,"previous_names":["alexmollard/enetplayground"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AlexMollard/EnetPlayGround","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexMollard%2FEnetPlayGround","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexMollard%2FEnetPlayGround/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexMollard%2FEnetPlayGround/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexMollard%2FEnetPlayGround/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlexMollard","download_url":"https://codeload.github.com/AlexMollard/EnetPlayGround/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexMollard%2FEnetPlayGround/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32045760,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T11:35:06.609Z","status":"ssl_error","status_checked_at":"2026-04-20T11:34:48.899Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","enet","multiplayer","server","udp"],"created_at":"2025-03-09T13:16:15.120Z","updated_at":"2026-04-20T11:36:36.046Z","avatar_url":"https://github.com/AlexMollard.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003e🌐 EnetPlayGround\u003c/h1\u003e\n  \u003cp\u003e\u003cstrong\u003eA Networking Sandbox for ENet Protocol Experimentation\u003c/strong\u003e\u003c/p\u003e\n  \n  \u003cp\u003e\n    \u003ca href=\"#-about\"\u003e📋 About\u003c/a\u003e •\n    \u003ca href=\"#-features\"\u003e✨ Features\u003c/a\u003e •\n    \u003ca href=\"#-screenshots\"\u003e📸 Screenshots\u003c/a\u003e •\n    \u003ca href=\"#-tools-and-libraries\"\u003e🔧 Tools \u0026 Libraries\u003c/a\u003e •\n    \u003ca href=\"#-installation\"\u003e💻 Installation\u003c/a\u003e •\n    \u003ca href=\"#-usage\"\u003e🚀 Usage\u003c/a\u003e •\n    \u003ca href=\"#-development-roadmap\"\u003e🛣️ Development Roadmap\u003c/a\u003e •\n    \u003ca href=\"#-research-areas\"\u003e🔬 Research Areas\u003c/a\u003e\n  \u003c/p\u003e\n  \n  \u003cimg src=\"https://img.shields.io/badge/language-C%2B%2B-blue.svg\" alt=\"Language\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/network-ENet-brightgreen.svg\" alt=\"Network Library\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/status-development-orange.svg\" alt=\"Status\"\u003e\n\u003c/div\u003e\n\n---\n\n## 📋 About\n\nEnetPlayGround is an experimental platform for exploring networking concepts using the ENet reliable UDP networking library. This project was developed to investigate the challenges and complexities of network programming in the context of multiplayer game development.\n\nThe primary focus of this sandbox is to test various networking approaches, understand performance limitations, and implement scalable client-server architecture patterns.\n\n## ✨ Features\n\n\u003ctable align=\"center\"\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ch3\u003e🖥️ Server Components\u003c/h3\u003e\n      \u003cul\u003e\n        \u003cli\u003e🔌 Multi-client connection management\u003c/li\u003e\n        \u003cli\u003e⚡ Robust event handling system\u003c/li\u003e\n        \u003cli\u003e📦 Reliable packet delivery implementation\u003c/li\u003e\n        \u003cli\u003e📢 Broadcast messaging infrastructure\u003c/li\u003e\n        \u003cli\u003e🗄️ MySQL database integration\u003c/li\u003e\n        \u003cli\u003e🧩 Plugin architecture support\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003ch3\u003e📱 Client Implementation\u003c/h3\u003e\n      \u003cul\u003e\n        \u003cli\u003e🔄 Connection stability management\u003c/li\u003e\n        \u003cli\u003e⏱️ Game state synchronization\u003c/li\u003e\n        \u003cli\u003e📝 Comprehensive logging system\u003c/li\u003e\n        \u003cli\u003e🖼️ Graphical user interface\u003c/li\u003e\n        \u003cli\u003e🗺️ Position visualization\u003c/li\u003e\n        \u003cli\u003e🖌️ Theming system\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## 📸 Screenshots\n\n\u003cdiv align=\"center\"\u003e\n  \u003ctable\u003e\n    \u003ctr\u003e\n      \u003ctd width=\"33%\"\u003e\n        \u003cimg src=\"docs/SecondServer.png\" alt=\"Server Console\" width=\"100%\"\u003e\n        \u003cp align=\"center\"\u003e\u003ci\u003eServer console displaying connected clients and active plugins\u003c/i\u003e\u003c/p\u003e\n      \u003c/td\u003e\n      \u003ctd width=\"33%\"\u003e\n        \u003cimg src=\"docs/Login1.0.png\" alt=\"Login Interface\" width=\"100%\"\u003e\n        \u003cp align=\"center\"\u003e\u003ci\u003eClient authentication interface\u003c/i\u003e\u003c/p\u003e\n      \u003c/td\u003e\n      \u003ctd width=\"33%\"\u003e\n        \u003cimg src=\"docs/Client1.0.png\" alt=\"Client Interface\" width=\"100%\"\u003e\n        \u003cp align=\"center\"\u003e\u003ci\u003eClient interface with inter-client communication\u003c/i\u003e\u003c/p\u003e\n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/table\u003e\n\u003c/div\u003e\n\n## 🔧 Tools and Libraries\n\n### 📚 Core Dependencies\n- **🌐 ENet**: Reliable UDP networking library for client-server communication\n- **🖌️ Hello ImGui**: Cross-platform GUI library for interface development\n- **🗃️ MySQL Connector**: Database connectivity for persistent storage\n\n### 🛠️ Development Tools\n- **📦 vcpkg**: C++ package manager for dependency management\n- **🏗️ Visual Studio 2022**: IDE for C++ development\n\n## 💻 Installation\n\n### 📋 Prerequisites\n- Visual Studio 2022 (or newer)\n- C++23 compatible compiler\n- vcpkg\n- Git\n\n### 🔄 Setup Process\n\n1. **📥 Clone the repository**\n   ```bash\n   git clone https://github.com/alexmollard/EnetPlayGround.git\n   cd EnetPlayGround\n   ```\n\n2. **⚙️ Configure vcpkg**\n   ```bash\n   # Install vcpkg in a directory accessible to all projects\n   # Example: \"C:\\Users\\\u003cUserName\u003e\\vcpkg\"\n   git clone https://github.com/Microsoft/vcpkg.git\n   cd vcpkg\n   .\\bootstrap-vcpkg.bat\n   .\\vcpkg integrate install\n   ```\n\n   - Add the vcpkg directory to your PATH environment variable\n   - Alternatively, set VCPKG_ROOT environment variable to your vcpkg installation path\n\n3. **📦 Install required dependencies**\n   - The projects now use vcpkg manifest files to manage dependencies so when you build the projects it will automatically install the required dependencies.\n\n4. **🔨 Build the projects**\n   - Open `EnetServer/EnetServer.sln` for the server component\n   - Open `EnetClient/EnetClient.sln` for the client component\n   - Build with Visual Studio (Ctrl+Shift+B)\n\n## 🚀 Usage\n\n### ⚙️ Server Configuration\n\nThe server can operate with a MySQL database backend or with a local file system for data storage. Two configuration methods are available:\n\n#### 🔐 Environment Variables\n- `GAME_DB_HOST`: Database server address (defaults to `localhost`)\n- `GAME_DB_USER`: Database username (defaults to `gameserver`)\n- `GAME_DB_PASSWORD`: Database password\n- `GAME_DB_NAME`: Database name (defaults to `gameserver`)\n- `GAME_DB_PORT`: Database port (defaults to `3306`)\n\n#### 📄 Configuration File\nAs an alternative to environment variables, settings can be defined in `server_config.cfg` located in the server executable directory.\n\n### 🏃‍♂️ Running the Application\n\n1. **🖥️ Start the server**\n   - Launch the compiled server executable\n   - Verify successful initialization without errors\n\n2. **📱 Connect clients**\n   - Start client instances\n   - Connect to the server using the appropriate address and port\n   - Test inter-client communication\n\n## 🛣️ Development Roadmap\n\n- [x] Core client-server communication\n- [x] Multi-client messaging\n- [x] Position data synchronization\n- [x] Error handling system\n- [x] Authentication functionality\n- [x] Direct messaging between clients\n- [x] Administrative controls\n- [x] Position visualization\n- [x] Plugin infrastructure\n- [x] Database integration\n- [x] Server multi-threading optimization\n- [x] Controlled server shutdown process\n- [ ] Fix bug where a client can leave and the server spams game state updates until clients start crashing\n- [ ] Enhanced security implementation\n- [ ] Improved error recovery mechanisms\n- [ ] Administrative graphical interface\n\n## 🔬 Research Areas\n\nEnetPlayGround serves as a platform for investigating various networking challenges:\n\n- 📈 Network capacity and scaling limits\n- 🔄 Concurrency management under high loads\n- 🔌 Recovery from connection interruptions\n- 📏 Message size optimization\n- ⏱️ Latency impact assessment\n- 💻 Hardware requirements analysis\n- 🔒 Security impact on performance\n\n## ❓ Frequently Asked Questions\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🤔 Why was ENet selected as the networking library?\u003c/b\u003e\u003c/summary\u003e\nENet provides a reliable UDP implementation that balances performance with reliability, making it suitable for real-time applications that require guaranteed delivery. and there wasnt many other options available at the time of my single google search.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e📊 What is the project development status?\u003c/b\u003e\u003c/summary\u003e..\nThe project is in active development with continuous improvements to stability, performance, and feature set.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e📄 Can this codebase be used in other projects?\u003c/b\u003e\u003c/summary\u003e\nYes, the code is available for use and modification in other projects, though it is primarily designed as an experimental platform. I wouldnt recommend it right now.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🏭 Is this suitable for production environments?\u003c/b\u003e\u003c/summary\u003e\nThe current implementation is intended for research and development purposes and requires additional hardening before production deployment.\nPLEASE DO NOT USE THIS IN PRODUCTION!\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e👥 What is the concurrent user capacity?\u003c/b\u003e\u003c/summary\u003e\nI have only tested with 5 local clients and 2 remote clients, but im unsure of the maximum capacity. The server is designed to handle multiple clients.\n\u003c/details\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"http://estruyf-github.azurewebsites.net/api/VisitorHit?user=alexmollard\u0026repo=EnetPlayGround\u0026countColorcountColor\u0026countColor=%237B1E7B\" alt=\"Visitor Count\" /\u003e\n  \u003cbr\u003e\n  \u003cimg src=\"https://media1.tenor.com/m/aGA-AhVPXS0AAAAd/gato-enojado-insano-waza.gif\" alt=\"cat\" width=\"200px\"\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://www.alexmollard.dev/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Created%20by-Alex%20Mollard-blue?style=for-the-badge\u0026logo=github\" alt=\"Created by Alex Mollard\"\u003e\u003c/a\u003e\n\u003c/div\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexmollard%2Fenetplayground","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexmollard%2Fenetplayground","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexmollard%2Fenetplayground/lists"}