mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-21 16:24:05 +00:00
Updated to latest bleeding-edge RakLib
This commit is contained in:
parent
abd1ed7352
commit
927872ce08
8
composer.lock
generated
8
composer.lock
generated
@ -529,12 +529,12 @@
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/pmmp/RakLib.git",
|
||||
"reference": "b049d56a3ef5c87e545882737f8e1a8e965fec1d"
|
||||
"reference": "45378244744328ceda76f95f2636a4f2d6e365c7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/pmmp/RakLib/zipball/b049d56a3ef5c87e545882737f8e1a8e965fec1d",
|
||||
"reference": "b049d56a3ef5c87e545882737f8e1a8e965fec1d",
|
||||
"url": "https://api.github.com/repos/pmmp/RakLib/zipball/45378244744328ceda76f95f2636a4f2d6e365c7",
|
||||
"reference": "45378244744328ceda76f95f2636a4f2d6e365c7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -563,7 +563,7 @@
|
||||
"GPL-3.0"
|
||||
],
|
||||
"description": "A RakNet server implementation written in PHP",
|
||||
"time": "2020-03-29T17:01:59+00:00"
|
||||
"time": "2020-03-29T22:42:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "pocketmine/snooze",
|
||||
|
@ -37,8 +37,9 @@ use raklib\protocol\PacketReliability;
|
||||
use raklib\RakLib;
|
||||
use raklib\server\InterThreadChannelReader;
|
||||
use raklib\server\InterThreadChannelWriter;
|
||||
use raklib\server\ServerHandler;
|
||||
use raklib\server\ServerInstance;
|
||||
use raklib\server\RakLibToUserThreadMessageReceiver;
|
||||
use raklib\server\ServerEventListener;
|
||||
use raklib\server\UserToRakLibThreadMessageSender;
|
||||
use raklib\utils\InternetAddress;
|
||||
use function addcslashes;
|
||||
use function bin2hex;
|
||||
@ -50,7 +51,7 @@ use function substr;
|
||||
use function unserialize;
|
||||
use const PTHREADS_INHERIT_CONSTANTS;
|
||||
|
||||
class RakLibInterface implements ServerInstance, AdvancedNetworkInterface{
|
||||
class RakLibInterface implements ServerEventListener, AdvancedNetworkInterface{
|
||||
/**
|
||||
* Sometimes this gets changed when the MCPE-layer protocol gets broken to the point where old and new can't
|
||||
* communicate. It's important that we check this to avoid catastrophes.
|
||||
@ -74,7 +75,9 @@ class RakLibInterface implements ServerInstance, AdvancedNetworkInterface{
|
||||
/** @var NetworkSession[] */
|
||||
private $sessions = [];
|
||||
|
||||
/** @var ServerHandler */
|
||||
/** @var RakLibToUserThreadMessageReceiver */
|
||||
private $eventReceiver;
|
||||
/** @var UserToRakLibThreadMessageSender */
|
||||
private $interface;
|
||||
|
||||
/** @var SleeperNotifier */
|
||||
@ -99,16 +102,18 @@ class RakLibInterface implements ServerInstance, AdvancedNetworkInterface{
|
||||
self::MCPE_RAKNET_PROTOCOL_VERSION,
|
||||
$this->sleeper
|
||||
);
|
||||
$this->interface = new ServerHandler(
|
||||
$this->eventReceiver = new RakLibToUserThreadMessageReceiver(
|
||||
$this,
|
||||
new InterThreadChannelReader($threadToMainBuffer),
|
||||
new InterThreadChannelReader($threadToMainBuffer)
|
||||
);
|
||||
$this->interface = new UserToRakLibThreadMessageSender(
|
||||
new InterThreadChannelWriter($mainToThreadBuffer)
|
||||
);
|
||||
}
|
||||
|
||||
public function start() : void{
|
||||
$this->server->getTickSleeper()->addNotifier($this->sleeper, function() : void{
|
||||
while($this->interface->handlePacket());
|
||||
while($this->eventReceiver->handle());
|
||||
});
|
||||
$this->server->getLogger()->debug("Waiting for RakLib to start...");
|
||||
$this->rakLib->startAndWait(PTHREADS_INHERIT_CONSTANTS); //HACK: MainLogger needs constants for exception logging
|
||||
@ -137,10 +142,10 @@ class RakLibInterface implements ServerInstance, AdvancedNetworkInterface{
|
||||
}
|
||||
}
|
||||
|
||||
public function close(int $sessionId, string $reason = "unknown reason") : void{
|
||||
public function close(int $sessionId) : void{
|
||||
if(isset($this->sessions[$sessionId])){
|
||||
unset($this->sessions[$sessionId]);
|
||||
$this->interface->closeSession($sessionId, $reason);
|
||||
$this->interface->closeSession($sessionId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -210,7 +215,7 @@ class RakLibInterface implements ServerInstance, AdvancedNetworkInterface{
|
||||
public function setName(string $name) : void{
|
||||
$info = $this->server->getQueryInformation();
|
||||
|
||||
$this->interface->sendOption("name", implode(";",
|
||||
$this->interface->setOption("name", implode(";",
|
||||
[
|
||||
"MCPE",
|
||||
rtrim(addcslashes($name, ";"), '\\'),
|
||||
@ -226,7 +231,7 @@ class RakLibInterface implements ServerInstance, AdvancedNetworkInterface{
|
||||
}
|
||||
|
||||
public function setPortCheck(bool $name) : void{
|
||||
$this->interface->sendOption("portChecking", $name);
|
||||
$this->interface->setOption("portChecking", $name);
|
||||
}
|
||||
|
||||
public function handleOption(string $option, string $value) : void{
|
||||
|
@ -49,7 +49,7 @@ class RakLibPacketSender implements PacketSender{
|
||||
public function close(string $reason = "unknown reason") : void{
|
||||
if(!$this->closed){
|
||||
$this->closed = true;
|
||||
$this->handler->close($this->sessionId, $reason);
|
||||
$this->handler->close($this->sessionId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -29,7 +29,9 @@ use raklib\generic\Socket;
|
||||
use raklib\RakLib;
|
||||
use raklib\server\InterThreadChannelReader;
|
||||
use raklib\server\InterThreadChannelWriter;
|
||||
use raklib\server\RakLibToUserThreadMessageSender;
|
||||
use raklib\server\SessionManager;
|
||||
use raklib\server\UserToRakLibThreadMessageReceiver;
|
||||
use raklib\utils\ExceptionTraceCleaner;
|
||||
use raklib\utils\InternetAddress;
|
||||
use function error_get_last;
|
||||
@ -159,8 +161,8 @@ class RakLibServer extends Thread{
|
||||
$socket,
|
||||
$this->maxMtuSize,
|
||||
$this->protocolVersion,
|
||||
new InterThreadChannelReader($this->mainToThreadBuffer),
|
||||
new InterThreadChannelWriter($this->threadToMainBuffer, $this->mainThreadNotifier),
|
||||
new UserToRakLibThreadMessageReceiver(new InterThreadChannelReader($this->mainToThreadBuffer)),
|
||||
new RakLibToUserThreadMessageSender(new InterThreadChannelWriter($this->threadToMainBuffer, $this->mainThreadNotifier)),
|
||||
new ExceptionTraceCleaner($this->mainPath)
|
||||
);
|
||||
$this->synchronized(function() : void{
|
||||
|
Loading…
x
Reference in New Issue
Block a user