Two packet event types ;)

This commit is contained in:
Shoghi Cervantes 2014-02-10 18:46:58 +01:00
parent a2ec9d6688
commit 0bf74d4139
6 changed files with 43 additions and 22 deletions

View File

@ -1253,6 +1253,11 @@ class Player{
if($this->connected === false){ if($this->connected === false){
return; return;
} }
if(EventHandler::callEvent(new DataPacketReceiveEvent($this, $packet)) === BaseEvent::DENY){
return;
}
switch($packet->pid()){ switch($packet->pid()){
case 0x01: case 0x01:
break; break;
@ -2315,7 +2320,7 @@ class Player{
$this->nextBuffer = microtime(true) + 0.1; $this->nextBuffer = microtime(true) + 0.1;
} }
public function directBigRawPacket(RakNetDataPacket $packet){ private function directBigRawPacket(RakNetDataPacket $packet){
if($this->connected === false){ if($this->connected === false){
return false; return false;
} }
@ -2355,6 +2360,11 @@ class Player{
if($this->connected === false){ if($this->connected === false){
return false; return false;
} }
if(EventHandler::callEvent(new DataPacketSendEvent($this, $packet)) === BaseEvent::DENY){
return array();
}
$packet->encode(); $packet->encode();
$pk = new RakNetPacket(RakNetInfo::DATA_PACKET_0); $pk = new RakNetPacket(RakNetInfo::DATA_PACKET_0);
$pk->data[] = $packet; $pk->data[] = $packet;
@ -2378,6 +2388,11 @@ class Player{
if($this->connected === false){ if($this->connected === false){
return false; return false;
} }
if(EventHandler::callEvent(new DataPacketSendEvent($this, $packet)) === BaseEvent::DENY){
return;
}
$packet->encode(); $packet->encode();
$len = strlen($packet->buffer) + 1; $len = strlen($packet->buffer) + 1;
$MTU = $this->MTU - 24; $MTU = $this->MTU - 24;

View File

@ -19,18 +19,22 @@
* *
*/ */
class RakNetPacketSendEvent extends ServerEvent implements CancellableEvent{ class DataPacketReceiveEvent extends ServerEvent implements CancellableEvent{
public static $handlers; public static $handlers;
public static $handlerPriority; public static $handlerPriority;
private $packet; private $packet;
private $player;
public function __construct(Player $player, RakNetDataPacket $packet){
public function __construct(RakNetPacket $packet){
$this->packet = $packet; $this->packet = $packet;
} }
public function getPacket(){ public function getPacket(){
return $this->packet; return $this->packet;
} }
public function getPlayer(){
return $this->player;
}
} }

View File

@ -19,18 +19,22 @@
* *
*/ */
class RakNetPacketReceiveEvent extends ServerEvent implements CancellableEvent{ class DataPacketSendEvent extends ServerEvent implements CancellableEvent{
public static $handlers; public static $handlers;
public static $handlerPriority; public static $handlerPriority;
private $packet; private $packet;
private $player;
public function __construct(Player $player, RakNetDataPacket $packet){
public function __construct(RakNetPacket $packet){
$this->packet = $packet; $this->packet = $packet;
} }
public function getPacket(){ public function getPacket(){
return $this->packet; return $this->packet;
} }
public function getPlayer(){
return $this->player;
}
} }

View File

@ -19,7 +19,7 @@
* *
*/ */
class UnknownPacketSendEvent extends ServerEvent implements CancellableEvent{ class PacketReceiveEvent extends ServerEvent implements CancellableEvent{
public static $handlers; public static $handlers;
public static $handlerPriority; public static $handlerPriority;

View File

@ -19,7 +19,7 @@
* *
*/ */
class UnknownPacketReceiveEvent extends ServerEvent implements CancellableEvent{ class PacketSendEvent extends ServerEvent implements CancellableEvent{
public static $handlers; public static $handlers;
public static $handlerPriority; public static $handlerPriority;

View File

@ -55,14 +55,16 @@ class MinecraftInterface{
private function parsePacket($buffer, $source, $port){ private function parsePacket($buffer, $source, $port){
$pid = ord($buffer{0}); $pid = ord($buffer{0});
if(RakNetInfo::isValid($pid)){ if(RakNetInfo::isValid($pid)){
$parser = new RakNetParser($buffer); $parser = new RakNetParser($buffer);
if($parser->packet !== false){ if($parser->packet !== false){
$parser->packet->ip = $source; $parser->packet->ip = $source;
$parser->packet->port = $port; $parser->packet->port = $port;
if(EventHandler::callEvent(new RakNetPacketReceiveEvent($parser->packet)) !== BaseEvent::DENY){ if(EventHandler::callEvent(new PacketReceiveEvent($parser->packet)) === BaseEvent::DENY){
return $parser->packet; return false;
} }
return $parser->packet;
} }
return false; return false;
}elseif($pid === 0xfe and $buffer{1} === "\xfd" and ServerAPI::request()->api->query instanceof QueryHandler){ }elseif($pid === 0xfe and $buffer{1} === "\xfd" and ServerAPI::request()->api->query instanceof QueryHandler){
@ -70,29 +72,25 @@ class MinecraftInterface{
$packet->ip = $source; $packet->ip = $source;
$packet->port = $port; $packet->port = $port;
$packet->buffer = $buffer; $packet->buffer = $buffer;
if(EventHandler::callEvent(new PacketReceiveEvent($packet)) === BaseEvent::DENY){
return false;
}
ServerAPI::request()->api->query->handle($packet); ServerAPI::request()->api->query->handle($packet);
}else{ }else{
$packet = new Packet(); $packet = new Packet();
$packet->ip = $source; $packet->ip = $source;
$packet->port = $port; $packet->port = $port;
$packet->buffer = $buffer; $packet->buffer = $buffer;
EventHandler::callEvent(new UnknownPacketReceiveEvent($packet)); EventHandler::callEvent(new PacketReceiveEvent($packet));
return false; return false;
} }
} }
public function writePacket(Packet $packet){ public function writePacket(Packet $packet){
if($packet instanceof RakNetPacket){ if(EventHandler::callEvent(new PacketSendEvent($packet)) === BaseEvent::DENY){
if(EventHandler::callEvent(new RakNetPacketSendEvent($packet)) === BaseEvent::DENY){ return 0;
return 0; }elseif($packet instanceof RakNetPacket){
}
$codec = new RakNetCodec($packet); $codec = new RakNetCodec($packet);
}elseif($packet instanceof QueryPacket){
}else{
if(EventHandler::callEvent(new UnknownPacketSendEvent($packet)) === BaseEvent::DENY){
return 0;
}
} }
$write = $this->socket->write($packet->buffer, $packet->ip, $packet->port); $write = $this->socket->write($packet->buffer, $packet->ip, $packet->port);
$this->bandwidth[1] += $write; $this->bandwidth[1] += $write;