GenisysPro  for Minecraft PE/Windows 10 v1.1.x
Feature-rich server software for Minecraft PE and Windows 10 Edition
ServerHandler Class Reference

Public Member Functions

 __construct (RakLibServer $server, ServerInstance $instance)
 
 sendEncapsulated ($identifier, EncapsulatedPacket $packet, $flags=RakLib::PRIORITY_NORMAL)
 
 sendRaw ($address, $port, $payload)
 
 closeSession ($identifier, $reason)
 
 sendOption ($name, $value)
 
 blockAddress ($address, $timeout)
 
 unblockAddress ($address)
 
 shutdown ()
 
 emergencyShutdown ()
 
 handlePacket ()
 

Protected Member Functions

 invalidSession ($identifier)
 

Protected Attributes

 $server
 
 $instance
 

Constructor & Destructor Documentation

◆ __construct()

__construct ( RakLibServer  $server,
ServerInstance  $instance 
)
29  {
30  $this->server = $server;
31  $this->instance = $instance;
32  }

Member Function Documentation

◆ blockAddress()

blockAddress (   $address,
  $timeout 
)
54  {
55  $buffer = chr(RakLib::PACKET_BLOCK_ADDRESS) . chr(strlen($address)) . $address . Binary::writeInt($timeout);
56  $this->server->pushMainToThreadPacket($buffer);
57  }

◆ closeSession()

closeSession (   $identifier,
  $reason 
)
44  {
45  $buffer = chr(RakLib::PACKET_CLOSE_SESSION) . chr(strlen($identifier)) . $identifier . chr(strlen($reason)) . $reason;
46  $this->server->pushMainToThreadPacket($buffer);
47  }

◆ emergencyShutdown()

emergencyShutdown ( )
76  {
77  $this->server->shutdown();
78  $this->server->pushMainToThreadPacket("\x7f"); //RakLib::PACKET_EMERGENCY_SHUTDOWN
79  }

◆ handlePacket()

handlePacket ( )
Returns
bool
89  {
90  if(strlen($packet = $this->server->readThreadToMainPacket()) > 0){
91  $id = ord($packet{0});
92  $offset = 1;
93  if($id === RakLib::PACKET_ENCAPSULATED){
94  $len = ord($packet{$offset++});
95  $identifier = substr($packet, $offset, $len);
96  $offset += $len;
97  $flags = ord($packet{$offset++});
98  $buffer = substr($packet, $offset);
99  $this->instance->handleEncapsulated($identifier, EncapsulatedPacket::fromBinary($buffer, true), $flags);
100  }elseif($id === RakLib::PACKET_RAW){
101  $len = ord($packet{$offset++});
102  $address = substr($packet, $offset, $len);
103  $offset += $len;
104  $port = Binary::readShort(substr($packet, $offset, 2));
105  $offset += 2;
106  $payload = substr($packet, $offset);
107  $this->instance->handleRaw($address, $port, $payload);
108  }elseif($id === RakLib::PACKET_SET_OPTION){
109  $len = ord($packet{$offset++});
110  $name = substr($packet, $offset, $len);
111  $offset += $len;
112  $value = substr($packet, $offset);
113  $this->instance->handleOption($name, $value);
114  }elseif($id === RakLib::PACKET_OPEN_SESSION){
115  $len = ord($packet{$offset++});
116  $identifier = substr($packet, $offset, $len);
117  $offset += $len;
118  $len = ord($packet{$offset++});
119  $address = substr($packet, $offset, $len);
120  $offset += $len;
121  $port = Binary::readShort(substr($packet, $offset, 2));
122  $offset += 2;
123  $clientID = Binary::readLong(substr($packet, $offset, 8));
124  $this->instance->openSession($identifier, $address, $port, $clientID);
125  }elseif($id === RakLib::PACKET_CLOSE_SESSION){
126  $len = ord($packet{$offset++});
127  $identifier = substr($packet, $offset, $len);
128  $offset += $len;
129  $len = ord($packet{$offset++});
130  $reason = substr($packet, $offset, $len);
131  $this->instance->closeSession($identifier, $reason);
132  }elseif($id === RakLib::PACKET_INVALID_SESSION){
133  $len = ord($packet{$offset++});
134  $identifier = substr($packet, $offset, $len);
135  $this->instance->closeSession($identifier, "Invalid session");
136  }elseif($id === RakLib::PACKET_ACK_NOTIFICATION){
137  $len = ord($packet{$offset++});
138  $identifier = substr($packet, $offset, $len);
139  $offset += $len;
140  $identifierACK = Binary::readInt(substr($packet, $offset, 4));
141  $this->instance->notifyACK($identifier, $identifierACK);
142  }
143 
144  return true;
145  }
146 
147  return false;
148  }

◆ invalidSession()

invalidSession (   $identifier)
protected
81  {
82  $buffer = chr(RakLib::PACKET_INVALID_SESSION) . chr(strlen($identifier)) . $identifier;
83  $this->server->pushMainToThreadPacket($buffer);
84  }

◆ sendEncapsulated()

sendEncapsulated (   $identifier,
EncapsulatedPacket  $packet,
  $flags = RakLib::PRIORITY_NORMAL 
)
34  {
35  $buffer = chr(RakLib::PACKET_ENCAPSULATED) . chr(strlen($identifier)) . $identifier . chr($flags) . $packet->toBinary(true);
36  $this->server->pushMainToThreadPacket($buffer);
37  }

◆ sendOption()

sendOption (   $name,
  $value 
)
49  {
50  $buffer = chr(RakLib::PACKET_SET_OPTION) . chr(strlen($name)) . $name . $value;
51  $this->server->pushMainToThreadPacket($buffer);
52  }

◆ sendRaw()

sendRaw (   $address,
  $port,
  $payload 
)
39  {
40  $buffer = chr(RakLib::PACKET_RAW) . chr(strlen($address)) . $address . Binary::writeShort($port) . $payload;
41  $this->server->pushMainToThreadPacket($buffer);
42  }

◆ shutdown()

shutdown ( )
64  {
65  $buffer = chr(RakLib::PACKET_SHUTDOWN);
66  $this->server->pushMainToThreadPacket($buffer);
67  $this->server->shutdown();
68  $this->server->synchronized(function(){
69  if($this->server !== null){
70  $this->server->wait(20000);
71  }
72  });
73  $this->server->join();
74  }

◆ unblockAddress()

unblockAddress (   $address)
59  {
60  $buffer = chr(RakLib::PACKET_UNBLOCK_ADDRESS) . chr(strlen($address)) . $address;
61  $this->server->pushMainToThreadPacket($buffer);
62  }

Field Documentation

◆ $instance

$instance
protected

◆ $server

$server
protected

The documentation for this class was generated from the following file: