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

View File

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

View File

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