예제 #1
0
 public function __construct(Server $server, $type, $playerList = [])
 {
     $endpoint = "http://" . $server->getProperty("anonymous-statistics.host", "stats.BukkitPE.net") . "/";
     $data = [];
     $data["uniqueServerId"] = $server->getServerUniqueId()->toString();
     $data["uniqueMachineId"] = Utils::getMachineUniqueId()->toString();
     $data["uniqueRequestId"] = UUID::fromData($server->getServerUniqueId(), microtime(true))->toString();
     switch ($type) {
         case self::TYPE_OPEN:
             $data["event"] = "open";
             $version = new VersionString();
             $data["server"] = ["port" => $server->getPort(), "software" => $server->getName(), "fullVersion" => $version->get(true), "version" => $version->get(), "build" => $version->getBuild(), "api" => $server->getApiVersion(), "minecraftVersion" => $server->getVersion(), "protocol" => Info::CURRENT_PROTOCOL];
             $data["system"] = ["operatingSystem" => Utils::getOS(), "cores" => Utils::getCoreCount(), "phpVersion" => PHP_VERSION, "machine" => php_uname("a"), "release" => php_uname("r"), "platform" => php_uname("i")];
             $data["players"] = ["count" => 0, "limit" => $server->getMaxPlayers()];
             $plugins = [];
             foreach ($server->getPluginManager()->getPlugins() as $p) {
                 $d = $p->getDescription();
                 $plugins[$d->getName()] = ["name" => $d->getName(), "version" => $d->getVersion(), "enabled" => $p->isEnabled()];
             }
             $data["plugins"] = $plugins;
             break;
         case self::TYPE_STATUS:
             $data["event"] = "status";
             $data["server"] = ["ticksPerSecond" => $server->getTicksPerSecondAverage(), "tickUsage" => $server->getTickUsageAverage(), "ticks" => $server->getTick()];
             //This anonymizes the user ids so they cannot be reversed to the original
             foreach ($playerList as $k => $v) {
                 $playerList[$k] = md5($v);
             }
             $players = [];
             foreach ($server->getOnlinePlayers() as $p) {
                 if ($p->isOnline()) {
                     $players[] = md5($p->getUniqueId()->toBinary());
                 }
             }
             $data["players"] = ["count" => count($players), "limit" => $server->getMaxPlayers(), "currentList" => $players, "historyList" => array_values($playerList)];
             $info = Utils::getMemoryUsage(true);
             $data["system"] = ["mainMemory" => $info[0], "totalMemory" => $info[1], "availableMemory" => $info[2], "threadCount" => Utils::getThreadCount()];
             break;
         case self::TYPE_CLOSE:
             $data["event"] = "close";
             $data["crashing"] = $server->isRunning();
             break;
     }
     $this->endpoint = $endpoint . "api/post";
     $this->data = json_encode($data);
 }
예제 #2
0
 public static function RemovePortForward($port)
 {
     if (Utils::$online === false) {
         return false;
     }
     if (Utils::getOS() != "win" or !class_exists("COM")) {
         return false;
     }
     $port = (int) $port;
     try {
         $com = new \COM("HNetCfg.NATUPnP") or false;
         if ($com === false or !is_object($com->StaticPortMappingCollection)) {
             return false;
         }
         $com->StaticPortMappingCollection->Remove($port, "UDP");
     } catch (\Exception $e) {
         return false;
     }
     return true;
 }
예제 #3
0
 public static function getCoreCount($recalculate = false)
 {
     static $processors = 0;
     if ($processors > 0 and !$recalculate) {
         return $processors;
     } else {
         $processors = 0;
     }
     switch (Utils::getOS()) {
         case "linux":
         case "android":
             if (file_exists("/proc/cpuinfo")) {
                 foreach (file("/proc/cpuinfo") as $l) {
                     if (preg_match('/^processor[ \\t]*:[ \\t]*[0-9]+$/m', $l) > 0) {
                         ++$processors;
                     }
                 }
             } else {
                 if (preg_match("/^([0-9]+)\\-([0-9]+)\$/", trim(@file_get_contents("/sys/devices/system/cpu/present")), $matches) > 0) {
                     $processors = (int) ($matches[2] - $matches[1]);
                 }
             }
             break;
         case "bsd":
         case "mac":
             $processors = (int) `sysctl -n hw.ncpu`;
             $processors = (int) `sysctl -n hw.ncpu`;
             break;
         case "win":
             $processors = (int) getenv("NUMBER_OF_PROCESSORS");
             break;
     }
     return $processors;
 }
예제 #4
0
 function kill($pid)
 {
     switch (Utils::getOS()) {
         case "win":
             exec("taskkill.exe /F /PID " . (int) $pid . " > NUL");
             break;
         case "mac":
         case "linux":
         default:
             exec("kill -9 " . (int) $pid . " > /dev/null 2>&1");
     }
 }
예제 #5
0
 private function generalData()
 {
     $version = new VersionString();
     $this->data["general"] = [];
     $this->data["general"]["version"] = $version->get(false);
     $this->data["general"]["build"] = $version->getBuild();
     $this->data["general"]["protocol"] = Info::CURRENT_PROTOCOL;
     $this->data["general"]["api"] = \BukkitPE\API_VERSION;
     $this->data["general"]["git"] = \BukkitPE\GIT_COMMIT;
     $this->data["general"]["raklib"] = RakLib::VERSION;
     $this->data["general"]["uname"] = php_uname("a");
     $this->data["general"]["php"] = phpversion();
     $this->data["general"]["zend"] = zend_version();
     $this->data["general"]["php_os"] = PHP_OS;
     $this->data["general"]["os"] = Utils::getOS();
     $this->addLine("BukkitPE-MP version: " . $version->get(false) . " #" . $version->getBuild() . " [Protocol " . Info::CURRENT_PROTOCOL . "; API " . API_VERSION . "]");
     $this->addLine("Git commit: " . GIT_COMMIT);
     $this->addLine("uname -a: " . php_uname("a"));
     $this->addLine("PHP Version: " . phpversion());
     $this->addLine("Zend version: " . zend_version());
     $this->addLine("OS : " . PHP_OS . ", " . Utils::getOS());
 }