mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-06 17:59:48 +00:00
Implemented Threaded ClassLoader, improves class loading while on different threads (no need to synchronize states)
This commit is contained in:
@ -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();
|
||||
|
@ -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{
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user