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

Public Member Functions

 __construct (Server $server)
 
 setNetwork (Network $network)
 
 process ()
 
 closeSession ($identifier, $reason)
 
 close (Player $player, $reason="unknown reason")
 
 shutdown ()
 
 emergencyShutdown ()
 
 openSession ($identifier, $address, $port, $clientID)
 
 handleEncapsulated ($identifier, EncapsulatedPacket $packet, $flags)
 
 blockAddress ($address, $timeout=300)
 
 unblockAddress ($address)
 
 handleRaw ($address, $port, $payload)
 
 sendRawPacket ($address, $port, $payload)
 
 notifyACK ($identifier, $identifierACK)
 
 setName ($name)
 
 setPortCheck ($name)
 
 handleOption ($name, $value)
 
 putPacket (Player $player, DataPacket $packet, $needACK=false, $immediate=false)
 

Constructor & Destructor Documentation

◆ __construct()

__construct ( Server  $server)

RakLibInterface constructor.

Parameters
Server$server
67  {
68 
69  $this->server = $server;
70  $this->identifiers = [];
71 
72  $this->rakLib = new RakLibServer($this->server->getLogger(), $this->server->getLoader(), $this->server->getPort(), $this->server->getIp() === "" ? "0.0.0.0" : $this->server->getIp());
73  $this->interface = new ServerHandler($this->rakLib, $this);
74  }

Member Function Documentation

◆ blockAddress()

blockAddress (   $address,
  $timeout = 300 
)
Parameters
string$address
int$timeout

Implements AdvancedSourceInterface.

190  {
191  $this->interface->blockAddress($address, $timeout);
192  }

◆ close()

close ( Player  $player,
  $reason = "unknown reason" 
)
Parameters
Player$player
string$reason

Implements SourceInterface.

125  {
126  if(isset($this->identifiers[$h = spl_object_hash($player)])){
127  unset($this->players[$this->identifiers[$h]]);
128  unset($this->identifiersACK[$this->identifiers[$h]]);
129  $this->interface->closeSession($this->identifiers[$h], $reason);
130  unset($this->identifiers[$h]);
131  }
132  }

◆ closeSession()

closeSession (   $identifier,
  $reason 
)
Parameters
string$identifier
string$reason

Implements ServerInstance.

111  {
112  if(isset($this->players[$identifier])){
113  $player = $this->players[$identifier];
114  unset($this->identifiers[spl_object_hash($player)]);
115  unset($this->players[$identifier]);
116  unset($this->identifiersACK[$identifier]);
117  $player->close($player->getLeaveMessage(), $reason);
118  }
119  }

◆ emergencyShutdown()

emergencyShutdown ( )

Implements SourceInterface.

138  {
139  $this->interface->emergencyShutdown();
140  }

◆ handleEncapsulated()

handleEncapsulated (   $identifier,
EncapsulatedPacket  $packet,
  $flags 
)
Parameters
string$identifier
EncapsulatedPacket$packet
int$flags

Implements ServerInstance.

165  {
166  if(isset($this->players[$identifier])){
167  try{
168  if($packet->buffer !== ""){
169  $pk = $this->getPacket($packet->buffer);
170  if($pk !== null){
171  $pk->decode();
172  assert($pk->feof(), "Still " . strlen(substr($pk->buffer, $pk->offset)) . " bytes unread!");
173  $this->players[$identifier]->handleDataPacket($pk);
174  }
175  }
176  }catch(\Throwable $e){
177  $logger = $this->server->getLogger();
178  if(\pocketmine\DEBUG > 1 and isset($pk)){
179  $logger->debug("Exception in packet " . get_class($pk) . " 0x" . bin2hex($packet->buffer));
180  }
181  $logger->logException($e);
182  }
183  }
184  }

◆ handleOption()

handleOption (   $name,
  $value 
)
Parameters
string$name
string$value

Implements ServerInstance.

265  {
266  if($name === "bandwidth"){
267  $v = unserialize($value);
268  $this->network->addStatistics($v["up"], $v["down"]);
269  }
270  }

◆ handleRaw()

handleRaw (   $address,
  $port,
  $payload 
)
Parameters
string$address
int$port
string$payload

Implements ServerInstance.

206  {
207  $this->server->handlePacket($address, $port, $payload);
208  }

◆ notifyACK()

notifyACK (   $identifier,
  $identifierACK 
)
Parameters
string$identifier
int$identifierACK

Implements ServerInstance.

223  {
224 
225  }

◆ openSession()

openSession (   $identifier,
  $address,
  $port,
  $clientID 
)
Parameters
string$identifier
string$address
int$port
int | string$clientID

Implements ServerInstance.

