mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-06 09:56:06 +00:00
Update to Snooze 0.5.0
This commit is contained in:
@ -39,7 +39,6 @@ use pocketmine\network\NetworkInterfaceStartException;
|
||||
use pocketmine\network\PacketHandlingException;
|
||||
use pocketmine\player\GameMode;
|
||||
use pocketmine\Server;
|
||||
use pocketmine\snooze\SleeperNotifier;
|
||||
use pocketmine\timings\Timings;
|
||||
use pocketmine\utils\Utils;
|
||||
use raklib\generic\DisconnectReason;
|
||||
@ -79,7 +78,7 @@ class RakLibInterface implements ServerEventListener, AdvancedNetworkInterface{
|
||||
private RakLibToUserThreadMessageReceiver $eventReceiver;
|
||||
private UserToRakLibThreadMessageSender $interface;
|
||||
|
||||
private SleeperNotifier $sleeper;
|
||||
private int $sleeperNotifierId;
|
||||
|
||||
private PacketBroadcaster $packetBroadcaster;
|
||||
private EntityEventBroadcaster $entityEventBroadcaster;
|
||||
@ -104,7 +103,15 @@ class RakLibInterface implements ServerEventListener, AdvancedNetworkInterface{
|
||||
|
||||
$this->rakServerId = mt_rand(0, PHP_INT_MAX);
|
||||
|
||||
$this->sleeper = new SleeperNotifier();
|
||||
$sleeperEntry = $this->server->getTickSleeper()->addNotifier(function() : void{
|
||||
Timings::$connection->startTiming();
|
||||
try{
|
||||
while($this->eventReceiver->handle($this));
|
||||
}finally{
|
||||
Timings::$connection->stopTiming();
|
||||
}
|
||||
});
|
||||
$this->sleeperNotifierId = $sleeperEntry->getNotifierId();
|
||||
|
||||
/** @phpstan-var ThreadSafeArray<int, string> $mainToThreadBuffer */
|
||||
$mainToThreadBuffer = new ThreadSafeArray();
|
||||
@ -119,7 +126,7 @@ class RakLibInterface implements ServerEventListener, AdvancedNetworkInterface{
|
||||
$this->rakServerId,
|
||||
$this->server->getConfigGroup()->getPropertyInt("network.max-mtu-size", 1492),
|
||||
self::MCPE_RAKNET_PROTOCOL_VERSION,
|
||||
$this->sleeper
|
||||
$sleeperEntry
|
||||
);
|
||||
$this->eventReceiver = new RakLibToUserThreadMessageReceiver(
|
||||
new PthreadsChannelReader($threadToMainBuffer)
|
||||
@ -130,14 +137,6 @@ class RakLibInterface implements ServerEventListener, AdvancedNetworkInterface{
|
||||
}
|
||||
|
||||
public function start() : void{
|
||||
$this->server->getTickSleeper()->addNotifier($this->sleeper, function() : void{
|
||||
Timings::$connection->startTiming();
|
||||
try{
|
||||
while($this->eventReceiver->handle($this));
|
||||
}finally{
|
||||
Timings::$connection->stopTiming();
|
||||
}
|
||||
});
|
||||
$this->server->getLogger()->debug("Waiting for RakLib to start...");
|
||||
try{
|
||||
$this->rakLib->startAndWait();
|
||||
@ -182,7 +181,7 @@ class RakLibInterface implements ServerEventListener, AdvancedNetworkInterface{
|
||||
}
|
||||
|
||||
public function shutdown() : void{
|
||||
$this->server->getTickSleeper()->removeNotifier($this->sleeper);
|
||||
$this->server->getTickSleeper()->removeNotifier($this->sleeperNotifierId);
|
||||
$this->rakLib->quit();
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,7 @@ namespace pocketmine\network\mcpe\raklib;
|
||||
|
||||
use pmmp\thread\Thread as NativeThread;
|
||||
use pmmp\thread\ThreadSafeArray;
|
||||
use pocketmine\snooze\SleeperNotifier;
|
||||
use pocketmine\snooze\SleeperHandlerEntry;
|
||||
use pocketmine\thread\log\ThreadSafeLogger;
|
||||
use pocketmine\thread\NonThreadSafeValue;
|
||||
use pocketmine\thread\Thread;
|
||||
@ -63,7 +63,7 @@ class RakLibServer extends Thread{
|
||||
protected int $serverId,
|
||||
protected int $maxMtuSize,
|
||||
protected int $protocolVersion,
|
||||
protected SleeperNotifier $mainThreadNotifier
|
||||
protected SleeperHandlerEntry $sleeperEntry
|
||||
){
|
||||
$this->mainPath = \pocketmine\PATH;
|
||||
$this->address = new NonThreadSafeValue($address);
|
||||
@ -133,7 +133,7 @@ class RakLibServer extends Thread{
|
||||
$this->maxMtuSize,
|
||||
new SimpleProtocolAcceptor($this->protocolVersion),
|
||||
new UserToRakLibThreadMessageReceiver(new PthreadsChannelReader($this->mainToThreadBuffer)),
|
||||
new RakLibToUserThreadMessageSender(new SnoozeAwarePthreadsChannelWriter($this->threadToMainBuffer, $this->mainThreadNotifier)),
|
||||
new RakLibToUserThreadMessageSender(new SnoozeAwarePthreadsChannelWriter($this->threadToMainBuffer, $this->sleeperEntry->createNotifier())),
|
||||
new ExceptionTraceCleaner($this->mainPath)
|
||||
);
|
||||
$this->synchronized(function() : void{
|
||||
|
Reference in New Issue
Block a user