Overview

Namespaces

  • aliuly
    • common
      • selectors
    • loader
  • xPaw

Classes

  • aliuly\common\ArmorItems
  • aliuly\common\BasicCli
  • aliuly\common\BasicHelp
  • aliuly\common\BasicPlugin
  • aliuly\common\ChatSession
  • aliuly\common\Cmd
  • aliuly\common\CmdSelector
  • aliuly\common\ExpandVars
  • aliuly\common\FastTransfer
  • aliuly\common\FileUtils
  • aliuly\common\FreezeSession
  • aliuly\common\GetMotd
  • aliuly\common\GetMotdAsyncTask
  • aliuly\common\InvisibleSession
  • aliuly\common\InvUtils
  • aliuly\common\ItemName
  • aliuly\common\mc
  • aliuly\common\mc2
  • aliuly\common\MoneyAPI
  • aliuly\common\MPMU
  • aliuly\common\Npc
  • aliuly\common\PermUtils
  • aliuly\common\PluginAsyncTask
  • aliuly\common\PluginCallbackTask
  • aliuly\common\PMScript
  • aliuly\common\QueryAsyncTask
  • aliuly\common\Rcon
  • aliuly\common\RconTask
  • aliuly\common\selectors\All
  • aliuly\common\selectors\AllEntity
  • aliuly\common\selectors\BaseSelector
  • aliuly\common\selectors\Random
  • aliuly\common\Session
  • aliuly\common\ShieldSession
  • aliuly\common\ShoppingCart
  • aliuly\common\SignUtils
  • aliuly\common\SkinUtils
  • aliuly\common\SpySession
  • aliuly\common\SubCommandMap
  • aliuly\common\TPUtils
  • aliuly\loader\Main
  • xPaw\MinecraftQuery

Exceptions

  • xPaw\MinecraftQueryException
  • Overview
  • Namespace
  • Class
 1: <?php
 2: namespace aliuly\common;
 3: //use pocketmine\scheduler\AsyncTask;
 4: //use pocketmine\Server;
 5: //use pocketmine\command\ConsoleCommandSender;
 6: 
 7: /**
 8:  * This class implements a basic RCON client.
 9:  *
10:  * It is done in a non Object Oriented fashion to make it easy to
11:  * use with an AsyncTask.
12:  */
13: abstract class Rcon {
14:     const RCTYPE_COMMAND = 2;
15:     const RCTYPE_AUTH = 3;
16: 
17:     /**
18:      * Establishes a Rcon session.
19:      *
20:      * Returns an array with [$socket,$id].  In the event of an error
21:      * returns a string with the error message.
22:      *
23:      * @param str $host - hostname or ip of remote server
24:      * @param int $port - port to connect to
25:      * @param str $auth - secret key
26:      * @return str|array
27:      */
28:   static public function connect($host,$port,$auth) {
29:         if (!($sock = @fsockopen($host,$port, $errno, $errstr, 30))) {
30:             return "Unable to open socket: $errstr ($errno)";
31:         }
32:         stream_set_timeout($sock,3,0);
33:         $id = 0;
34: 
35:         $pktid = self::writePkt(self::RCTYPE_AUTH,$auth,$sock,$id);
36:         $ret = [self::readPkt($sock)];
37:     if (is_null($ret)) return "Protocol error";
38:         if ($ret[0] == -1) return "Authentication failure";
39: 
40:         return [$sock,$id];
41:     }
42: 
43:     /**
44:      * @param Rcon::RCTYPE_COMMAND|Rcon::RCTYPE_AUTH $type
45:      * @param str $payload
46:      * @param resource $sock
47:      * @param &int id
48:      * @return int
49:      */
50:   static public function writePkt($type,$payload,$sock,&$id) {
51:     $myid = ++$id;
52:         $data = pack("VVV",strlen($payload),$myid,$type).
53:                 ($payload === "" ? "\x00" : $payload)."\x00";
54:         fwrite($sock,$data);
55:         return $myid;
56:     }
57:     /**
58:      * @param resource $sock
59:      * @return array|null
60:      */
61:     static public function readPkt($sock) {
62:         $d = fread($sock, 4);
63:         if ($d === false || $d === ""  || strlen($d) < 4) return NULL;
64:         list($size) = array_values(unpack("V1",$d));
65:         if ($size < 0 or $size > 65535) return NULL;
66:         list($id) = array_values(unpack("V1", fread($sock, 4)));
67:         list($type) = array_values(unpack("V1", fread($sock, 4)));
68:         $payload = rtrim(fread($sock,$size-8));
69:         return [$id,$type,$payload];
70:     }
71:     /**
72:      * Sends a remote command
73:      *
74:      * Returns [$results,$type] or a string with the error message
75:      * @param str $cmd - command to execute
76:      * @param resource $sock - connection from connect
77:      * @param &int $id - id counter from connect
78:      * @return  array|str
79:      */
80:   static public function cmd($cmd,$sock,&$id) {
81:         $myid = self::writePkt(self::RCTYPE_COMMAND,$cmd,$sock,$id);
82:         $ret = self::readPkt($sock);
83:         if (is_null($ret)) return "Protocol error";
84:         list ($rid,$type,$payload) = $ret;
85:         if ($rid !== $myid) return "Sequencing error";
86:     return [$payload,$type];
87:     }
88: }
89: 
API documentation generated by ApiGen