148  {
149  $ev = new PlayerCreationEvent($this, Player::class, Player::class, null, $address, $port);
150  $this->server->getPluginManager()->callEvent($ev);
151  $class = $ev->getPlayerClass();
152 
153  $player = new $class($this, $ev->getClientId(), $ev->getAddress(), $ev->getPort());
154  $this->players[$identifier] = $player;
155  $this->identifiersACK[$identifier] = 0;
156  $this->identifiers[spl_object_hash($player)] = $identifier;
157  $this->server->addPlayer($identifier, $player);
158  }

◆ process()

process ( )
Returns
bool
Exceptions

Implements SourceInterface.

87  {
88  $work = false;
89  if($this->interface->handlePacket()){
90  $work = true;
91  $lasttime = time();
92  while($this->interface->handlePacket()){
93  $diff = time() - $lasttime;
94  if($diff >= 1) break;
95  }
96  }
97 
98  if(!$this->rakLib->isRunning() and !$this->rakLib->isShutdown()){
99  $this->network->unregisterInterface($this);
100 
101  throw new \Exception("RakLib Thread crashed");
102  }
103 
104  return $work;
105  }

◆ putPacket()

putPacket ( Player  $player,
DataPacket  $packet,
  $needACK = false,
  $immediate = false 
)
Parameters
Player$player
DataPacket$packet
bool$needACK
bool$immediate
Returns
int|null

Implements SourceInterface.

280  {
281  if(isset($this->identifiers[$h = spl_object_hash($player)])){
282  $identifier = $this->identifiers[$h];
283  if(!$packet->isEncoded){
284  $packet->encode();
285  $packet->isEncoded = true;
286  }
287 
288  if($packet instanceof BatchPacket){
289  if($needACK){
290  $pk = new EncapsulatedPacket();
291  $pk->buffer = $packet->buffer;
292  $pk->reliability = PacketReliability::RELIABLE_ORDERED;
293  $pk->orderChannel = 0;
294 
295  if($needACK === true){
296  $pk->identifierACK = $this->identifiersACK[$identifier]++;
297  }
298  }else{
299  if(!isset($packet->__encapsulatedPacket)){
300  $packet->__encapsulatedPacket = new CachedEncapsulatedPacket;
301  $packet->__encapsulatedPacket->identifierACK = null;
302  $packet->__encapsulatedPacket->buffer = $packet->buffer; // #blameshoghi
303  $packet->__encapsulatedPacket->reliability = PacketReliability::RELIABLE_ORDERED;
304  $packet->__encapsulatedPacket->orderChannel = 0;
305  }
306  $pk = $packet->__encapsulatedPacket;
307  }
308 
309  $this->interface->sendEncapsulated($identifier, $pk, ($needACK === true ? RakLib::FLAG_NEED_ACK : 0) | ($immediate === true ? RakLib::PRIORITY_IMMEDIATE : RakLib::PRIORITY_NORMAL));
310  return $pk->identifierACK;
311  }else{
312  $this->server->batchPackets([$player], [$packet], true);
313  return null;
314  }
315  }
316 
317  return null;
318  }

◆ sendRawPacket()

sendRawPacket (   $address,
  $port,
  $payload 
)
Parameters
string$address
int$port
string$payload

Implements AdvancedSourceInterface.

215  {
216  $this->interface->sendRaw($address, $port, $payload);
217  }

◆ setName()

setName (   $name)
Parameters
string$name

Implements SourceInterface.

230  {
231 
232  if($this->server->isDServerEnabled()){
233  if($this->server->dserverConfig["motdMaxPlayers"] > 0) $pc = $this->server->dserverConfig["motdMaxPlayers"];
234  elseif($this->server->dserverConfig["motdAllPlayers"]) $pc = $this->server->getDServerMaxPlayers();
235  else $pc = $this->server->getMaxPlayers();
236 
237  if($this->server->dserverConfig["motdPlayers"]) $poc = $this->server->getDServerOnlinePlayers();
238  else $poc = count($this->server->getOnlinePlayers());
239  }else{
240  $info = $this->server->getQueryInformation();
241  $pc = $info->getMaxPlayerCount();
242  $poc = $info->getPlayerCount();
243  }
244 
245  $this->interface->sendOption("name",
246  "MCPE;" . rtrim(addcslashes($name, ";"), '\\') . ";" .
249  $poc . ";" .
250  $pc
251  );
252  }

◆ setNetwork()

setNetwork ( Network  $network)
Parameters
Network$network

Implements AdvancedSourceInterface.

79  {
80  $this->network = $network;
81  }

◆ setPortCheck()

setPortCheck (   $name)
Parameters
$name
257  {
258  $this->interface->sendOption("portChecking", (bool) $name);
259  }

◆ shutdown()

shutdown ( )

Implements SourceInterface.

134  {
135  $this->interface->shutdown();
136  }

◆ unblockAddress()

unblockAddress (   $address)
Parameters
$address
197  {
198  $this->interface->unblockAddress($address);
199  }

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