diff --git a/src/pocketmine/PocketMine.php b/src/pocketmine/PocketMine.php index 76cbf1a79..b7573380c 100644 --- a/src/pocketmine/PocketMine.php +++ b/src/pocketmine/PocketMine.php @@ -95,6 +95,7 @@ namespace pocketmine { } if(!class_exists("ClassLoader", false)){ + require_once(\pocketmine\PATH . "src/spl/ThreadedFactory.php"); require_once(\pocketmine\PATH . "src/spl/ClassLoader.php"); require_once(\pocketmine\PATH . "src/spl/BaseClassLoader.php"); require_once(\pocketmine\PATH . "src/pocketmine/CompatibleClassLoader.php"); @@ -103,7 +104,6 @@ namespace pocketmine { $autoloader = new CompatibleClassLoader(); $autoloader->addPath(\pocketmine\PATH . "src"); $autoloader->addPath(\pocketmine\PATH . "src" . DIRECTORY_SEPARATOR . "spl"); - $autoloader->addPath(\pocketmine\PATH . "src" . DIRECTORY_SEPARATOR . "raklib"); $autoloader->register(true); diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 43633f662..9a0a6dd6f 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -1489,8 +1489,7 @@ class Server{ $this->dataPath = realpath($dataPath) . DIRECTORY_SEPARATOR; $this->pluginPath = realpath($pluginPath) . DIRECTORY_SEPARATOR; - $this->consoleThreaded = new \Threaded(); - $this->console = new CommandReader($this->consoleThreaded); + $this->console = new CommandReader(); $version = new VersionString($this->getPocketMineVersion()); $this->logger->info("Starting Minecraft: PE server version " . TextFormat::AQUA . $this->getVersion()); diff --git a/src/pocketmine/command/CommandReader.php b/src/pocketmine/command/CommandReader.php index 076f868fe..96477a58d 100644 --- a/src/pocketmine/command/CommandReader.php +++ b/src/pocketmine/command/CommandReader.php @@ -33,7 +33,7 @@ class CommandReader extends Thread{ * @param \Threaded $threaded */ public function __construct(\Threaded $threaded){ - $this->buffer = $threaded; + $this->buffer = \ThreadedFactory::create(); $this->start(); } @@ -86,4 +86,4 @@ class CommandReader extends Thread{ $lastLine = microtime(true); } } -} \ No newline at end of file +} diff --git a/src/pocketmine/level/generator/GenerationManager.php b/src/pocketmine/level/generator/GenerationManager.php index 692152959..0c0bd9feb 100644 --- a/src/pocketmine/level/generator/GenerationManager.php +++ b/src/pocketmine/level/generator/GenerationManager.php @@ -35,14 +35,6 @@ class GenerationManager{ * byte[] (length - 1 bytes) */ - /* - * Direction: Server->Thread - * byte[] payload: - * string root namespace - * byte[] path - */ - const PACKET_ADD_NAMESPACE = 0x00; - /* * Direction: Both * If Server->Thread, request chunk generation @@ -52,7 +44,7 @@ class GenerationManager{ * int32 chunkX * int32 chunkZ */ - const PACKET_REQUEST_CHUNK = 0x01; + const PACKET_REQUEST_CHUNK = 0x00; /* * Direction: Both @@ -64,7 +56,7 @@ class GenerationManager{ * byte[] className * byte[] chunk (none if generated flag is not set) */ - const PACKET_SEND_CHUNK = 0x02; + const PACKET_SEND_CHUNK = 0x01; /* * Direction: Server->Thread @@ -74,14 +66,14 @@ class GenerationManager{ * string class that extends pocketmine\level\generator\Generator * byte[] serialized options array */ - const PACKET_OPEN_LEVEL = 0x03; + const PACKET_OPEN_LEVEL = 0x02; /* * Direction: Server->Thread * byte[] payload: * int32 levelID */ - const PACKET_CLOSE_LEVEL = 0x04; + const PACKET_CLOSE_LEVEL = 0x03; /* * Direction: Server->Thread @@ -256,13 +248,6 @@ class GenerationManager{ }elseif($pid === self::PACKET_CLOSE_LEVEL){ $levelID = Binary::readInt(substr($packet, $offset, 4)); $this->closeLevel($levelID); - }elseif($pid === self::PACKET_ADD_NAMESPACE){ - $len = Binary::readShort(substr($packet, $offset, 2)); - $offset += 2; - $namespace = substr($packet, $offset, $len); - $offset += $len; - $path = substr($packet, $offset); - $this->loader->addPath($path); }elseif($pid === self::PACKET_SHUTDOWN){ foreach($this->levels as $level){ $level->shutdown(); diff --git a/src/pocketmine/level/generator/GenerationRequestManager.php b/src/pocketmine/level/generator/GenerationRequestManager.php index ed5151a4e..bb7fa1499 100644 --- a/src/pocketmine/level/generator/GenerationRequestManager.php +++ b/src/pocketmine/level/generator/GenerationRequestManager.php @@ -34,17 +34,12 @@ class GenerationRequestManager{ /** @var GenerationThread */ protected $generationThread; - private $internalThreaded; - private $externalThreaded; - /** * @param Server $server */ public function __construct(Server $server){ $this->server = $server; - $this->internalThreaded = new \Threaded(); - $this->externalThreaded = new \Threaded(); - $this->generationThread = new GenerationThread($this->internalThreaded, $this->externalThreaded, $server->getLogger(), $server->getLoader()); + $this->generationThread = new GenerationThread($server->getLogger(), $server->getLoader()); } /** @@ -67,9 +62,11 @@ class GenerationRequestManager{ $this->generationThread->pushMainToThreadPacket($buffer); } + /** + * @deprecated + */ public function addNamespace($namespace, $path){ - $buffer = chr(GenerationManager::PACKET_ADD_NAMESPACE) . Binary::writeShort(strlen($namespace)) . $namespace . $path; - $this->generationThread->pushMainToThreadPacket($buffer); + } protected function sendChunk($levelID, FullChunk $chunk){ @@ -143,4 +140,4 @@ class GenerationRequestManager{ } -} \ No newline at end of file +} diff --git a/src/pocketmine/level/generator/GenerationThread.php b/src/pocketmine/level/generator/GenerationThread.php index de44316ea..c2286ce21 100644 --- a/src/pocketmine/level/generator/GenerationThread.php +++ b/src/pocketmine/level/generator/GenerationThread.php @@ -84,8 +84,8 @@ class GenerationThread extends Thread{ $this->addDependency($loadPaths, new \ReflectionClass($this->loader)); $this->loadPaths = array_reverse($loadPaths); - $this->externalQueue = $internalThreaded; - $this->internalQueue = $externalThreaded; + $this->externalQueue = \ThreadedFactory::create(); + $this->internalQueue = \ThreadedFactory::create(); $this->start(); } @@ -117,4 +117,4 @@ class GenerationThread extends Thread{ $generationManager = new GenerationManager($this, $this->getLogger(), $this->loader); } -} \ No newline at end of file +} diff --git a/src/pocketmine/network/RakLibInterface.php b/src/pocketmine/network/RakLibInterface.php index 824b45fd7..54e78606d 100644 --- a/src/pocketmine/network/RakLibInterface.php +++ b/src/pocketmine/network/RakLibInterface.php @@ -110,9 +110,6 @@ class RakLibInterface implements ServerInstance, SourceInterface{ private $upload = 0; private $download = 0; - private $internalThreaded; - private $externalThreaded; - public function __construct(Server $server){ $this->registerPackets(); @@ -120,10 +117,7 @@ class RakLibInterface implements ServerInstance, SourceInterface{ $this->server = $server; $this->identifiers = new \SplObjectStorage(); - $this->internalThreaded = new \Threaded(); - $this->externalThreaded = new \Threaded(); - - $this->rakLib = new RakLibServer($this->internalThreaded, $this->externalThreaded, $this->server->getLogger(), $this->server->getLoader(), $this->server->getPort(), $this->server->getIp() === "" ? "0.0.0.0" : $this->server->getIp()); + $this->rakLib = new RakLibServer($this->server->getLogger(), $this->server->getLoader(), $this->server->getPort(), $this->server->getIp() === "" ? "0.0.0.0" : $this->server->getIp()); $this->interface = new ServerHandler($this->rakLib, $this); $this->setName($this->server->getMotd()); } diff --git a/src/pocketmine/scheduler/AsyncPool.php b/src/pocketmine/scheduler/AsyncPool.php index 35917dfd9..cb577f799 100644 --- a/src/pocketmine/scheduler/AsyncPool.php +++ b/src/pocketmine/scheduler/AsyncPool.php @@ -46,7 +46,7 @@ class AsyncPool{ for($i = 0; $i < $this->size; ++$i){ $this->workerUsage[$i] = 0; - $this->workers[$i] = new AsyncWorker(); + $this->workers[$i] = new AsyncWorker($server->getLoader()); $this->workers[$i]->start(); } } @@ -110,4 +110,4 @@ class AsyncPool{ } } } -} \ No newline at end of file +} diff --git a/src/pocketmine/scheduler/AsyncWorker.php b/src/pocketmine/scheduler/AsyncWorker.php index 0ce882b28..95c3716f2 100644 --- a/src/pocketmine/scheduler/AsyncWorker.php +++ b/src/pocketmine/scheduler/AsyncWorker.php @@ -25,20 +25,22 @@ use pocketmine\Worker; class AsyncWorker extends Worker{ + public $loader; + + public function __construct(\ClassLoader $loader){ + $this->loader = $loader; + } + public function run(){ if(!interface_exists("ClassLoader", false)){ require(\pocketmine\PATH . "src/spl/ClassLoader.php"); - } - if(!class_exists("BaseClassLoader", false)){ require(\pocketmine\PATH . "src/spl/BaseClassLoader.php"); + require(\pocketmine\PATH . "src/pocketmine/CompatibleClassLoader.php"); } - $autoloader = new \BaseClassLoader(); - $autoloader->addPath(\pocketmine\PATH . "src"); - $autoloader->addPath(\pocketmine\PATH . "src" . DIRECTORY_SEPARATOR . "spl"); - $autoloader->register(true); + $this->loader->register(true); } public function start($options = PTHREADS_INHERIT_NONE){ parent::start(PTHREADS_INHERIT_CONSTANTS | PTHREADS_INHERIT_FUNCTIONS); } -} \ No newline at end of file +} diff --git a/src/raklib b/src/raklib index 1f175c185..7c0888f4a 160000 --- a/src/raklib +++ b/src/raklib @@ -1 +1 @@ -Subproject commit 1f175c18558020477f429bb830325502ff97f10c +Subproject commit 7c0888f4ad51c4eb9b695c38691b16aa08522493 diff --git a/src/spl b/src/spl index 178d2a38f..695451daf 160000 --- a/src/spl +++ b/src/spl @@ -1 +1 @@ -Subproject commit 178d2a38f95d552fa5d91da26edc13a86d8054c6 +Subproject commit 695451daf403d86e9db11e6119a6c9cef7f85463