mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-08 10:53:05 +00:00
Added - NetworkInterfaceRegisterEvent (cancellable) - NetworkInterfaceUnregisterEvent - NetworkInterfaceCrashEvent
This commit is contained in:
@ -26,6 +26,9 @@ declare(strict_types=1);
|
||||
*/
|
||||
namespace pocketmine\network;
|
||||
|
||||
use pocketmine\event\server\NetworkInterfaceCrashEvent;
|
||||
use pocketmine\event\server\NetworkInterfaceRegisterEvent;
|
||||
use pocketmine\event\server\NetworkInterfaceUnregisterEvent;
|
||||
use pocketmine\network\mcpe\protocol\PacketPool;
|
||||
use pocketmine\Server;
|
||||
|
||||
@ -90,6 +93,8 @@ class Network{
|
||||
$logger->logException($e);
|
||||
}
|
||||
|
||||
$this->server->getPluginManager()->callEvent(new NetworkInterfaceCrashEvent($interface, $e));
|
||||
|
||||
$interface->emergencyShutdown();
|
||||
$this->unregisterInterface($interface);
|
||||
$logger->critical($this->server->getLanguage()->translateString("pocketmine.server.networkError", [get_class($interface), $e->getMessage()]));
|
||||
@ -101,20 +106,24 @@ class Network{
|
||||
* @param SourceInterface $interface
|
||||
*/
|
||||
public function registerInterface(SourceInterface $interface){
|
||||
$this->interfaces[$hash = spl_object_hash($interface)] = $interface;
|
||||
if($interface instanceof AdvancedSourceInterface){
|
||||
$this->advancedInterfaces[$hash] = $interface;
|
||||
$interface->setNetwork($this);
|
||||
$this->server->getPluginManager()->callEvent($ev = new NetworkInterfaceRegisterEvent($interface));
|
||||
if(!$ev->isCancelled()){
|
||||
$interface->start();
|
||||
$this->interfaces[$hash = spl_object_hash($interface)] = $interface;
|
||||
if($interface instanceof AdvancedSourceInterface){
|
||||
$this->advancedInterfaces[$hash] = $interface;
|
||||
$interface->setNetwork($this);
|
||||
}
|
||||
$interface->setName($this->name);
|
||||
}
|
||||
$interface->setName($this->name);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param SourceInterface $interface
|
||||
*/
|
||||
public function unregisterInterface(SourceInterface $interface){
|
||||
unset($this->interfaces[$hash = spl_object_hash($interface)],
|
||||
$this->advancedInterfaces[$hash]);
|
||||
$this->server->getPluginManager()->callEvent(new NetworkInterfaceUnregisterEvent($interface));
|
||||
unset($this->interfaces[$hash = spl_object_hash($interface)], $this->advancedInterfaces[$hash]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user