Adds php-di for dependency injection instead of using singletons
							parent
							
								
									fcee1f89d4
								
							
						
					
					
						commit
						792c3939ab
					
				| 
						 | 
					@ -1,7 +1,8 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    "require": {
 | 
					    "require": {
 | 
				
			||||||
        "openswoole/core": "22.1.5",
 | 
					        "openswoole/core": "22.1.5",
 | 
				
			||||||
        "openswoole/ide-helper": "~22.0.1"
 | 
					        "openswoole/ide-helper": "~22.0.1",
 | 
				
			||||||
 | 
					        "php-di/php-di": "^7.0"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "autoload": {
 | 
					    "autoload": {
 | 
				
			||||||
        "psr-4": {
 | 
					        "psr-4": {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,8 +4,68 @@
 | 
				
			||||||
        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
 | 
					        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
 | 
				
			||||||
        "This file is @generated automatically"
 | 
					        "This file is @generated automatically"
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "content-hash": "2425e97b911ce8e0f56be03367977c06",
 | 
					    "content-hash": "6765f1cecaa25edf73c7e92ee597b240",
 | 
				
			||||||
    "packages": [
 | 
					    "packages": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "name": "laravel/serializable-closure",
 | 
				
			||||||
 | 
					            "version": "v1.3.3",
 | 
				
			||||||
 | 
					            "source": {
 | 
				
			||||||
 | 
					                "type": "git",
 | 
				
			||||||
 | 
					                "url": "https://github.com/laravel/serializable-closure.git",
 | 
				
			||||||
 | 
					                "reference": "3dbf8a8e914634c48d389c1234552666b3d43754"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "dist": {
 | 
				
			||||||
 | 
					                "type": "zip",
 | 
				
			||||||
 | 
					                "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754",
 | 
				
			||||||
 | 
					                "reference": "3dbf8a8e914634c48d389c1234552666b3d43754",
 | 
				
			||||||
 | 
					                "shasum": ""
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "require": {
 | 
				
			||||||
 | 
					                "php": "^7.3|^8.0"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "require-dev": {
 | 
				
			||||||
 | 
					                "nesbot/carbon": "^2.61",
 | 
				
			||||||
 | 
					                "pestphp/pest": "^1.21.3",
 | 
				
			||||||
 | 
					                "phpstan/phpstan": "^1.8.2",
 | 
				
			||||||
 | 
					                "symfony/var-dumper": "^5.4.11"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "type": "library",
 | 
				
			||||||
 | 
					            "extra": {
 | 
				
			||||||
 | 
					                "branch-alias": {
 | 
				
			||||||
 | 
					                    "dev-master": "1.x-dev"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "autoload": {
 | 
				
			||||||
 | 
					                "psr-4": {
 | 
				
			||||||
 | 
					                    "Laravel\\SerializableClosure\\": "src/"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "notification-url": "https://packagist.org/downloads/",
 | 
				
			||||||
 | 
					            "license": [
 | 
				
			||||||
 | 
					                "MIT"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "authors": [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    "name": "Taylor Otwell",
 | 
				
			||||||
 | 
					                    "email": "taylor@laravel.com"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    "name": "Nuno Maduro",
 | 
				
			||||||
 | 
					                    "email": "nuno@laravel.com"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.",
 | 
				
			||||||
 | 
					            "keywords": [
 | 
				
			||||||
 | 
					                "closure",
 | 
				
			||||||
 | 
					                "laravel",
 | 
				
			||||||
 | 
					                "serializable"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "support": {
 | 
				
			||||||
 | 
					                "issues": "https://github.com/laravel/serializable-closure/issues",
 | 
				
			||||||
 | 
					                "source": "https://github.com/laravel/serializable-closure"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "time": "2023-11-08T14:08:06+00:00"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            "name": "openswoole/core",
 | 
					            "name": "openswoole/core",
 | 
				
			||||||
            "version": "22.1.5",
 | 
					            "version": "22.1.5",
 | 
				
			||||||
| 
						 | 
					@ -116,6 +176,187 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "time": "2023-02-05T22:27:37+00:00"
 | 
					            "time": "2023-02-05T22:27:37+00:00"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "name": "php-di/invoker",
 | 
				
			||||||
 | 
					            "version": "2.3.4",
 | 
				
			||||||
 | 
					            "source": {
 | 
				
			||||||
 | 
					                "type": "git",
 | 
				
			||||||
 | 
					                "url": "https://github.com/PHP-DI/Invoker.git",
 | 
				
			||||||
 | 
					                "reference": "33234b32dafa8eb69202f950a1fc92055ed76a86"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "dist": {
 | 
				
			||||||
 | 
					                "type": "zip",
 | 
				
			||||||
 | 
					                "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/33234b32dafa8eb69202f950a1fc92055ed76a86",
 | 
				
			||||||
 | 
					                "reference": "33234b32dafa8eb69202f950a1fc92055ed76a86",
 | 
				
			||||||
 | 
					                "shasum": ""
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "require": {
 | 
				
			||||||
 | 
					                "php": ">=7.3",
 | 
				
			||||||
 | 
					                "psr/container": "^1.0|^2.0"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "require-dev": {
 | 
				
			||||||
 | 
					                "athletic/athletic": "~0.1.8",
 | 
				
			||||||
 | 
					                "mnapoli/hard-mode": "~0.3.0",
 | 
				
			||||||
 | 
					                "phpunit/phpunit": "^9.0"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "type": "library",
 | 
				
			||||||
 | 
					            "autoload": {
 | 
				
			||||||
 | 
					                "psr-4": {
 | 
				
			||||||
 | 
					                    "Invoker\\": "src/"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "notification-url": "https://packagist.org/downloads/",
 | 
				
			||||||
 | 
					            "license": [
 | 
				
			||||||
 | 
					                "MIT"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "description": "Generic and extensible callable invoker",
 | 
				
			||||||
 | 
					            "homepage": "https://github.com/PHP-DI/Invoker",
 | 
				
			||||||
 | 
					            "keywords": [
 | 
				
			||||||
 | 
					                "callable",
 | 
				
			||||||
 | 
					                "dependency",
 | 
				
			||||||
 | 
					                "dependency-injection",
 | 
				
			||||||
 | 
					                "injection",
 | 
				
			||||||
 | 
					                "invoke",
 | 
				
			||||||
 | 
					                "invoker"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "support": {
 | 
				
			||||||
 | 
					                "issues": "https://github.com/PHP-DI/Invoker/issues",
 | 
				
			||||||
 | 
					                "source": "https://github.com/PHP-DI/Invoker/tree/2.3.4"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "funding": [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    "url": "https://github.com/mnapoli",
 | 
				
			||||||
 | 
					                    "type": "github"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "time": "2023-09-08T09:24:21+00:00"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "name": "php-di/php-di",
 | 
				
			||||||
 | 
					            "version": "7.0.6",
 | 
				
			||||||
 | 
					            "source": {
 | 
				
			||||||
 | 
					                "type": "git",
 | 
				
			||||||
 | 
					                "url": "https://github.com/PHP-DI/PHP-DI.git",
 | 
				
			||||||
 | 
					                "reference": "8097948a89f6ec782839b3e958432f427cac37fd"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "dist": {
 | 
				
			||||||
 | 
					                "type": "zip",
 | 
				
			||||||
 | 
					                "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/8097948a89f6ec782839b3e958432f427cac37fd",
 | 
				
			||||||
 | 
					                "reference": "8097948a89f6ec782839b3e958432f427cac37fd",
 | 
				
			||||||
 | 
					                "shasum": ""
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "require": {
 | 
				
			||||||
 | 
					                "laravel/serializable-closure": "^1.0",
 | 
				
			||||||
 | 
					                "php": ">=8.0",
 | 
				
			||||||
 | 
					                "php-di/invoker": "^2.0",
 | 
				
			||||||
 | 
					                "psr/container": "^1.1 || ^2.0"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "provide": {
 | 
				
			||||||
 | 
					                "psr/container-implementation": "^1.0"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "require-dev": {
 | 
				
			||||||
 | 
					                "friendsofphp/php-cs-fixer": "^3",
 | 
				
			||||||
 | 
					                "friendsofphp/proxy-manager-lts": "^1",
 | 
				
			||||||
 | 
					                "mnapoli/phpunit-easymock": "^1.3",
 | 
				
			||||||
 | 
					                "phpunit/phpunit": "^9.5",
 | 
				
			||||||
 | 
					                "vimeo/psalm": "^4.6"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "suggest": {
 | 
				
			||||||
 | 
					                "friendsofphp/proxy-manager-lts": "Install it if you want to use lazy injection (version ^1)"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "type": "library",
 | 
				
			||||||
 | 
					            "autoload": {
 | 
				
			||||||
 | 
					                "files": [
 | 
				
			||||||
 | 
					                    "src/functions.php"
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					                "psr-4": {
 | 
				
			||||||
 | 
					                    "DI\\": "src/"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "notification-url": "https://packagist.org/downloads/",
 | 
				
			||||||
 | 
					            "license": [
 | 
				
			||||||
 | 
					                "MIT"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "description": "The dependency injection container for humans",
 | 
				
			||||||
 | 
					            "homepage": "https://php-di.org/",
 | 
				
			||||||
 | 
					            "keywords": [
 | 
				
			||||||
 | 
					                "PSR-11",
 | 
				
			||||||
 | 
					                "container",
 | 
				
			||||||
 | 
					                "container-interop",
 | 
				
			||||||
 | 
					                "dependency injection",
 | 
				
			||||||
 | 
					                "di",
 | 
				
			||||||
 | 
					                "ioc",
 | 
				
			||||||
 | 
					                "psr11"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "support": {
 | 
				
			||||||
 | 
					                "issues": "https://github.com/PHP-DI/PHP-DI/issues",
 | 
				
			||||||
 | 
					                "source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.6"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "funding": [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    "url": "https://github.com/mnapoli",
 | 
				
			||||||
 | 
					                    "type": "github"
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    "url": "https://tidelift.com/funding/github/packagist/php-di/php-di",
 | 
				
			||||||
 | 
					                    "type": "tidelift"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "time": "2023-11-02T10:04:50+00:00"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "name": "psr/container",
 | 
				
			||||||
 | 
					            "version": "2.0.2",
 | 
				
			||||||
 | 
					            "source": {
 | 
				
			||||||
 | 
					                "type": "git",
 | 
				
			||||||
 | 
					                "url": "https://github.com/php-fig/container.git",
 | 
				
			||||||
 | 
					                "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "dist": {
 | 
				
			||||||
 | 
					                "type": "zip",
 | 
				
			||||||
 | 
					                "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
 | 
				
			||||||
 | 
					                "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
 | 
				
			||||||
 | 
					                "shasum": ""
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "require": {
 | 
				
			||||||
 | 
					                "php": ">=7.4.0"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "type": "library",
 | 
				
			||||||
 | 
					            "extra": {
 | 
				
			||||||
 | 
					                "branch-alias": {
 | 
				
			||||||
 | 
					                    "dev-master": "2.0.x-dev"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "autoload": {
 | 
				
			||||||
 | 
					                "psr-4": {
 | 
				
			||||||
 | 
					                    "Psr\\Container\\": "src/"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "notification-url": "https://packagist.org/downloads/",
 | 
				
			||||||
 | 
					            "license": [
 | 
				
			||||||
 | 
					                "MIT"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "authors": [
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    "name": "PHP-FIG",
 | 
				
			||||||
 | 
					                    "homepage": "https://www.php-fig.org/"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "description": "Common Container Interface (PHP FIG PSR-11)",
 | 
				
			||||||
 | 
					            "homepage": "https://github.com/php-fig/container",
 | 
				
			||||||
 | 
					            "keywords": [
 | 
				
			||||||
 | 
					                "PSR-11",
 | 
				
			||||||
 | 
					                "container",
 | 
				
			||||||
 | 
					                "container-interface",
 | 
				
			||||||
 | 
					                "container-interop",
 | 
				
			||||||
 | 
					                "psr"
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "support": {
 | 
				
			||||||
 | 
					                "issues": "https://github.com/php-fig/container/issues",
 | 
				
			||||||
 | 
					                "source": "https://github.com/php-fig/container/tree/2.0.2"
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "time": "2021-11-05T16:47:00+00:00"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            "name": "psr/http-message",
 | 
					            "name": "psr/http-message",
 | 
				
			||||||
            "version": "2.0",
 | 
					            "version": "2.0",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										13
									
								
								src/Boot.php
								
								
								
								
							
							
						
						
									
										13
									
								
								src/Boot.php
								
								
								
								
							| 
						 | 
					@ -2,6 +2,17 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require_once 'vendor/autoload.php';
 | 
					require_once 'vendor/autoload.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use DI\ContainerBuilder;
 | 
				
			||||||
 | 
					use Emulator\Core\Logging\Logger;
 | 
				
			||||||
use Emulator\HabboEnvironment;
 | 
					use Emulator\HabboEnvironment;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
HabboEnvironment::getInstance()->initialize();
 | 
					$containerBuilder = new ContainerBuilder();
 | 
				
			||||||
 | 
					$containerBuilder->useAutowiring(true);
 | 
				
			||||||
 | 
					$containerBuilder->enableCompilation(dirname(__DIR__, 1) . '/var/cache/php-di');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					try {
 | 
				
			||||||
 | 
					    $container = $containerBuilder->build();
 | 
				
			||||||
 | 
					    $container->get(HabboEnvironment::class)->initialize();
 | 
				
			||||||
 | 
					} catch (Exception $ex) {
 | 
				
			||||||
 | 
					    Logger::fatal($ex->getTraceAsString());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -6,21 +6,15 @@ use Emulator\Core\Logging\Logger;
 | 
				
			||||||
use Emulator\Messages\MessageHandler;
 | 
					use Emulator\Messages\MessageHandler;
 | 
				
			||||||
use Emulator\Network\Game\GameNetworkServer;
 | 
					use Emulator\Network\Game\GameNetworkServer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class HabboEnvironment {
 | 
					readonly class HabboEnvironment {
 | 
				
			||||||
    private static ?HabboEnvironment $instance = null;
 | 
					    public function __construct(private MessageHandler $messageHandler, private GameNetworkServer $gameNetworkServer) {
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function initialize(): void {
 | 
					    public function initialize(): void {
 | 
				
			||||||
        Logger::info("Starting up [b]HabboEmulator[/b] (PHP Edition) for [r]$_SERVER[USER][/r]");
 | 
					        Logger::info("Starting up [b]HabboEmulator[/b] (PHP Edition) for [r]$_SERVER[USER][/r]");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        MessageHandler::getInstance();
 | 
					        $this->messageHandler->initialize();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        GameNetworkServer::getInstance()->start(2096);
 | 
					        $this->gameNetworkServer->start(2096);
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public static function getInstance(): HabboEnvironment {
 | 
					 | 
				
			||||||
        if (self::$instance === null)
 | 
					 | 
				
			||||||
            self::$instance = new self();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return self::$instance;
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -11,13 +11,17 @@ use Emulator\Network\Game\Sessions\Session;
 | 
				
			||||||
use SplObjectStorage;
 | 
					use SplObjectStorage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class MessageHandler {
 | 
					class MessageHandler {
 | 
				
			||||||
    private static ?MessageHandler $instance = null;
 | 
					 | 
				
			||||||
    private SplObjectStorage $handlers;
 | 
					    private SplObjectStorage $handlers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function __construct() {
 | 
					    public function __construct() {
 | 
				
			||||||
        $this->handlers = new SplObjectStorage();
 | 
					        $this->handlers = new SplObjectStorage();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function initialize(): void {
 | 
				
			||||||
        $this->handlers[Header::ReleaseVersion] = new ReleaseVersionMessageEvent();
 | 
					        $this->handlers[Header::ReleaseVersion] = new ReleaseVersionMessageEvent();
 | 
				
			||||||
        $this->handlers[Header::SecurityTicket] = new SecurityTicketMessageEvent();
 | 
					        $this->handlers[Header::SecurityTicket] = new SecurityTicketMessageEvent();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        Logger::info("Loaded " . count($this->handlers) . " message handlers");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function handlePacket(Session $session, ClientMessage $request): void {
 | 
					    public function handlePacket(Session $session, ClientMessage $request): void {
 | 
				
			||||||
| 
						 | 
					@ -31,11 +35,4 @@ class MessageHandler {
 | 
				
			||||||
            Logger::warn("[{$request->getHeader()}] - Unregistered!");
 | 
					            Logger::warn("[{$request->getHeader()}] - Unregistered!");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    public static function getInstance(): MessageHandler {
 | 
					 | 
				
			||||||
        if (self::$instance === null)
 | 
					 | 
				
			||||||
            self::$instance = new self();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return self::$instance;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -12,8 +12,10 @@ use OpenSwoole\Http\Request;
 | 
				
			||||||
use OpenSwoole\WebSocket\Frame;
 | 
					use OpenSwoole\WebSocket\Frame;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class GameNetworkServer {
 | 
					class GameNetworkServer {
 | 
				
			||||||
    private static ?GameNetworkServer $instance = null;
 | 
					 | 
				
			||||||
    private array $sessions;
 | 
					    private array $sessions;
 | 
				
			||||||
 | 
					    public function __construct(private readonly MessageHandler $messageHandler) {
 | 
				
			||||||
 | 
					        $this->sessions = [];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function start(int $port): void {
 | 
					    public function start(int $port): void {
 | 
				
			||||||
        $server = new Server("127.0.0.1", $port);
 | 
					        $server = new Server("127.0.0.1", $port);
 | 
				
			||||||
| 
						 | 
					@ -25,14 +27,6 @@ class GameNetworkServer {
 | 
				
			||||||
        $server->start();
 | 
					        $server->start();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static function getInstance(): GameNetworkServer {
 | 
					 | 
				
			||||||
        if (self::$instance === null) {
 | 
					 | 
				
			||||||
            self::$instance = new self();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return self::$instance;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    function onStart(Server $server): void {
 | 
					    function onStart(Server $server): void {
 | 
				
			||||||
        Logger::info("Websocket server is started at $server->host:$server->port");
 | 
					        Logger::info("Websocket server is started at $server->host:$server->port");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -58,7 +52,7 @@ class GameNetworkServer {
 | 
				
			||||||
            $length = ByteEncoding::getInt32(array_slice($data, 1, 4));
 | 
					            $length = ByteEncoding::getInt32(array_slice($data, 1, 4));
 | 
				
			||||||
            $packet = array_slice($data, 4, $length);
 | 
					            $packet = array_slice($data, 4, $length);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            MessageHandler::getInstance()->handlePacket($this->sessions[$frame->fd], new ClientMessage($packet));
 | 
					            $this->messageHandler->handlePacket($this->sessions[$frame->fd], new ClientMessage($packet));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					# .gitignore sample
 | 
				
			||||||
 | 
					# Ignore all files in this dir...
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ... except for this one.
 | 
				
			||||||
 | 
					!.gitignore
 | 
				
			||||||
		Loading…
	
		Reference in New Issue