diff --git a/pgserver/composer.lock b/pgserver/composer.lock index 07deb62..c86f171 100644 --- a/pgserver/composer.lock +++ b/pgserver/composer.lock @@ -768,7 +768,13 @@ "type": "zip", "url": "https://api.github.com/repos/lpilp/phpsm2sm3sm4/zipball/ab43326e369ff1189db34c2984c5eadb5bf5f2f5", "reference": "ab43326e369ff1189db34c2984c5eadb5bf5f2f5", - "shasum": "" + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] }, "require": { "mdanter/ecc": "^1.0", @@ -1685,16 +1691,16 @@ }, { "name": "setasign/fpdi", - "version": "v2.6.3", + "version": "v2.6.4", "source": { "type": "git", "url": "https://github.com/Setasign/FPDI.git", - "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941" + "reference": "4b53852fde2734ec6a07e458a085db627c60eada" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Setasign/FPDI/zipball/67c31f5e50c93c20579ca9e23035d8c540b51941", - "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/4b53852fde2734ec6a07e458a085db627c60eada", + "reference": "4b53852fde2734ec6a07e458a085db627c60eada", "shasum": "", "mirrors": [ { @@ -1715,7 +1721,7 @@ "setasign/fpdf": "~1.8.6", "setasign/tfpdf": "~1.33", "squizlabs/php_codesniffer": "^3.5", - "tecnickcom/tcpdf": "^6.2" + "tecnickcom/tcpdf": "^6.8" }, "suggest": { "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured." @@ -1751,7 +1757,7 @@ ], "support": { "issues": "https://github.com/Setasign/FPDI/issues", - "source": "https://github.com/Setasign/FPDI/tree/v2.6.3" + "source": "https://github.com/Setasign/FPDI/tree/v2.6.4" }, "funding": [ { @@ -1759,7 +1765,7 @@ "type": "tidelift" } ], - "time": "2025-02-05T13:22:35+00:00" + "time": "2025-08-05T09:57:14+00:00" }, { "name": "symfony/deprecation-contracts", diff --git a/pgserver/vendor/composer/autoload_psr4.php b/pgserver/vendor/composer/autoload_psr4.php index 003f881..fecb7c9 100644 --- a/pgserver/vendor/composer/autoload_psr4.php +++ b/pgserver/vendor/composer/autoload_psr4.php @@ -11,7 +11,7 @@ return array( 'think\\' => array($vendorDir . '/topthink/think-image/src'), 'setasign\\Fpdi\\' => array($vendorDir . '/setasign/fpdi/src'), 'app\\' => array($baseDir . '/application'), - 'Workerman\\' => array($vendorDir . '/workerman/workerman-for-win', $vendorDir . '/workerman/workerman'), + 'Workerman\\' => array($vendorDir . '/workerman/workerman'), 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), 'Rtgm\\' => array($vendorDir . '/lpilp/guomi/src'), 'Qcloud\\Cos\\' => array($vendorDir . '/qcloud/cos-sdk-v5/src'), diff --git a/pgserver/vendor/composer/autoload_static.php b/pgserver/vendor/composer/autoload_static.php index 66a041c..c5f3f0d 100644 --- a/pgserver/vendor/composer/autoload_static.php +++ b/pgserver/vendor/composer/autoload_static.php @@ -112,8 +112,7 @@ class ComposerStaticInit1cd3a6c39d937ae09b33e766d7314544 ), 'Workerman\\' => array ( - 0 => __DIR__ . '/..' . '/workerman/workerman-for-win', - 1 => __DIR__ . '/..' . '/workerman/workerman', + 0 => __DIR__ . '/..' . '/workerman/workerman', ), 'Symfony\\Polyfill\\Php80\\' => array ( diff --git a/pgserver/vendor/composer/platform_check.php b/pgserver/vendor/composer/platform_check.php index d2225c7..d826bd1 100644 --- a/pgserver/vendor/composer/platform_check.php +++ b/pgserver/vendor/composer/platform_check.php @@ -4,8 +4,8 @@ $issues = array(); -if (!(PHP_VERSION_ID >= 70400)) { - $issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.'; +if (!(PHP_VERSION_ID >= 70300)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 7.3.0". You are running ' . PHP_VERSION . '.'; } if ($issues) { diff --git a/pgserver/vendor/composer/tmp-3580a738ad0e2cdd3986095d2f4bddbd.zip~ b/pgserver/vendor/composer/tmp-3580a738ad0e2cdd3986095d2f4bddbd.zip~ new file mode 100644 index 0000000..fb66fce Binary files /dev/null and b/pgserver/vendor/composer/tmp-3580a738ad0e2cdd3986095d2f4bddbd.zip~ differ diff --git a/pgserver/vendor/composer/tmp-8a12e856336217593da5768825967651.zip~ b/pgserver/vendor/composer/tmp-8a12e856336217593da5768825967651.zip~ index b738cff..e69de29 100644 Binary files a/pgserver/vendor/composer/tmp-8a12e856336217593da5768825967651.zip~ and b/pgserver/vendor/composer/tmp-8a12e856336217593da5768825967651.zip~ differ diff --git a/pgserver/vendor/composer/tmp-ad88fc0cde15c599fcd6d8125774cef2.zip~ b/pgserver/vendor/composer/tmp-ad88fc0cde15c599fcd6d8125774cef2.zip~ index 35f8132..e69de29 100644 Binary files a/pgserver/vendor/composer/tmp-ad88fc0cde15c599fcd6d8125774cef2.zip~ and b/pgserver/vendor/composer/tmp-ad88fc0cde15c599fcd6d8125774cef2.zip~ differ diff --git a/pgserver/vendor/workerman/workerman-for-win/.gitignore b/pgserver/vendor/workerman/workerman-for-win/.gitignore deleted file mode 100644 index 5d71c07..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.project -.buildpath -.settings/org.eclipse.php.core.prefs \ No newline at end of file diff --git a/pgserver/vendor/workerman/workerman-for-win/Autoloader.php b/pgserver/vendor/workerman/workerman-for-win/Autoloader.php deleted file mode 100644 index a9d2064..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Autoloader.php +++ /dev/null @@ -1,80 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman; - -// 包含常量定义文件 -require_once __DIR__.'/Lib/Constants.php'; - -/** - * 自动加载类 - * @author walkor - */ -class Autoloader -{ - // 应用的初始化目录,作为加载类文件的参考目录 - protected static $_appInitPath = ''; - - /** - * 设置应用初始化目录 - * @param string $root_path - * @return void - */ - public static function setRootPath($root_path) - { - self::$_appInitPath = $root_path; - } - - /** - * 根据命名空间加载文件 - * @param string $name - * @return boolean - */ - public static function loadByNamespace($name) - { - // 相对路径 - $class_path = str_replace('\\', DIRECTORY_SEPARATOR ,$name); - // 如果是Workerman命名空间,则在当前目录寻找类文件 - if(strpos($name, 'Workerman\\') === 0) - { - $class_file = __DIR__.substr($class_path, strlen('Workerman')).'.php'; - } - else - { - // 先尝试在应用目录寻找文件 - if(self::$_appInitPath) - { - $class_file = self::$_appInitPath . DIRECTORY_SEPARATOR . $class_path.'.php'; - } - // 文件不存在,则在上一层目录寻找 - if(empty($class_file) || !is_file($class_file)) - { - $class_file = __DIR__.DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR . "$class_path.php"; - } - } - - // 找到文件 - if(is_file($class_file)) - { - // 加载 - require_once($class_file); - if(class_exists($name, false)) - { - return true; - } - } - return false; - } -} -// 设置类自动加载回调函数 -spl_autoload_register('\Workerman\Autoloader::loadByNamespace'); \ No newline at end of file diff --git a/pgserver/vendor/workerman/workerman-for-win/Connection/AsyncTcpConnection.php b/pgserver/vendor/workerman/workerman-for-win/Connection/AsyncTcpConnection.php deleted file mode 100644 index fc5b431..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Connection/AsyncTcpConnection.php +++ /dev/null @@ -1,327 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Connection; - -use Workerman\Events\EventInterface; -use Workerman\Lib\Timer; -use Workerman\Worker; -use Exception; - -/** - * AsyncTcpConnection. - */ -class AsyncTcpConnection extends TcpConnection -{ - /** - * Emitted when socket connection is successfully established. - * - * @var callback - */ - public $onConnect = null; - - /** - * Transport layer protocol. - * - * @var string - */ - public $transport = 'tcp'; - - /** - * Status. - * - * @var int - */ - protected $_status = self::STATUS_INITIAL; - - /** - * Remote host. - * - * @var string - */ - protected $_remoteHost = ''; - - /** - * Connect start time. - * - * @var string - */ - protected $_connectStartTime = 0; - - /** - * Remote URI. - * - * @var string - */ - protected $_remoteURI = ''; - - /** - * Context option. - * - * @var resource - */ - protected $_contextOption = null; - - /** - * Reconnect timer. - * - * @var int - */ - protected $_reconnectTimer = null; - - - /** - * PHP built-in protocols. - * - * @var array - */ - protected static $_builtinTransports = array( - 'tcp' => 'tcp', - 'udp' => 'udp', - 'unix' => 'unix', - 'ssl' => 'ssl', - 'sslv2' => 'sslv2', - 'sslv3' => 'sslv3', - 'tls' => 'tls' - ); - - /** - * Construct. - * - * @param string $remote_address - * @param array $context_option - * @throws Exception - */ - public function __construct($remote_address, $context_option = null) - { - $address_info = parse_url($remote_address); - if (!$address_info) { - list($scheme, $this->_remoteAddress) = explode(':', $remote_address, 2); - if (!$this->_remoteAddress) { - echo new \Exception('bad remote_address'); - } - } else { - if (!isset($address_info['port'])) { - $address_info['port'] = 80; - } - if (!isset($address_info['path'])) { - $address_info['path'] = '/'; - } - if (!isset($address_info['query'])) { - $address_info['query'] = ''; - } else { - $address_info['query'] = '?' . $address_info['query']; - } - $this->_remoteAddress = "{$address_info['host']}:{$address_info['port']}"; - $this->_remoteHost = $address_info['host']; - $this->_remoteURI = "{$address_info['path']}{$address_info['query']}"; - $scheme = isset($address_info['scheme']) ? $address_info['scheme'] : 'tcp'; - } - - $this->id = self::$_idRecorder++; - // Check application layer protocol class. - if (!isset(self::$_builtinTransports[$scheme])) { - $scheme = ucfirst($scheme); - $this->protocol = '\\Protocols\\' . $scheme; - if (!class_exists($this->protocol)) { - $this->protocol = "\\Workerman\\Protocols\\$scheme"; - if (!class_exists($this->protocol)) { - throw new Exception("class \\Protocols\\$scheme not exist"); - } - } - } else { - $this->transport = self::$_builtinTransports[$scheme]; - } - - // For statistics. - self::$statistics['connection_count']++; - $this->maxSendBufferSize = self::$defaultMaxSendBufferSize; - $this->_contextOption = $context_option; - } - - /** - * Do connect. - * - * @return void - */ - public function connect() - { - if ($this->_status !== self::STATUS_INITIAL && $this->_status !== self::STATUS_CLOSING && - $this->_status !== self::STATUS_CLOSED) { - return; - } - $this->_status = self::STATUS_CONNECTING; - $this->_connectStartTime = microtime(true); - // Open socket connection asynchronously. - if ($this->_contextOption) { - $context = stream_context_create($this->_contextOption); - $this->_socket = stream_socket_client("{$this->transport}://{$this->_remoteAddress}", $errno, $errstr, 0, - STREAM_CLIENT_ASYNC_CONNECT, $context); - } else { - $this->_socket = stream_socket_client("{$this->transport}://{$this->_remoteAddress}", $errno, $errstr, 0, - STREAM_CLIENT_ASYNC_CONNECT); - } - // If failed attempt to emit onError callback. - if (!$this->_socket) { - $this->emitError(WORKERMAN_CONNECT_FAIL, $errstr); - if ($this->_status === self::STATUS_CLOSING) { - $this->destroy(); - } - if ($this->_status === self::STATUS_CLOSED) { - $this->onConnect = null; - } - return; - } - // Add socket to global event loop waiting connection is successfully established or faild. - Worker::$globalEvent->add($this->_socket, EventInterface::EV_WRITE, array($this, 'checkConnection')); - // For windows. - if(DIRECTORY_SEPARATOR === '\\') { - Worker::$globalEvent->add($this->_socket, EventInterface::EV_EXCEPT, array($this, 'checkConnection')); - } - } - - /** - * Reconnect. - * - * @param int $after - * @return void - */ - public function reConnect($after = 0) { - $this->_status = self::STATUS_INITIAL; - if ($this->_reconnectTimer) { - Timer::del($this->_reconnectTimer); - } - if ($after > 0) { - $this->_reconnectTimer = Timer::add($after, array($this, 'connect'), null, false); - return; - } - $this->connect(); - } - - /** - * Get remote address. - * - * @return string - */ - public function getRemoteHost() - { - return $this->_remoteHost; - } - - /** - * Get remote URI. - * - * @return string - */ - public function getRemoteURI() - { - return $this->_remoteURI; - } - - /** - * Try to emit onError callback. - * - * @param int $code - * @param string $msg - * @return void - */ - protected function emitError($code, $msg) - { - $this->_status = self::STATUS_CLOSING; - if ($this->onError) { - try { - call_user_func($this->onError, $this, $code, $msg); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - } - - /** - * Check connection is successfully established or faild. - * - * @param resource $socket - * @return void - */ - public function checkConnection($socket) - { - // Remove EV_EXPECT for windows. - if(DIRECTORY_SEPARATOR === '\\') { - Worker::$globalEvent->del($socket, EventInterface::EV_EXCEPT); - } - // Check socket state. - if ($address = stream_socket_get_name($socket, true)) { - // Remove write listener. - Worker::$globalEvent->del($socket, EventInterface::EV_WRITE); - // Nonblocking. - stream_set_blocking($socket, 0); - // Compatible with hhvm - if (function_exists('stream_set_read_buffer')) { - stream_set_read_buffer($socket, 0); - } - // Try to open keepalive for tcp and disable Nagle algorithm. - if (function_exists('socket_import_stream') && $this->transport === 'tcp') { - $raw_socket = socket_import_stream($socket); - socket_set_option($raw_socket, SOL_SOCKET, SO_KEEPALIVE, 1); - socket_set_option($raw_socket, SOL_TCP, TCP_NODELAY, 1); - } - // Register a listener waiting read event. - Worker::$globalEvent->add($socket, EventInterface::EV_READ, array($this, 'baseRead')); - // There are some data waiting to send. - if ($this->_sendBuffer) { - Worker::$globalEvent->add($socket, EventInterface::EV_WRITE, array($this, 'baseWrite')); - } - $this->_status = self::STATUS_ESTABLISH; - $this->_remoteAddress = $address; - $this->_sslHandshakeCompleted = true; - - // Try to emit onConnect callback. - if ($this->onConnect) { - try { - call_user_func($this->onConnect, $this); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - // Try to emit protocol::onConnect - if (method_exists($this->protocol, 'onConnect')) { - try { - call_user_func(array($this->protocol, 'onConnect'), $this); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - } else { - // Connection failed. - $this->emitError(WORKERMAN_CONNECT_FAIL, 'connect ' . $this->_remoteAddress . ' fail after ' . round(microtime(true) - $this->_connectStartTime, 4) . ' seconds'); - if ($this->_status === self::STATUS_CLOSING) { - $this->destroy(); - } - if ($this->_status === self::STATUS_CLOSED) { - $this->onConnect = null; - } - } - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Connection/AsyncUdpConnection.php b/pgserver/vendor/workerman/workerman-for-win/Connection/AsyncUdpConnection.php deleted file mode 100644 index f15e47d..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Connection/AsyncUdpConnection.php +++ /dev/null @@ -1,101 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Connection; - -use Workerman\Events\EventInterface; -use Workerman\Worker; -use Exception; - -/** - * AsyncTcpConnection. - */ -class AsyncUdpConnection extends UdpConnection -{ - /** - * Construct. - * - * @param string $remote_address - * @throws Exception - */ - public function __construct($remote_address) - { - // Get the application layer communication protocol and listening address. - list($scheme, $address) = explode(':', $remote_address, 2); - // Check application layer protocol class. - if ($scheme !== 'udp') { - $scheme = ucfirst($scheme); - $this->protocol = '\\Protocols\\' . $scheme; - if (!class_exists($this->protocol)) { - $this->protocol = "\\Workerman\\Protocols\\$scheme"; - if (!class_exists($this->protocol)) { - throw new Exception("class \\Protocols\\$scheme not exist"); - } - } - } - - $this->_remoteAddress = substr($address, 2); - $this->_socket = stream_socket_client("udp://{$this->_remoteAddress}"); - Worker::$globalEvent->add($this->_socket, EventInterface::EV_READ, array($this, 'baseRead')); - } - - /** - * For udp package. - * - * @param resource $socket - * @return bool - */ - public function baseRead($socket) - { - $recv_buffer = stream_socket_recvfrom($socket, Worker::MAX_UDP_PACKAGE_SIZE, 0, $remote_address); - if (false === $recv_buffer || empty($remote_address)) { - return false; - } - - if ($this->onMessage) { - if ($this->protocol) { - $parser = $this->protocol; - $recv_buffer = $parser::decode($recv_buffer, $this); - } - ConnectionInterface::$statistics['total_request']++; - try { - call_user_func($this->onMessage, $this, $recv_buffer); - } catch (\Exception $e) { - self::log($e); - exit(250); - } catch (\Error $e) { - self::log($e); - exit(250); - } - } - return true; - } - - - /** - * Close connection. - * - * @param mixed $data - * @return bool - */ - public function close($data = null, $raw = false) - { - if ($data !== null) { - $this->send($data, $raw); - } - Worker::$globalEvent->del($this->_socket, EventInterface::EV_READ); - fclose($this->_socket); - return true; - } - -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Connection/ConnectionInterface.php b/pgserver/vendor/workerman/workerman-for-win/Connection/ConnectionInterface.php deleted file mode 100644 index b39e5ae..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Connection/ConnectionInterface.php +++ /dev/null @@ -1,83 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Connection; - -/** - * ConnectionInterface. - */ -abstract class ConnectionInterface -{ - /** - * Statistics for status command. - * - * @var array - */ - public static $statistics = array( - 'connection_count' => 0, - 'total_request' => 0, - 'throw_exception' => 0, - 'send_fail' => 0, - ); - - /** - * Emitted when data is received. - * - * @var callback - */ - public $onMessage = null; - - /** - * Emitted when the other end of the socket sends a FIN packet. - * - * @var callback - */ - public $onClose = null; - - /** - * Emitted when an error occurs with connection. - * - * @var callback - */ - public $onError = null; - - /** - * Sends data on the connection. - * - * @param string $send_buffer - * @return void|boolean - */ - abstract public function send($send_buffer); - - /** - * Get remote IP. - * - * @return string - */ - abstract public function getRemoteIp(); - - /** - * Get remote port. - * - * @return int - */ - abstract public function getRemotePort(); - - /** - * Close connection. - * - * @param $data - * @return void - */ - abstract public function close($data = null); -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Connection/TcpConnection.php b/pgserver/vendor/workerman/workerman-for-win/Connection/TcpConnection.php deleted file mode 100644 index 3b83830..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Connection/TcpConnection.php +++ /dev/null @@ -1,724 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Connection; - -use Workerman\Events\EventInterface; -use Workerman\Worker; -use Exception; - -/** - * TcpConnection. - */ -class TcpConnection extends ConnectionInterface -{ - /** - * Read buffer size. - * - * @var int - */ - const READ_BUFFER_SIZE = 65535; - - /** - * Status initial. - * - * @var int - */ - const STATUS_INITIAL = 0; - - /** - * Status connecting. - * - * @var int - */ - const STATUS_CONNECTING = 1; - - /** - * Status connection established. - * - * @var int - */ - const STATUS_ESTABLISH = 2; - - /** - * Status closing. - * - * @var int - */ - const STATUS_CLOSING = 4; - - /** - * Status closed. - * - * @var int - */ - const STATUS_CLOSED = 8; - - /** - * Emitted when data is received. - * - * @var callback - */ - public $onMessage = null; - - /** - * Emitted when the other end of the socket sends a FIN packet. - * - * @var callback - */ - public $onClose = null; - - /** - * Emitted when an error occurs with connection. - * - * @var callback - */ - public $onError = null; - - /** - * Emitted when the send buffer becomes full. - * - * @var callback - */ - public $onBufferFull = null; - - /** - * Emitted when the send buffer becomes empty. - * - * @var callback - */ - public $onBufferDrain = null; - - /** - * Application layer protocol. - * The format is like this Workerman\\Protocols\\Http. - * - * @var \Workerman\Protocols\ProtocolInterface - */ - public $protocol = null; - - /** - * Transport (tcp/udp/unix/ssl). - * - * @var string - */ - public $transport = 'tcp'; - - /** - * Which worker belong to. - * - * @var Worker - */ - public $worker = null; - - /** - * Connection->id. - * - * @var int - */ - public $id = 0; - - /** - * A copy of $worker->id which used to clean up the connection in worker->connections - * - * @var int - */ - protected $_id = 0; - - /** - * Sets the maximum send buffer size for the current connection. - * OnBufferFull callback will be emited When the send buffer is full. - * - * @var int - */ - public $maxSendBufferSize = 1048576; - - /** - * Default send buffer size. - * - * @var int - */ - public static $defaultMaxSendBufferSize = 1048576; - - /** - * Maximum acceptable packet size. - * - * @var int - */ - public static $maxPackageSize = 10485760; - - /** - * Id recorder. - * - * @var int - */ - protected static $_idRecorder = 1; - - /** - * Socket - * - * @var resource - */ - protected $_socket = null; - - /** - * Send buffer. - * - * @var string - */ - protected $_sendBuffer = ''; - - /** - * Receive buffer. - * - * @var string - */ - protected $_recvBuffer = ''; - - /** - * Current package length. - * - * @var int - */ - protected $_currentPackageLength = 0; - - /** - * Connection status. - * - * @var int - */ - protected $_status = self::STATUS_ESTABLISH; - - /** - * Remote address. - * - * @var string - */ - protected $_remoteAddress = ''; - - /** - * Is paused. - * - * @var bool - */ - protected $_isPaused = false; - - /** - * SSL handshake completed or not - * - * @var bool - */ - protected $_sslHandshakeCompleted = false; - - /** - * Construct. - * - * @param resource $socket - * @param string $remote_address - */ - public function __construct($socket, $remote_address = '') - { - self::$statistics['connection_count']++; - $this->id = $this->_id = self::$_idRecorder++; - $this->_socket = $socket; - stream_set_blocking($this->_socket, 0); - // Compatible with hhvm - if (function_exists('stream_set_read_buffer')) { - stream_set_read_buffer($this->_socket, 0); - } - Worker::$globalEvent->add($this->_socket, EventInterface::EV_READ, array($this, 'baseRead')); - $this->maxSendBufferSize = self::$defaultMaxSendBufferSize; - $this->_remoteAddress = $remote_address; - } - - /** - * Sends data on the connection. - * - * @param string $send_buffer - * @param bool $raw - * @return void|bool|null - */ - public function send($send_buffer, $raw = false) - { - if ($this->_status === self::STATUS_CLOSING || $this->_status === self::STATUS_CLOSED) { - return false; - } - - // Try to call protocol::encode($send_buffer) before sending. - if (false === $raw && $this->protocol) { - $parser = $this->protocol; - $send_buffer = $parser::encode($send_buffer, $this); - if ($send_buffer === '') { - return null; - } - } - - if ($this->_status !== self::STATUS_ESTABLISH || - ($this->transport === 'ssl' && $this->_sslHandshakeCompleted !== true) - ) { - if ($this->_sendBuffer) { - if ($this->bufferIsFull()) { - self::$statistics['send_fail']++; - return false; - } - } - $this->_sendBuffer .= $send_buffer; - $this->checkBufferWillFull(); - return null; - } - - - // Attempt to send data directly. - if ($this->_sendBuffer === '') { - $len = @fwrite($this->_socket, $send_buffer, 8192); - // send successful. - if ($len === strlen($send_buffer)) { - return true; - } - // Send only part of the data. - if ($len > 0) { - $this->_sendBuffer = substr($send_buffer, $len); - } else { - // Connection closed? - if (!is_resource($this->_socket) || feof($this->_socket)) { - self::$statistics['send_fail']++; - if ($this->onError) { - try { - call_user_func($this->onError, $this, WORKERMAN_SEND_FAIL, 'client closed'); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - $this->destroy(); - return false; - } - $this->_sendBuffer = $send_buffer; - } - Worker::$globalEvent->add($this->_socket, EventInterface::EV_WRITE, array($this, 'baseWrite')); - // Check if the send buffer will be full. - $this->checkBufferWillFull(); - return null; - } else { - if ($this->bufferIsFull()) { - self::$statistics['send_fail']++; - return false; - } - - $this->_sendBuffer .= $send_buffer; - // Check if the send buffer is full. - $this->checkBufferWillFull(); - } - } - - /** - * Get remote IP. - * - * @return string - */ - public function getRemoteIp() - { - $pos = strrpos($this->_remoteAddress, ':'); - if ($pos) { - return trim(substr($this->_remoteAddress, 0, $pos), '[]'); - } - return ''; - } - - /** - * Get remote port. - * - * @return int - */ - public function getRemotePort() - { - if ($this->_remoteAddress) { - return (int)substr(strrchr($this->_remoteAddress, ':'), 1); - } - return 0; - } - - /** - * Pauses the reading of data. That is onMessage will not be emitted. Useful to throttle back an upload. - * - * @return void - */ - public function pauseRecv() - { - Worker::$globalEvent->del($this->_socket, EventInterface::EV_READ); - $this->_isPaused = true; - } - - /** - * Resumes reading after a call to pauseRecv. - * - * @return void - */ - public function resumeRecv() - { - if ($this->_isPaused === true) { - Worker::$globalEvent->add($this->_socket, EventInterface::EV_READ, array($this, 'baseRead')); - $this->_isPaused = false; - $this->baseRead($this->_socket, false); - } - } - - /** - * Base read handler. - * - * @param resource $socket - * @param bool $check_eof - * @return void - */ - public function baseRead($socket, $check_eof = true) - { - // SSL handshake. - if ($this->transport === 'ssl' && $this->_sslHandshakeCompleted !== true) { - $ret = stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv2_SERVER | - STREAM_CRYPTO_METHOD_SSLv3_SERVER | STREAM_CRYPTO_METHOD_SSLv23_SERVER); - // Negotiation has failed. - if(false === $ret) { - if (!feof($socket)) { - echo "\nSSL Handshake fail. \nBuffer:".bin2hex(fread($socket, 8182))."\n"; - } - return $this->destroy(); - } elseif(0 === $ret) { - // There isn't enough data and should try again. - return; - } - if (isset($this->onSslHandshake)) { - try { - call_user_func($this->onSslHandshake, $this); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - $this->_sslHandshakeCompleted = true; - if ($this->_sendBuffer) { - Worker::$globalEvent->add($socket, EventInterface::EV_WRITE, array($this, 'baseWrite')); - } - return; - } - - $buffer = fread($socket, self::READ_BUFFER_SIZE); - - // Check connection closed. - if ($buffer === '' || $buffer === false) { - if ($check_eof && (feof($socket) || !is_resource($socket) || $buffer === false)) { - $this->destroy(); - return; - } - } else { - $this->_recvBuffer .= $buffer; - } - - // If the application layer protocol has been set up. - if ($this->protocol) { - $parser = $this->protocol; - while ($this->_recvBuffer !== '' && !$this->_isPaused) { - // The current packet length is known. - if ($this->_currentPackageLength) { - // Data is not enough for a package. - if ($this->_currentPackageLength > strlen($this->_recvBuffer)) { - break; - } - } else { - // Get current package length. - $this->_currentPackageLength = $parser::input($this->_recvBuffer, $this); - // The packet length is unknown. - if ($this->_currentPackageLength === 0) { - break; - } elseif ($this->_currentPackageLength > 0 && $this->_currentPackageLength <= self::$maxPackageSize) { - // Data is not enough for a package. - if ($this->_currentPackageLength > strlen($this->_recvBuffer)) { - break; - } - } // Wrong package. - else { - echo 'error package. package_length=' . var_export($this->_currentPackageLength, true); - $this->destroy(); - return; - } - } - - // The data is enough for a packet. - self::$statistics['total_request']++; - // The current packet length is equal to the length of the buffer. - if (strlen($this->_recvBuffer) === $this->_currentPackageLength) { - $one_request_buffer = $this->_recvBuffer; - $this->_recvBuffer = ''; - } else { - // Get a full package from the buffer. - $one_request_buffer = substr($this->_recvBuffer, 0, $this->_currentPackageLength); - // Remove the current package from the receive buffer. - $this->_recvBuffer = substr($this->_recvBuffer, $this->_currentPackageLength); - } - // Reset the current packet length to 0. - $this->_currentPackageLength = 0; - if (!$this->onMessage) { - continue; - } - try { - // Decode request buffer before Emitting onMessage callback. - call_user_func($this->onMessage, $this, $parser::decode($one_request_buffer, $this)); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - return; - } - - if ($this->_recvBuffer === '' || $this->_isPaused) { - return; - } - - // Applications protocol is not set. - self::$statistics['total_request']++; - if (!$this->onMessage) { - $this->_recvBuffer = ''; - return; - } - try { - call_user_func($this->onMessage, $this, $this->_recvBuffer); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - // Clean receive buffer. - $this->_recvBuffer = ''; - } - - /** - * Base write handler. - * - * @return void|bool - */ - public function baseWrite() - { - $len = @fwrite($this->_socket, $this->_sendBuffer, 8192); - if ($len === strlen($this->_sendBuffer)) { - Worker::$globalEvent->del($this->_socket, EventInterface::EV_WRITE); - $this->_sendBuffer = ''; - // Try to emit onBufferDrain callback when the send buffer becomes empty. - if ($this->onBufferDrain) { - try { - call_user_func($this->onBufferDrain, $this); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - if ($this->_status === self::STATUS_CLOSING) { - $this->destroy(); - } - return true; - } - if ($len > 0) { - $this->_sendBuffer = substr($this->_sendBuffer, $len); - } else { - self::$statistics['send_fail']++; - $this->destroy(); - } - } - - /** - * This method pulls all the data out of a readable stream, and writes it to the supplied destination. - * - * @param TcpConnection $dest - * @return void - */ - public function pipe($dest) - { - $source = $this; - $this->onMessage = function ($source, $data) use ($dest) { - $dest->send($data); - }; - $this->onClose = function ($source) use ($dest) { - $dest->destroy(); - }; - $dest->onBufferFull = function ($dest) use ($source) { - $source->pauseRecv(); - }; - $dest->onBufferDrain = function ($dest) use ($source) { - $source->resumeRecv(); - }; - } - - /** - * Remove $length of data from receive buffer. - * - * @param int $length - * @return void - */ - public function consumeRecvBuffer($length) - { - $this->_recvBuffer = substr($this->_recvBuffer, $length); - } - - /** - * Close connection. - * - * @param mixed $data - * @param bool $raw - * @return void - */ - public function close($data = null, $raw = false) - { - if ($this->_status === self::STATUS_CLOSING || $this->_status === self::STATUS_CLOSED) { - return; - } else { - if ($data !== null) { - $this->send($data, $raw); - } - $this->_status = self::STATUS_CLOSING; - } - if ($this->_sendBuffer === '') { - $this->destroy(); - } - } - - /** - * Get the real socket. - * - * @return resource - */ - public function getSocket() - { - return $this->_socket; - } - - /** - * Check whether the send buffer will be full. - * - * @return void - */ - protected function checkBufferWillFull() - { - if ($this->maxSendBufferSize <= strlen($this->_sendBuffer)) { - if ($this->onBufferFull) { - try { - call_user_func($this->onBufferFull, $this); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - } - } - - /** - * Whether send buffer is full. - * - * @return bool - */ - protected function bufferIsFull() - { - // Buffer has been marked as full but still has data to send then the packet is discarded. - if ($this->maxSendBufferSize <= strlen($this->_sendBuffer)) { - if ($this->onError) { - try { - call_user_func($this->onError, $this, WORKERMAN_SEND_FAIL, 'send buffer full and drop package'); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - return true; - } - return false; - } - - /** - * Destroy connection. - * - * @return void - */ - public function destroy() - { - // Avoid repeated calls. - if ($this->_status === self::STATUS_CLOSED) { - return; - } - // Remove event listener. - Worker::$globalEvent->del($this->_socket, EventInterface::EV_READ); - Worker::$globalEvent->del($this->_socket, EventInterface::EV_WRITE); - // Close socket. - @fclose($this->_socket); - // Remove from worker->connections. - if ($this->worker) { - unset($this->worker->connections[$this->_id]); - } - $this->_status = self::STATUS_CLOSED; - // Try to emit onClose callback. - if ($this->onClose) { - try { - call_user_func($this->onClose, $this); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - // Try to emit protocol::onClose - if (method_exists($this->protocol, 'onClose')) { - try { - call_user_func(array($this->protocol, 'onClose'), $this); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - if ($this->_status === self::STATUS_CLOSED) { - // Cleaning up the callback to avoid memory leaks. - $this->onMessage = $this->onClose = $this->onError = $this->onBufferFull = $this->onBufferDrain = null; - } - } - - /** - * Destruct. - * - * @return void - */ - public function __destruct() - { - self::$statistics['connection_count']--; - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Connection/UdpConnection.php b/pgserver/vendor/workerman/workerman-for-win/Connection/UdpConnection.php deleted file mode 100644 index e4cd2fe..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Connection/UdpConnection.php +++ /dev/null @@ -1,115 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Connection; - -/** - * UdpConnection. - */ -class UdpConnection extends ConnectionInterface -{ - /** - * Application layer protocol. - * The format is like this Workerman\\Protocols\\Http. - * - * @var \Workerman\Protocols\ProtocolInterface - */ - public $protocol = null; - - /** - * Udp socket. - * - * @var resource - */ - protected $_socket = null; - - /** - * Remote address. - * - * @var string - */ - protected $_remoteAddress = ''; - - /** - * Construct. - * - * @param resource $socket - * @param string $remote_address - */ - public function __construct($socket, $remote_address) - { - $this->_socket = $socket; - $this->_remoteAddress = $remote_address; - } - - /** - * Sends data on the connection. - * - * @param string $send_buffer - * @param bool $raw - * @return void|boolean - */ - public function send($send_buffer, $raw = false) - { - if (false === $raw && $this->protocol) { - $parser = $this->protocol; - $send_buffer = $parser::encode($send_buffer, $this); - if ($send_buffer === '') { - return null; - } - } - return strlen($send_buffer) === stream_socket_sendto($this->_socket, $send_buffer, 0, $this->_remoteAddress); - } - - /** - * Get remote IP. - * - * @return string - */ - public function getRemoteIp() - { - $pos = strrpos($this->_remoteAddress, ':'); - if ($pos) { - return trim(substr($this->_remoteAddress, 0, $pos), '[]'); - } - return ''; - } - - /** - * Get remote port. - * - * @return int - */ - public function getRemotePort() - { - if ($this->_remoteAddress) { - return (int)substr(strrchr($this->_remoteAddress, ':'), 1); - } - return 0; - } - - /** - * Close connection. - * - * @param mixed $data - * @param bool $raw - * @return bool - */ - public function close($data = null, $raw = false) - { - if ($data !== null) { - $this->send($data, $raw); - } - return true; - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Events/Ev.php b/pgserver/vendor/workerman/workerman-for-win/Events/Ev.php deleted file mode 100644 index 5018fec..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Events/Ev.php +++ /dev/null @@ -1,184 +0,0 @@ - - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Events; - -use Workerman\Worker; - -/** - * ev eventloop - */ -class Ev implements EventInterface -{ - /** - * All listeners for read/write event. - * - * @var array - */ - protected $_allEvents = array(); - - /** - * Event listeners of signal. - * - * @var array - */ - protected $_eventSignal = array(); - - /** - * All timer event listeners. - * [func, args, event, flag, time_interval] - * - * @var array - */ - protected $_eventTimer = array(); - - /** - * Timer id. - * - * @var int - */ - protected static $_timerId = 1; - - /** - * Add a timer. - * {@inheritdoc} - */ - public function add($fd, $flag, $func, $args = null) - { - $callback = function ($event, $socket) use ($fd, $func) { - try { - call_user_func($func, $fd); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - }; - switch ($flag) { - case self::EV_SIGNAL: - $event = new \EvSignal($fd, $callback); - $this->_eventSignal[$fd] = $event; - return true; - case self::EV_TIMER: - case self::EV_TIMER_ONCE: - $repeat = $flag == self::EV_TIMER_ONCE ? 0 : $fd; - $param = array($func, (array)$args, $flag, $fd, self::$_timerId); - $event = new \EvTimer($fd, $repeat, array($this, 'timerCallback'), $param); - $this->_eventTimer[self::$_timerId] = $event; - return self::$_timerId++; - default : - $fd_key = (int)$fd; - $real_flag = $flag === self::EV_READ ? \Ev::READ : \Ev::WRITE; - $event = new \EvIo($fd, $real_flag, $callback); - $this->_allEvents[$fd_key][$flag] = $event; - return true; - } - - } - - /** - * Remove a timer. - * {@inheritdoc} - */ - public function del($fd, $flag) - { - switch ($flag) { - case self::EV_READ: - case self::EV_WRITE: - $fd_key = (int)$fd; - if (isset($this->_allEvents[$fd_key][$flag])) { - $this->_allEvents[$fd_key][$flag]->stop(); - unset($this->_allEvents[$fd_key][$flag]); - } - if (empty($this->_allEvents[$fd_key])) { - unset($this->_allEvents[$fd_key]); - } - break; - case self::EV_SIGNAL: - $fd_key = (int)$fd; - if (isset($this->_eventSignal[$fd_key])) { - $this->_eventSignal[$fd_key]->stop(); - unset($this->_eventSignal[$fd_key]); - } - break; - case self::EV_TIMER: - case self::EV_TIMER_ONCE: - if (isset($this->_eventTimer[$fd])) { - $this->_eventTimer[$fd]->stop(); - unset($this->_eventTimer[$fd]); - } - break; - } - return true; - } - - /** - * Timer callback. - * - * @param \EvWatcher $event - */ - public function timerCallback($event) - { - $param = $event->data; - $timer_id = $param[4]; - if ($param[2] === self::EV_TIMER_ONCE) { - $this->_eventTimer[$timer_id]->stop(); - unset($this->_eventTimer[$timer_id]); - } - try { - call_user_func_array($param[0], $param[1]); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - - /** - * Remove all timers. - * - * @return void - */ - public function clearAllTimer() - { - foreach ($this->_eventTimer as $event) { - $event->stop(); - } - $this->_eventTimer = array(); - } - - /** - * Main loop. - * - * @see EventInterface::loop() - */ - public function loop() - { - \Ev::run(); - } - - /** - * Destroy loop. - * - * @return void - */ - public function destroy() - { - foreach ($this->_allEvents as $event) { - $event->stop(); - } - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Events/Event.php b/pgserver/vendor/workerman/workerman-for-win/Events/Event.php deleted file mode 100644 index 1322c73..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Events/Event.php +++ /dev/null @@ -1,199 +0,0 @@ - - * @copyright 有个鬼<42765633@qq.com> - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Events; - -use Workerman\Worker; - -/** - * libevent eventloop - */ -class Event implements EventInterface -{ - /** - * Event base. - * @var object - */ - protected $_eventBase = null; - - /** - * All listeners for read/write event. - * @var array - */ - protected $_allEvents = array(); - - /** - * Event listeners of signal. - * @var array - */ - protected $_eventSignal = array(); - - /** - * All timer event listeners. - * [func, args, event, flag, time_interval] - * @var array - */ - protected $_eventTimer = array(); - - /** - * Timer id. - * @var int - */ - protected static $_timerId = 1; - - /** - * construct - * @return void - */ - public function __construct() - { - $this->_eventBase = new \EventBase(); - } - - /** - * @see EventInterface::add() - */ - public function add($fd, $flag, $func, $args=array()) - { - switch ($flag) { - case self::EV_SIGNAL: - - $fd_key = (int)$fd; - $event = \Event::signal($this->_eventBase, $fd, $func); - if (!$event||!$event->add()) { - return false; - } - $this->_eventSignal[$fd_key] = $event; - return true; - - case self::EV_TIMER: - case self::EV_TIMER_ONCE: - - $param = array($func, (array)$args, $flag, $fd, self::$_timerId); - $event = new \Event($this->_eventBase, -1, \Event::TIMEOUT|\Event::PERSIST, array($this, "timerCallback"), $param); - if (!$event||!$event->addTimer($fd)) { - return false; - } - $this->_eventTimer[self::$_timerId] = $event; - return self::$_timerId++; - - default : - $fd_key = (int)$fd; - $real_flag = $flag === self::EV_READ ? \Event::READ | \Event::PERSIST : \Event::WRITE | \Event::PERSIST; - $event = new \Event($this->_eventBase, $fd, $real_flag, $func, $fd); - if (!$event||!$event->add()) { - return false; - } - $this->_allEvents[$fd_key][$flag] = $event; - return true; - } - } - - /** - * @see Events\EventInterface::del() - */ - public function del($fd, $flag) - { - switch ($flag) { - - case self::EV_READ: - case self::EV_WRITE: - - $fd_key = (int)$fd; - if (isset($this->_allEvents[$fd_key][$flag])) { - $this->_allEvents[$fd_key][$flag]->del(); - unset($this->_allEvents[$fd_key][$flag]); - } - if (empty($this->_allEvents[$fd_key])) { - unset($this->_allEvents[$fd_key]); - } - break; - - case self::EV_SIGNAL: - $fd_key = (int)$fd; - if (isset($this->_eventSignal[$fd_key])) { - $this->_eventSignal[$fd_key]->del(); - unset($this->_eventSignal[$fd_key]); - } - break; - - case self::EV_TIMER: - case self::EV_TIMER_ONCE: - if (isset($this->_eventTimer[$fd])) { - $this->_eventTimer[$fd]->del(); - unset($this->_eventTimer[$fd]); - } - break; - } - return true; - } - - /** - * Timer callback. - * @param null $fd - * @param int $what - * @param int $timer_id - */ - public function timerCallback($fd, $what, $param) - { - $timer_id = $param[4]; - - if ($param[2] === self::EV_TIMER_ONCE) { - $this->_eventTimer[$timer_id]->del(); - unset($this->_eventTimer[$timer_id]); - } - - try { - call_user_func_array($param[0], $param[1]); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - - /** - * @see Events\EventInterface::clearAllTimer() - * @return void - */ - public function clearAllTimer() - { - foreach ($this->_eventTimer as $event) { - $event->del(); - } - $this->_eventTimer = array(); - } - - - /** - * @see EventInterface::loop() - */ - public function loop() - { - $this->_eventBase->loop(); - } - - /** - * Destroy loop. - * - * @return void - */ - public function destroy() - { - foreach ($this->_eventSignal as $event) { - $event->del(); - } - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Events/EventInterface.php b/pgserver/vendor/workerman/workerman-for-win/Events/EventInterface.php deleted file mode 100644 index eb4a9d5..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Events/EventInterface.php +++ /dev/null @@ -1,100 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Events; - -interface EventInterface -{ - /** - * Read event. - * - * @var int - */ - const EV_READ = 1; - - /** - * Write event. - * - * @var int - */ - const EV_WRITE = 2; - - /** - * Except event - * - * @var int - */ - const EV_EXCEPT = 3; - - /** - * Signal event. - * - * @var int - */ - const EV_SIGNAL = 4; - - /** - * Timer event. - * - * @var int - */ - const EV_TIMER = 8; - - /** - * Timer once event. - * - * @var int - */ - const EV_TIMER_ONCE = 16; - - /** - * Add event listener to event loop. - * - * @param mixed $fd - * @param int $flag - * @param callable $func - * @param mixed $args - * @return bool - */ - public function add($fd, $flag, $func, $args = null); - - /** - * Remove event listener from event loop. - * - * @param mixed $fd - * @param int $flag - * @return bool - */ - public function del($fd, $flag); - - /** - * Remove all timers. - * - * @return void - */ - public function clearAllTimer(); - - /** - * Main loop. - * - * @return void - */ - public function loop(); - - /** - * Destroy loop. - * - * @return mixed - */ - public function destroy(); -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Events/Libevent.php b/pgserver/vendor/workerman/workerman-for-win/Events/Libevent.php deleted file mode 100644 index d5a8409..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Events/Libevent.php +++ /dev/null @@ -1,217 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Events; - -use Workerman\Worker; - -/** - * libevent eventloop - */ -class Libevent implements EventInterface -{ - /** - * Event base. - * - * @var resource - */ - protected $_eventBase = null; - - /** - * All listeners for read/write event. - * - * @var array - */ - protected $_allEvents = array(); - - /** - * Event listeners of signal. - * - * @var array - */ - protected $_eventSignal = array(); - - /** - * All timer event listeners. - * [func, args, event, flag, time_interval] - * - * @var array - */ - protected $_eventTimer = array(); - - /** - * construct - */ - public function __construct() - { - $this->_eventBase = event_base_new(); - } - - /** - * {@inheritdoc} - */ - public function add($fd, $flag, $func, $args = array()) - { - switch ($flag) { - case self::EV_SIGNAL: - $fd_key = (int)$fd; - $real_flag = EV_SIGNAL | EV_PERSIST; - $this->_eventSignal[$fd_key] = event_new(); - if (!event_set($this->_eventSignal[$fd_key], $fd, $real_flag, $func, null)) { - return false; - } - if (!event_base_set($this->_eventSignal[$fd_key], $this->_eventBase)) { - return false; - } - if (!event_add($this->_eventSignal[$fd_key])) { - return false; - } - return true; - case self::EV_TIMER: - case self::EV_TIMER_ONCE: - $event = event_new(); - $timer_id = (int)$event; - if (!event_set($event, 0, EV_TIMEOUT, array($this, 'timerCallback'), $timer_id)) { - return false; - } - - if (!event_base_set($event, $this->_eventBase)) { - return false; - } - - $time_interval = $fd * 1000000; - if (!event_add($event, $time_interval)) { - return false; - } - $this->_eventTimer[$timer_id] = array($func, (array)$args, $event, $flag, $time_interval); - return $timer_id; - - default : - $fd_key = (int)$fd; - $real_flag = $flag === self::EV_READ ? EV_READ | EV_PERSIST : EV_WRITE | EV_PERSIST; - - $event = event_new(); - - if (!event_set($event, $fd, $real_flag, $func, null)) { - return false; - } - - if (!event_base_set($event, $this->_eventBase)) { - return false; - } - - if (!event_add($event)) { - return false; - } - - $this->_allEvents[$fd_key][$flag] = $event; - - return true; - } - - } - - /** - * {@inheritdoc} - */ - public function del($fd, $flag) - { - switch ($flag) { - case self::EV_READ: - case self::EV_WRITE: - $fd_key = (int)$fd; - if (isset($this->_allEvents[$fd_key][$flag])) { - event_del($this->_allEvents[$fd_key][$flag]); - unset($this->_allEvents[$fd_key][$flag]); - } - if (empty($this->_allEvents[$fd_key])) { - unset($this->_allEvents[$fd_key]); - } - break; - case self::EV_SIGNAL: - $fd_key = (int)$fd; - if (isset($this->_eventSignal[$fd_key])) { - event_del($this->_eventSignal[$fd_key]); - unset($this->_eventSignal[$fd_key]); - } - break; - case self::EV_TIMER: - case self::EV_TIMER_ONCE: - // 这里 fd 为timerid - if (isset($this->_eventTimer[$fd])) { - event_del($this->_eventTimer[$fd][2]); - unset($this->_eventTimer[$fd]); - } - break; - } - return true; - } - - /** - * Timer callback. - * - * @param mixed $_null1 - * @param int $_null2 - * @param mixed $timer_id - */ - protected function timerCallback($_null1, $_null2, $timer_id) - { - if ($this->_eventTimer[$timer_id][3] === self::EV_TIMER) { - event_add($this->_eventTimer[$timer_id][2], $this->_eventTimer[$timer_id][4]); - } - try { - call_user_func_array($this->_eventTimer[$timer_id][0], $this->_eventTimer[$timer_id][1]); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - if (isset($this->_eventTimer[$timer_id]) && $this->_eventTimer[$timer_id][3] === self::EV_TIMER_ONCE) { - $this->del($timer_id, self::EV_TIMER_ONCE); - } - } - - /** - * {@inheritdoc} - */ - public function clearAllTimer() - { - foreach ($this->_eventTimer as $task_data) { - event_del($task_data[2]); - } - $this->_eventTimer = array(); - } - - /** - * {@inheritdoc} - */ - public function loop() - { - event_base_loop($this->_eventBase); - } - - /** - * Destroy loop. - * - * @return void - */ - public function destroy() - { - foreach ($this->_eventSignal as $event) { - event_del($event); - } - } -} - diff --git a/pgserver/vendor/workerman/workerman-for-win/Events/React/ExtEventLoop.php b/pgserver/vendor/workerman/workerman-for-win/Events/React/ExtEventLoop.php deleted file mode 100644 index a145256..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Events/React/ExtEventLoop.php +++ /dev/null @@ -1,173 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Events\React; -use Workerman\Events\EventInterface; - -/** - * Class ExtEventLoop - * @package Workerman\Events\React - */ -class ExtEventLoop extends \React\EventLoop\ExtEventLoop -{ - /** - * Event base. - * - * @var EventBase - */ - protected $_eventBase = null; - - /** - * All signal Event instances. - * - * @var array - */ - protected $_signalEvents = array(); - - /** - * @var array - */ - protected $_timerIdMap = array(); - - /** - * @var int - */ - protected $_timerIdIndex = 0; - - /** - * Add event listener to event loop. - * - * @param $fd - * @param $flag - * @param $func - * @param array $args - * @return bool - */ - public function add($fd, $flag, $func, $args = array()) - { - $args = (array)$args; - switch ($flag) { - case EventInterface::EV_READ: - return $this->addReadStream($fd, $func); - case EventInterface::EV_WRITE: - return $this->addWriteStream($fd, $func); - case EventInterface::EV_SIGNAL: - return $this->addSignal($fd, $func); - case EventInterface::EV_TIMER: - $timer_obj = $this->addPeriodicTimer($fd, function() use ($func, $args) { - call_user_func_array($func, $args); - }); - $this->_timerIdMap[++$this->_timerIdIndex] = $timer_obj; - return $this->_timerIdIndex; - case EventInterface::EV_TIMER_ONCE: - $timer_obj = $this->addTimer($fd, function() use ($func, $args) { - call_user_func_array($func, $args); - }); - $this->_timerIdMap[++$this->_timerIdIndex] = $timer_obj; - return $this->_timerIdIndex; - } - return false; - } - - /** - * Remove event listener from event loop. - * - * @param mixed $fd - * @param int $flag - * @return bool - */ - public function del($fd, $flag) - { - switch ($flag) { - case EventInterface::EV_READ: - return $this->removeReadStream($fd); - case EventInterface::EV_WRITE: - return $this->removeWriteStream($fd); - case EventInterface::EV_SIGNAL: - return $this->removeSignal($fd); - case EventInterface::EV_TIMER: - case EventInterface::EV_TIMER_ONCE; - if (isset($this->_timerIdMap[$fd])){ - $timer_obj = $this->_timerIdMap[$fd]; - unset($this->_timerIdMap[$fd]); - $this->cancelTimer($timer_obj); - return true; - } - } - return false; - } - - - /** - * Main loop. - * - * @return void - */ - public function loop() - { - $this->run(); - } - - /** - * Construct - */ - public function __construct() - { - parent::__construct(); - $class = new \ReflectionClass('\React\EventLoop\ExtEventLoop'); - $property = $class->getProperty('eventBase'); - $property->setAccessible(true); - $this->_eventBase = $property->getValue($this); - } - - /** - * Add signal handler. - * - * @param $signal - * @param $callback - * @return bool - */ - public function addSignal($signal, $callback) - { - $event = \Event::signal($this->_eventBase, $signal, $callback); - if (!$event||!$event->add()) { - return false; - } - $this->_signalEvents[$signal] = $event; - } - - /** - * Remove signal handler. - * - * @param $signal - */ - public function removeSignal($signal) - { - if (isset($this->_signalEvents[$signal])) { - $this->_signalEvents[$signal]->del(); - unset($this->_signalEvents[$signal]); - } - } - - /** - * Destroy loop. - * - * @return void - */ - public function destroy() - { - foreach ($this->_signalEvents as $event) { - $event->del(); - } - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Events/React/LibEventLoop.php b/pgserver/vendor/workerman/workerman-for-win/Events/React/LibEventLoop.php deleted file mode 100644 index 7a3a93a..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Events/React/LibEventLoop.php +++ /dev/null @@ -1,174 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Events\React; -use Workerman\Events\EventInterface; - -/** - * Class LibEventLoop - * @package Workerman\Events\React - */ -class LibEventLoop extends \React\EventLoop\LibEventLoop -{ - /** - * Event base. - * - * @var event_base resource - */ - protected $_eventBase = null; - - /** - * All signal Event instances. - * - * @var array - */ - protected $_signalEvents = array(); - - /** - * @var array - */ - protected $_timerIdMap = array(); - - /** - * @var int - */ - protected $_timerIdIndex = 0; - - /** - * Add event listener to event loop. - * - * @param $fd - * @param $flag - * @param $func - * @param array $args - * @return bool - */ - public function add($fd, $flag, $func, $args = array()) - { - $args = (array)$args; - switch ($flag) { - case EventInterface::EV_READ: - return $this->addReadStream($fd, $func); - case EventInterface::EV_WRITE: - return $this->addWriteStream($fd, $func); - case EventInterface::EV_SIGNAL: - return $this->addSignal($fd, $func); - case EventInterface::EV_TIMER: - $timer_obj = $this->addPeriodicTimer($fd, function() use ($func, $args) { - call_user_func_array($func, $args); - }); - $this->_timerIdMap[++$this->_timerIdIndex] = $timer_obj; - return $this->_timerIdIndex; - case EventInterface::EV_TIMER_ONCE: - $timer_obj = $this->addTimer($fd, function() use ($func, $args) { - call_user_func_array($func, $args); - }); - $this->_timerIdMap[++$this->_timerIdIndex] = $timer_obj; - return $this->_timerIdIndex; - } - return false; - } - - /** - * Remove event listener from event loop. - * - * @param mixed $fd - * @param int $flag - * @return bool - */ - public function del($fd, $flag) - { - switch ($flag) { - case EventInterface::EV_READ: - return $this->removeReadStream($fd); - case EventInterface::EV_WRITE: - return $this->removeWriteStream($fd); - case EventInterface::EV_SIGNAL: - return $this->removeSignal($fd); - case EventInterface::EV_TIMER: - case EventInterface::EV_TIMER_ONCE; - if (isset($this->_timerIdMap[$fd])){ - $timer_obj = $this->_timerIdMap[$fd]; - unset($this->_timerIdMap[$fd]); - $this->cancelTimer($timer_obj); - return true; - } - } - return false; - } - - - /** - * Main loop. - * - * @return void - */ - public function loop() - { - $this->run(); - } - - /** - * Construct. - */ - public function __construct() - { - parent::__construct(); - $class = new \ReflectionClass('\React\EventLoop\LibEventLoop'); - $property = $class->getProperty('eventBase'); - $property->setAccessible(true); - $this->_eventBase = $property->getValue($this); - } - - /** - * Add signal handler. - * - * @param $signal - * @param $callback - * @return bool - */ - public function addSignal($signal, $callback) - { - $event = event_new(); - $this->_signalEvents[$signal] = $event; - event_set($event, $signal, EV_SIGNAL | EV_PERSIST, $callback); - event_base_set($event, $this->_eventBase); - event_add($event); - } - - /** - * Remove signal handler. - * - * @param $signal - */ - public function removeSignal($signal) - { - if (isset($this->_signalEvents[$signal])) { - $event = $this->_signalEvents[$signal]; - event_del($event); - unset($this->_signalEvents[$signal]); - } - } - - /** - * Destroy loop. - * - * @return void - */ - public function destroy() - { - foreach ($this->_signalEvents as $event) { - event_del($event); - } - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Events/React/StreamSelectLoop.php b/pgserver/vendor/workerman/workerman-for-win/Events/React/StreamSelectLoop.php deleted file mode 100644 index 2b4fc5a..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Events/React/StreamSelectLoop.php +++ /dev/null @@ -1,176 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Events\React; -use Workerman\Events\EventInterface; - -/** - * Class StreamSelectLoop - * @package Workerman\Events\React - */ -class StreamSelectLoop extends \React\EventLoop\StreamSelectLoop -{ - /** - * @var array - */ - protected $_timerIdMap = array(); - - /** - * @var int - */ - protected $_timerIdIndex = 0; - - /** - * Add event listener to event loop. - * - * @param $fd - * @param $flag - * @param $func - * @param array $args - * @return bool - */ - public function add($fd, $flag, $func, $args = array()) - { - $args = (array)$args; - switch ($flag) { - case EventInterface::EV_READ: - return $this->addReadStream($fd, $func); - case EventInterface::EV_WRITE: - return $this->addWriteStream($fd, $func); - case EventInterface::EV_SIGNAL: - return $this->addSignal($fd, $func); - case EventInterface::EV_TIMER: - $timer_obj = $this->addPeriodicTimer($fd, function() use ($func, $args) { - call_user_func_array($func, $args); - }); - $this->_timerIdMap[++$this->_timerIdIndex] = $timer_obj; - return $this->_timerIdIndex; - case EventInterface::EV_TIMER_ONCE: - $index = ++$this->_timerIdIndex; - $timer_obj = $this->addTimer($fd, function() use ($func, $args, $index) { - $this->del($index,EventInterface::EV_TIMER_ONCE); - call_user_func_array($func, $args); - }); - $this->_timerIdMap[$index] = $timer_obj; - return $this->_timerIdIndex; - } - return false; - } - - /** - * Remove event listener from event loop. - * - * @param mixed $fd - * @param int $flag - * @return bool - */ - public function del($fd, $flag) - { - switch ($flag) { - case EventInterface::EV_READ: - return $this->removeReadStream($fd); - case EventInterface::EV_WRITE: - return $this->removeWriteStream($fd); - case EventInterface::EV_SIGNAL: - return $this->removeSignal($fd); - case EventInterface::EV_TIMER: - case EventInterface::EV_TIMER_ONCE; - if (isset($this->_timerIdMap[$fd])){ - $timer_obj = $this->_timerIdMap[$fd]; - unset($this->_timerIdMap[$fd]); - $this->cancelTimer($timer_obj); - return true; - } - } - return false; - } - - - /** - * Main loop. - * - * @return void - */ - public function loop() - { - $this->run(); - } - - /** - * Add signal handler. - * - * @param $signal - * @param $callback - * @return bool - */ - public function addSignal($signal, $callback) - { - if(DIRECTORY_SEPARATOR === '/') { - pcntl_signal($signal, $callback); - } - } - - /** - * Remove signal handler. - * - * @param $signal - */ - public function removeSignal($signal) - { - if(DIRECTORY_SEPARATOR === '/') { - pcntl_signal($signal, SIG_IGN); - } - } - - /** - * Emulate a stream_select() implementation that does not break when passed - * empty stream arrays. - * - * @param array &$read An array of read streams to select upon. - * @param array &$write An array of write streams to select upon. - * @param integer|null $timeout Activity timeout in microseconds, or null to wait forever. - * - * @return integer|false The total number of streams that are ready for read/write. - * Can return false if stream_select() is interrupted by a signal. - */ - protected function streamSelect(array &$read, array &$write, $timeout) - { - if ($read || $write) { - $except = null; - // Calls signal handlers for pending signals - if(DIRECTORY_SEPARATOR === '/') { - pcntl_signal_dispatch(); - } - // suppress warnings that occur, when stream_select is interrupted by a signal - return @stream_select($read, $write, $except, $timeout === null ? null : 0, $timeout); - } - - // Calls signal handlers for pending signals - if(DIRECTORY_SEPARATOR === '/') { - pcntl_signal_dispatch(); - } - $timeout && usleep($timeout); - - return 0; - } - - /** - * Destroy loop. - * - * @return void - */ - public function destroy() - { - - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Events/Select.php b/pgserver/vendor/workerman/workerman-for-win/Events/Select.php deleted file mode 100644 index c769bbf..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Events/Select.php +++ /dev/null @@ -1,322 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Events; - -/** - * select eventloop - */ -class Select implements EventInterface -{ - /** - * All listeners for read/write event. - * - * @var array - */ - public $_allEvents = array(); - - /** - * Event listeners of signal. - * - * @var array - */ - public $_signalEvents = array(); - - /** - * Fds waiting for read event. - * - * @var array - */ - protected $_readFds = array(); - - /** - * Fds waiting for write event. - * - * @var array - */ - protected $_writeFds = array(); - - /** - * Fds waiting for except event. - * - * @var array - */ - protected $_exceptFds = array(); - - /** - * Timer scheduler. - * {['data':timer_id, 'priority':run_timestamp], ..} - * - * @var \SplPriorityQueue - */ - protected $_scheduler = null; - - /** - * All timer event listeners. - * [[func, args, flag, timer_interval], ..] - * - * @var array - */ - protected $_eventTimer = array(); - - /** - * Timer id. - * - * @var int - */ - protected $_timerId = 1; - - /** - * Select timeout. - * - * @var int - */ - protected $_selectTimeout = 100000000; - - /** - * Paired socket channels - * - * @var array - */ - protected $channel = array(); - - /** - * Construct. - */ - public function __construct() - { - // Create a pipeline and put into the collection of the read to read the descriptor to avoid empty polling. - $this->channel = stream_socket_pair(DIRECTORY_SEPARATOR === '/' ? STREAM_PF_UNIX : STREAM_PF_INET, - STREAM_SOCK_STREAM, STREAM_IPPROTO_IP); - if($this->channel) { - stream_set_blocking($this->channel[0], 0); - $this->_readFds[0] = $this->channel[0]; - } - // Init SplPriorityQueue. - $this->_scheduler = new \SplPriorityQueue(); - $this->_scheduler->setExtractFlags(\SplPriorityQueue::EXTR_BOTH); - } - - /** - * {@inheritdoc} - */ - public function add($fd, $flag, $func, $args = array()) - { - switch ($flag) { - case self::EV_READ: - $fd_key = (int)$fd; - $this->_allEvents[$fd_key][$flag] = array($func, $fd); - $this->_readFds[$fd_key] = $fd; - break; - case self::EV_WRITE: - $fd_key = (int)$fd; - $this->_allEvents[$fd_key][$flag] = array($func, $fd); - $this->_writeFds[$fd_key] = $fd; - break; - case self::EV_EXCEPT: - $fd_key = (int)$fd; - $this->_allEvents[$fd_key][$flag] = array($func, $fd); - $this->_exceptFds[$fd_key] = $fd; - break; - case self::EV_SIGNAL: - // Windows not support signal. - if(DIRECTORY_SEPARATOR !== '/') { - return false; - } - $fd_key = (int)$fd; - $this->_signalEvents[$fd_key][$flag] = array($func, $fd); - pcntl_signal($fd, array($this, 'signalHandler')); - break; - case self::EV_TIMER: - case self::EV_TIMER_ONCE: - $timer_id = $this->_timerId++; - $run_time = microtime(true) + $fd; - $this->_scheduler->insert($timer_id, -$run_time); - $this->_eventTimer[$timer_id] = array($func, (array)$args, $flag, $fd); - $select_timeout = ($run_time - microtime(true)) * 1000000; - if( $this->_selectTimeout > $select_timeout ){ - $this->_selectTimeout = $select_timeout; - } - return $timer_id; - } - - return true; - } - - /** - * Signal handler. - * - * @param int $signal - */ - public function signalHandler($signal) - { - call_user_func_array($this->_signalEvents[$signal][self::EV_SIGNAL][0], array($signal)); - } - - /** - * {@inheritdoc} - */ - public function del($fd, $flag) - { - $fd_key = (int)$fd; - switch ($flag) { - case self::EV_READ: - unset($this->_allEvents[$fd_key][$flag], $this->_readFds[$fd_key]); - if (empty($this->_allEvents[$fd_key])) { - unset($this->_allEvents[$fd_key]); - } - return true; - case self::EV_WRITE: - unset($this->_allEvents[$fd_key][$flag], $this->_writeFds[$fd_key]); - if (empty($this->_allEvents[$fd_key])) { - unset($this->_allEvents[$fd_key]); - } - return true; - case self::EV_EXCEPT: - unset($this->_allEvents[$fd_key][$flag], $this->_exceptFds[$fd_key]); - if(empty($this->_allEvents[$fd_key])) - { - unset($this->_allEvents[$fd_key]); - } - return true; - case self::EV_SIGNAL: - if(DIRECTORY_SEPARATOR !== '/') { - return false; - } - unset($this->_signalEvents[$fd_key]); - pcntl_signal($fd, SIG_IGN); - break; - case self::EV_TIMER: - case self::EV_TIMER_ONCE; - unset($this->_eventTimer[$fd_key]); - return true; - } - return false; - } - - /** - * Tick for timer. - * - * @return void - */ - protected function tick() - { - while (!$this->_scheduler->isEmpty()) { - $scheduler_data = $this->_scheduler->top(); - $timer_id = $scheduler_data['data']; - $next_run_time = -$scheduler_data['priority']; - $time_now = microtime(true); - $this->_selectTimeout = ($next_run_time - $time_now) * 1000000; - if ($this->_selectTimeout <= 0) { - $this->_scheduler->extract(); - - if (!isset($this->_eventTimer[$timer_id])) { - continue; - } - - // [func, args, flag, timer_interval] - $task_data = $this->_eventTimer[$timer_id]; - if ($task_data[2] === self::EV_TIMER) { - $next_run_time = $time_now + $task_data[3]; - $this->_scheduler->insert($timer_id, -$next_run_time); - } - call_user_func_array($task_data[0], $task_data[1]); - if (isset($this->_eventTimer[$timer_id]) && $task_data[2] === self::EV_TIMER_ONCE) { - $this->del($timer_id, self::EV_TIMER_ONCE); - } - continue; - } - return; - } - $this->_selectTimeout = 100000000; - } - - /** - * {@inheritdoc} - */ - public function clearAllTimer() - { - $this->_scheduler = new \SplPriorityQueue(); - $this->_scheduler->setExtractFlags(\SplPriorityQueue::EXTR_BOTH); - $this->_eventTimer = array(); - } - - /** - * {@inheritdoc} - */ - public function loop() - { - $e = null; - while (1) { - if(DIRECTORY_SEPARATOR === '/') { - // Calls signal handlers for pending signals - pcntl_signal_dispatch(); - } - - $read = $this->_readFds; - $write = $this->_writeFds; - $except = $this->_writeFds; - - // Waiting read/write/signal/timeout events. - $ret = @stream_select($read, $write, $except, 0, $this->_selectTimeout); - - if (!$this->_scheduler->isEmpty()) { - $this->tick(); - } - - if (!$ret) { - continue; - } - - if ($read) { - foreach ($read as $fd) { - $fd_key = (int)$fd; - if (isset($this->_allEvents[$fd_key][self::EV_READ])) { - call_user_func_array($this->_allEvents[$fd_key][self::EV_READ][0], - array($this->_allEvents[$fd_key][self::EV_READ][1])); - } - } - } - - if ($write) { - foreach ($write as $fd) { - $fd_key = (int)$fd; - if (isset($this->_allEvents[$fd_key][self::EV_WRITE])) { - call_user_func_array($this->_allEvents[$fd_key][self::EV_WRITE][0], - array($this->_allEvents[$fd_key][self::EV_WRITE][1])); - } - } - } - - if($except) { - foreach($except as $fd) { - $fd_key = (int) $fd; - if(isset($this->_allEvents[$fd_key][self::EV_EXCEPT])) { - call_user_func_array($this->_allEvents[$fd_key][self::EV_EXCEPT][0], - array($this->_allEvents[$fd_key][self::EV_EXCEPT][1])); - } - } - } - } - } - - /** - * Destroy loop. - * - * @return void - */ - public function destroy() - { - - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Lib/Constants.php b/pgserver/vendor/workerman/workerman-for-win/Lib/Constants.php deleted file mode 100644 index 2f9d3df..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Lib/Constants.php +++ /dev/null @@ -1,40 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ - -// Date.timezone -if (!ini_get('date.timezone')) { - date_default_timezone_set('Asia/Shanghai'); -} -// Display errors. -ini_set('display_errors', 'on'); -// Reporting all. -error_reporting(E_ALL); - -// Reset opcache. -if (function_exists('opcache_reset')) { - opcache_reset(); -} - -// For onError callback. -define('WORKERMAN_CONNECT_FAIL', 1); -// For onError callback. -define('WORKERMAN_SEND_FAIL', 2); - -// Compatible with php7 -if(!class_exists('Error')) -{ - class Error extends Exception - { - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Lib/Timer.php b/pgserver/vendor/workerman/workerman-for-win/Lib/Timer.php deleted file mode 100644 index 4bd4ac5..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Lib/Timer.php +++ /dev/null @@ -1,176 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Lib; - -use Workerman\Events\EventInterface; -use Exception; - -/** - * Timer. - * - * example: - * Workerman\Lib\Timer::add($time_interval, callback, array($arg1, $arg2..)); - */ -class Timer -{ - /** - * Tasks that based on ALARM signal. - * [ - * run_time => [[$func, $args, $persistent, time_interval],[$func, $args, $persistent, time_interval],..]], - * run_time => [[$func, $args, $persistent, time_interval],[$func, $args, $persistent, time_interval],..]], - * .. - * ] - * - * @var array - */ - protected static $_tasks = array(); - - /** - * event - * - * @var \Workerman\Events\EventInterface - */ - protected static $_event = null; - - /** - * Init. - * - * @param \Workerman\Events\EventInterface $event - * @return void - */ - public static function init($event = null) - { - if ($event) { - self::$_event = $event; - } else { - pcntl_signal(SIGALRM, array('\Workerman\Lib\Timer', 'signalHandle'), false); - } - } - - /** - * ALARM signal handler. - * - * @return void - */ - public static function signalHandle() - { - if (!self::$_event) { - pcntl_alarm(1); - self::tick(); - } - } - - /** - * Add a timer. - * - * @param int $time_interval - * @param callback $func - * @param mixed $args - * @param bool $persistent - * @return int/false - */ - public static function add($time_interval, $func, $args = array(), $persistent = true) - { - if ($time_interval <= 0) { - echo new Exception("bad time_interval"); - return false; - } - - if (self::$_event) { - return self::$_event->add($time_interval, - $persistent ? EventInterface::EV_TIMER : EventInterface::EV_TIMER_ONCE, $func, $args); - } - - if (!is_callable($func)) { - echo new Exception("not callable"); - return false; - } - - if (empty(self::$_tasks)) { - pcntl_alarm(1); - } - - $time_now = time(); - $run_time = $time_now + $time_interval; - if (!isset(self::$_tasks[$run_time])) { - self::$_tasks[$run_time] = array(); - } - self::$_tasks[$run_time][] = array($func, (array)$args, $persistent, $time_interval); - return 1; - } - - - /** - * Tick. - * - * @return void - */ - public static function tick() - { - if (empty(self::$_tasks)) { - pcntl_alarm(0); - return; - } - - $time_now = time(); - foreach (self::$_tasks as $run_time => $task_data) { - if ($time_now >= $run_time) { - foreach ($task_data as $index => $one_task) { - $task_func = $one_task[0]; - $task_args = $one_task[1]; - $persistent = $one_task[2]; - $time_interval = $one_task[3]; - try { - call_user_func_array($task_func, $task_args); - } catch (\Exception $e) { - echo $e; - } - if ($persistent) { - self::add($time_interval, $task_func, $task_args); - } - } - unset(self::$_tasks[$run_time]); - } - } - } - - /** - * Remove a timer. - * - * @param mixed $timer_id - * @return bool - */ - public static function del($timer_id) - { - if (self::$_event) { - return self::$_event->del($timer_id, EventInterface::EV_TIMER); - } - - return false; - } - - /** - * Remove all timers. - * - * @return void - */ - public static function delAll() - { - self::$_tasks = array(); - pcntl_alarm(0); - if (self::$_event) { - self::$_event->clearAllTimer(); - } - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/MIT-LICENSE.txt b/pgserver/vendor/workerman/workerman-for-win/MIT-LICENSE.txt deleted file mode 100644 index fd6b1c8..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/MIT-LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License - -Copyright (c) 2009-2015 walkor and contributors (see https://github.com/walkor/workerman/contributors) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/pgserver/vendor/workerman/workerman-for-win/Protocols/Frame.php b/pgserver/vendor/workerman/workerman-for-win/Protocols/Frame.php deleted file mode 100644 index 4a6b13e..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Protocols/Frame.php +++ /dev/null @@ -1,61 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Protocols; - -use Workerman\Connection\TcpConnection; - -/** - * Frame Protocol. - */ -class Frame -{ - /** - * Check the integrity of the package. - * - * @param string $buffer - * @param TcpConnection $connection - * @return int - */ - public static function input($buffer, TcpConnection $connection) - { - if (strlen($buffer) < 4) { - return 0; - } - $unpack_data = unpack('Ntotal_length', $buffer); - return $unpack_data['total_length']; - } - - /** - * Decode. - * - * @param string $buffer - * @return string - */ - public static function decode($buffer) - { - return substr($buffer, 4); - } - - /** - * Encode. - * - * @param string $buffer - * @return string - */ - public static function encode($buffer) - { - $total_length = 4 + strlen($buffer); - return pack('N', $total_length) . $buffer; - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Protocols/Http.php b/pgserver/vendor/workerman/workerman-for-win/Protocols/Http.php deleted file mode 100644 index 98add4a..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Protocols/Http.php +++ /dev/null @@ -1,585 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Protocols; - -use Workerman\Connection\TcpConnection; -use Workerman\Worker; - -/** - * http protocol - */ -class Http -{ - /** - * The supported HTTP methods - * @var array - */ - public static $methods = array('GET', 'POST', 'PUT', 'DELETE', 'HEAD', 'OPTIONS'); - - /** - * Check the integrity of the package. - * - * @param string $recv_buffer - * @param TcpConnection $connection - * @return int - */ - public static function input($recv_buffer, TcpConnection $connection) - { - if (!strpos($recv_buffer, "\r\n\r\n")) { - // Judge whether the package length exceeds the limit. - if (strlen($recv_buffer) >= TcpConnection::$maxPackageSize) { - $connection->close(); - return 0; - } - return 0; - } - - list($header,) = explode("\r\n\r\n", $recv_buffer, 2); - $method = substr($header, 0, strpos($header, ' ')); - - if(in_array($method, static::$methods)) { - return static::getRequestSize($header, $method); - }else{ - $connection->send("HTTP/1.1 400 Bad Request\r\n\r\n", true); - return 0; - } - } - - /** - * Get whole size of the request - * includes the request headers and request body. - * @param string $header The request headers - * @param string $method The request method - * @return integer - */ - protected static function getRequestSize($header, $method) - { - if($method === 'GET' || $method === 'OPTIONS' || $method === 'HEAD') { - return strlen($header) + 4; - } - $match = array(); - if (preg_match("/\r\nContent-Length: ?(\d+)/i", $header, $match)) { - $content_length = isset($match[1]) ? $match[1] : 0; - return $content_length + strlen($header) + 4; - } - return 0; - } - - /** - * Parse $_POST、$_GET、$_COOKIE. - * - * @param string $recv_buffer - * @param TcpConnection $connection - * @return array - */ - public static function decode($recv_buffer, TcpConnection $connection) - { - // Init. - $_POST = $_GET = $_COOKIE = $_REQUEST = $_SESSION = $_FILES = array(); - $GLOBALS['HTTP_RAW_POST_DATA'] = ''; - // Clear cache. - HttpCache::$header = array('Connection' => 'Connection: keep-alive'); - HttpCache::$instance = new HttpCache(); - // $_SERVER - $_SERVER = array( - 'QUERY_STRING' => '', - 'REQUEST_METHOD' => '', - 'REQUEST_URI' => '', - 'SERVER_PROTOCOL' => '', - 'SERVER_SOFTWARE' => 'workerman/'.Worker::VERSION, - 'SERVER_NAME' => '', - 'HTTP_HOST' => '', - 'HTTP_USER_AGENT' => '', - 'HTTP_ACCEPT' => '', - 'HTTP_ACCEPT_LANGUAGE' => '', - 'HTTP_ACCEPT_ENCODING' => '', - 'HTTP_COOKIE' => '', - 'HTTP_CONNECTION' => '', - 'REMOTE_ADDR' => '', - 'REMOTE_PORT' => '0', - 'REQUEST_TIME' => time() - ); - - // Parse headers. - list($http_header, $http_body) = explode("\r\n\r\n", $recv_buffer, 2); - $header_data = explode("\r\n", $http_header); - - list($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI'], $_SERVER['SERVER_PROTOCOL']) = explode(' ', - $header_data[0]); - - $http_post_boundary = ''; - unset($header_data[0]); - foreach ($header_data as $content) { - // \r\n\r\n - if (empty($content)) { - continue; - } - list($key, $value) = explode(':', $content, 2); - $key = str_replace('-', '_', strtoupper($key)); - $value = trim($value); - $_SERVER['HTTP_' . $key] = $value; - switch ($key) { - // HTTP_HOST - case 'HOST': - $tmp = explode(':', $value); - $_SERVER['SERVER_NAME'] = $tmp[0]; - if (isset($tmp[1])) { - $_SERVER['SERVER_PORT'] = $tmp[1]; - } - break; - // cookie - case 'COOKIE': - parse_str(str_replace('; ', '&', $_SERVER['HTTP_COOKIE']), $_COOKIE); - break; - // content-type - case 'CONTENT_TYPE': - if (!preg_match('/boundary="?(\S+)"?/', $value, $match)) { - if ($pos = strpos($value, ';')) { - $_SERVER['CONTENT_TYPE'] = substr($value, 0, $pos); - } else { - $_SERVER['CONTENT_TYPE'] = $value; - } - } else { - $_SERVER['CONTENT_TYPE'] = 'multipart/form-data'; - $http_post_boundary = '--' . $match[1]; - } - break; - case 'CONTENT_LENGTH': - $_SERVER['CONTENT_LENGTH'] = $value; - break; - } - } - - // Parse $_POST. - if ($_SERVER['REQUEST_METHOD'] === 'POST') { - if (isset($_SERVER['CONTENT_TYPE'])) { - switch ($_SERVER['CONTENT_TYPE']) { - case 'multipart/form-data': - self::parseUploadFiles($http_body, $http_post_boundary); - break; - case 'application/x-www-form-urlencoded': - parse_str($http_body, $_POST); - break; - } - } - } - - // HTTP_RAW_REQUEST_DATA HTTP_RAW_POST_DATA - $GLOBALS['HTTP_RAW_REQUEST_DATA'] = $GLOBALS['HTTP_RAW_POST_DATA'] = $http_body; - - // QUERY_STRING - $_SERVER['QUERY_STRING'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY); - if ($_SERVER['QUERY_STRING']) { - // $GET - parse_str($_SERVER['QUERY_STRING'], $_GET); - } else { - $_SERVER['QUERY_STRING'] = ''; - } - - // REQUEST - $_REQUEST = array_merge($_GET, $_POST); - - // REMOTE_ADDR REMOTE_PORT - $_SERVER['REMOTE_ADDR'] = $connection->getRemoteIp(); - $_SERVER['REMOTE_PORT'] = $connection->getRemotePort(); - - return array('get' => $_GET, 'post' => $_POST, 'cookie' => $_COOKIE, 'server' => $_SERVER, 'files' => $_FILES); - } - - /** - * Http encode. - * - * @param string $content - * @param TcpConnection $connection - * @return string - */ - public static function encode($content, TcpConnection $connection) - { - // Default http-code. - if (!isset(HttpCache::$header['Http-Code'])) { - $header = "HTTP/1.1 200 OK\r\n"; - } else { - $header = HttpCache::$header['Http-Code'] . "\r\n"; - unset(HttpCache::$header['Http-Code']); - } - - // Content-Type - if (!isset(HttpCache::$header['Content-Type'])) { - $header .= "Content-Type: text/html;charset=utf-8\r\n"; - } - - // other headers - foreach (HttpCache::$header as $key => $item) { - if ('Set-Cookie' === $key && is_array($item)) { - foreach ($item as $it) { - $header .= $it . "\r\n"; - } - } else { - $header .= $item . "\r\n"; - } - } - - // header - $header .= "Server: workerman/" . Worker::VERSION . "\r\nContent-Length: " . strlen($content) . "\r\n\r\n"; - - // save session - self::sessionWriteClose(); - - // the whole http package - return $header . $content; - } - - /** - * 设置http头 - * - * @return bool|void - */ - public static function header($content, $replace = true, $http_response_code = 0) - { - if (PHP_SAPI != 'cli') { - return $http_response_code ? header($content, $replace, $http_response_code) : header($content, $replace); - } - if (strpos($content, 'HTTP') === 0) { - $key = 'Http-Code'; - } else { - $key = strstr($content, ":", true); - if (empty($key)) { - return false; - } - } - - if ('location' === strtolower($key) && !$http_response_code) { - return self::header($content, true, 302); - } - - if (isset(HttpCache::$codes[$http_response_code])) { - HttpCache::$header['Http-Code'] = "HTTP/1.1 $http_response_code " . HttpCache::$codes[$http_response_code]; - if ($key === 'Http-Code') { - return true; - } - } - - if ($key === 'Set-Cookie') { - HttpCache::$header[$key][] = $content; - } else { - HttpCache::$header[$key] = $content; - } - - return true; - } - - /** - * Remove header. - * - * @param string $name - * @return void - */ - public static function headerRemove($name) - { - if (PHP_SAPI != 'cli') { - header_remove($name); - return; - } - unset(HttpCache::$header[$name]); - } - - /** - * Set cookie. - * - * @param string $name - * @param string $value - * @param integer $maxage - * @param string $path - * @param string $domain - * @param bool $secure - * @param bool $HTTPOnly - * @return bool|void - */ - public static function setcookie( - $name, - $value = '', - $maxage = 0, - $path = '', - $domain = '', - $secure = false, - $HTTPOnly = false - ) { - if (PHP_SAPI != 'cli') { - return setcookie($name, $value, $maxage, $path, $domain, $secure, $HTTPOnly); - } - return self::header( - 'Set-Cookie: ' . $name . '=' . rawurlencode($value) - . (empty($domain) ? '' : '; Domain=' . $domain) - . (empty($maxage) ? '' : '; Max-Age=' . $maxage) - . (empty($path) ? '' : '; Path=' . $path) - . (!$secure ? '' : '; Secure') - . (!$HTTPOnly ? '' : '; HttpOnly'), false); - } - - /** - * sessionStart - * - * @return bool - */ - public static function sessionStart() - { - if (PHP_SAPI != 'cli') { - return session_start(); - } - - self::tryGcSessions(); - - if (HttpCache::$instance->sessionStarted) { - echo "already sessionStarted\n"; - return true; - } - HttpCache::$instance->sessionStarted = true; - // Generate a SID. - if (!isset($_COOKIE[HttpCache::$sessionName]) || !is_file(HttpCache::$sessionPath . '/ses' . $_COOKIE[HttpCache::$sessionName])) { - $file_name = tempnam(HttpCache::$sessionPath, 'ses'); - if (!$file_name) { - return false; - } - HttpCache::$instance->sessionFile = $file_name; - $session_id = substr(basename($file_name), strlen('ses')); - return self::setcookie( - HttpCache::$sessionName - , $session_id - , ini_get('session.cookie_lifetime') - , ini_get('session.cookie_path') - , ini_get('session.cookie_domain') - , ini_get('session.cookie_secure') - , ini_get('session.cookie_httponly') - ); - } - if (!HttpCache::$instance->sessionFile) { - HttpCache::$instance->sessionFile = HttpCache::$sessionPath . '/ses' . $_COOKIE[HttpCache::$sessionName]; - } - // Read session from session file. - if (HttpCache::$instance->sessionFile) { - $raw = file_get_contents(HttpCache::$instance->sessionFile); - if ($raw) { - $_SESSION = unserialize($raw); - } - } - return true; - } - - /** - * Save session. - * - * @return bool - */ - public static function sessionWriteClose() - { - if (PHP_SAPI != 'cli') { - return session_write_close(); - } - if (!empty(HttpCache::$instance->sessionStarted) && !empty($_SESSION)) { - $session_str = serialize($_SESSION); - if ($session_str && HttpCache::$instance->sessionFile) { - return file_put_contents(HttpCache::$instance->sessionFile, $session_str); - } - } - return empty($_SESSION); - } - - /** - * End, like call exit in php-fpm. - * - * @param string $msg - * @throws \Exception - */ - public static function end($msg = '') - { - if (PHP_SAPI != 'cli') { - exit($msg); - } - if ($msg) { - echo $msg; - } - throw new \Exception('jump_exit'); - } - - /** - * Get mime types. - * - * @return string - */ - public static function getMimeTypesFile() - { - return __DIR__ . '/Http/mime.types'; - } - - /** - * Parse $_FILES. - * - * @param string $http_body - * @param string $http_post_boundary - * @return void - */ - protected static function parseUploadFiles($http_body, $http_post_boundary) - { - $http_body = substr($http_body, 0, strlen($http_body) - (strlen($http_post_boundary) + 4)); - $boundary_data_array = explode($http_post_boundary . "\r\n", $http_body); - if ($boundary_data_array[0] === '') { - unset($boundary_data_array[0]); - } - $key = -1; - foreach ($boundary_data_array as $boundary_data_buffer) { - list($boundary_header_buffer, $boundary_value) = explode("\r\n\r\n", $boundary_data_buffer, 2); - // Remove \r\n from the end of buffer. - $boundary_value = substr($boundary_value, 0, -2); - $key ++; - foreach (explode("\r\n", $boundary_header_buffer) as $item) { - list($header_key, $header_value) = explode(": ", $item); - $header_key = strtolower($header_key); - switch ($header_key) { - case "content-disposition": - // Is file data. - if (preg_match('/name="(.*?)"; filename="(.*?)"$/', $header_value, $match)) { - // Parse $_FILES. - $_FILES[$key] = array( - 'name' => $match[1], - 'file_name' => $match[2], - 'file_data' => $boundary_value, - 'file_size' => strlen($boundary_value), - ); - continue; - } // Is post field. - else { - // Parse $_POST. - if (preg_match('/name="(.*?)"$/', $header_value, $match)) { - $_POST[$match[1]] = $boundary_value; - } - } - break; - case "content-type": - // add file_type - $_FILES[$key]['file_type'] = trim($header_value); - break; - } - } - } - } - - /** - * Try GC sessions. - * - * @return void - */ - public static function tryGcSessions() - { - if (HttpCache::$sessionGcProbability <= 0 || - HttpCache::$sessionGcDivisor <= 0 || - rand(1, HttpCache::$sessionGcDivisor) > HttpCache::$sessionGcProbability) { - return; - } - - $time_now = time(); - foreach(glob(HttpCache::$sessionPath.'/ses*') as $file) { - if(is_file($file) && $time_now - filemtime($file) > HttpCache::$sessionGcMaxLifeTime) { - unlink($file); - } - } - } -} - -/** - * Http cache for the current http response. - */ -class HttpCache -{ - public static $codes = array( - 100 => 'Continue', - 101 => 'Switching Protocols', - 200 => 'OK', - 201 => 'Created', - 202 => 'Accepted', - 203 => 'Non-Authoritative Information', - 204 => 'No Content', - 205 => 'Reset Content', - 206 => 'Partial Content', - 300 => 'Multiple Choices', - 301 => 'Moved Permanently', - 302 => 'Found', - 303 => 'See Other', - 304 => 'Not Modified', - 305 => 'Use Proxy', - 306 => '(Unused)', - 307 => 'Temporary Redirect', - 400 => 'Bad Request', - 401 => 'Unauthorized', - 402 => 'Payment Required', - 403 => 'Forbidden', - 404 => 'Not Found', - 405 => 'Method Not Allowed', - 406 => 'Not Acceptable', - 407 => 'Proxy Authentication Required', - 408 => 'Request Timeout', - 409 => 'Conflict', - 410 => 'Gone', - 411 => 'Length Required', - 412 => 'Precondition Failed', - 413 => 'Request Entity Too Large', - 414 => 'Request-URI Too Long', - 415 => 'Unsupported Media Type', - 416 => 'Requested Range Not Satisfiable', - 417 => 'Expectation Failed', - 422 => 'Unprocessable Entity', - 423 => 'Locked', - 500 => 'Internal Server Error', - 501 => 'Not Implemented', - 502 => 'Bad Gateway', - 503 => 'Service Unavailable', - 504 => 'Gateway Timeout', - 505 => 'HTTP Version Not Supported', - ); - - /** - * @var HttpCache - */ - public static $instance = null; - public static $header = array(); - public static $sessionPath = ''; - public static $sessionName = ''; - public static $sessionGcProbability = 1; - public static $sessionGcDivisor = 1000; - public static $sessionGcMaxLifeTime = 1440; - public $sessionStarted = false; - public $sessionFile = ''; - - public static function init() - { - self::$sessionName = ini_get('session.name'); - self::$sessionPath = @session_save_path(); - if (!self::$sessionPath || strpos(self::$sessionPath, 'tcp://') === 0) { - self::$sessionPath = sys_get_temp_dir(); - } - - if ($gc_probability = ini_get('session.gc_probability')) { - self::$sessionGcProbability = $gc_probability; - } - - if ($gc_divisor = ini_get('session.gc_divisor')) { - self::$sessionGcDivisor = $gc_divisor; - } - - if ($gc_max_life_time = ini_get('session.gc_maxlifetime')) { - self::$sessionGcMaxLifeTime = $gc_max_life_time; - } - } -} - -HttpCache::init(); diff --git a/pgserver/vendor/workerman/workerman-for-win/Protocols/Http/mime.types b/pgserver/vendor/workerman/workerman-for-win/Protocols/Http/mime.types deleted file mode 100644 index 8a218b2..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Protocols/Http/mime.types +++ /dev/null @@ -1,80 +0,0 @@ - -types { - text/html html htm shtml; - text/css css; - text/xml xml; - image/gif gif; - image/jpeg jpeg jpg; - application/x-javascript js; - application/atom+xml atom; - application/rss+xml rss; - - text/mathml mml; - text/plain txt; - text/vnd.sun.j2me.app-descriptor jad; - text/vnd.wap.wml wml; - text/x-component htc; - - image/png png; - image/tiff tif tiff; - image/vnd.wap.wbmp wbmp; - image/x-icon ico; - image/x-jng jng; - image/x-ms-bmp bmp; - image/svg+xml svg svgz; - image/webp webp; - - application/java-archive jar war ear; - application/mac-binhex40 hqx; - application/msword doc; - application/pdf pdf; - application/postscript ps eps ai; - application/rtf rtf; - application/vnd.ms-excel xls; - application/vnd.ms-powerpoint ppt; - application/vnd.wap.wmlc wmlc; - application/vnd.google-earth.kml+xml kml; - application/vnd.google-earth.kmz kmz; - application/x-7z-compressed 7z; - application/x-cocoa cco; - application/x-java-archive-diff jardiff; - application/x-java-jnlp-file jnlp; - application/x-makeself run; - application/x-perl pl pm; - application/x-pilot prc pdb; - application/x-rar-compressed rar; - application/x-redhat-package-manager rpm; - application/x-sea sea; - application/x-shockwave-flash swf; - application/x-stuffit sit; - application/x-tcl tcl tk; - application/x-x509-ca-cert der pem crt; - application/x-xpinstall xpi; - application/xhtml+xml xhtml; - application/zip zip; - - application/octet-stream bin exe dll; - application/octet-stream deb; - application/octet-stream dmg; - application/octet-stream eot; - application/octet-stream iso img; - application/octet-stream msi msp msm; - - audio/midi mid midi kar; - audio/mpeg mp3; - audio/ogg ogg; - audio/x-m4a m4a; - audio/x-realaudio ra; - - video/3gpp 3gpp 3gp; - video/mp4 mp4; - video/mpeg mpeg mpg; - video/quicktime mov; - video/webm webm; - video/x-flv flv; - video/x-m4v m4v; - video/x-mng mng; - video/x-ms-asf asx asf; - video/x-ms-wmv wmv; - video/x-msvideo avi; -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Protocols/ProtocolInterface.php b/pgserver/vendor/workerman/workerman-for-win/Protocols/ProtocolInterface.php deleted file mode 100644 index 9afe984..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Protocols/ProtocolInterface.php +++ /dev/null @@ -1,52 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Protocols; - -use Workerman\Connection\ConnectionInterface; - -/** - * Protocol interface - */ -interface ProtocolInterface -{ - /** - * Check the integrity of the package. - * Please return the length of package. - * If length is unknow please return 0 that mean wating more data. - * If the package has something wrong please return false the connection will be closed. - * - * @param ConnectionInterface $connection - * @param string $recv_buffer - * @return int|false - */ - public static function input($recv_buffer, ConnectionInterface $connection); - - /** - * Decode package and emit onMessage($message) callback, $message is the result that decode returned. - * - * @param ConnectionInterface $connection - * @param string $recv_buffer - * @return mixed - */ - public static function decode($recv_buffer, ConnectionInterface $connection); - - /** - * Encode package brefore sending to client. - * - * @param ConnectionInterface $connection - * @param mixed $data - * @return string - */ - public static function encode($data, ConnectionInterface $connection); -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Protocols/Text.php b/pgserver/vendor/workerman/workerman-for-win/Protocols/Text.php deleted file mode 100644 index 189baf4..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Protocols/Text.php +++ /dev/null @@ -1,70 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Protocols; - -use Workerman\Connection\TcpConnection; - -/** - * Text Protocol. - */ -class Text -{ - /** - * Check the integrity of the package. - * - * @param string $buffer - * @param TcpConnection $connection - * @return int - */ - public static function input($buffer, TcpConnection $connection) - { - // Judge whether the package length exceeds the limit. - if (strlen($buffer) >= TcpConnection::$maxPackageSize) { - $connection->close(); - return 0; - } - // Find the position of "\n". - $pos = strpos($buffer, "\n"); - // No "\n", packet length is unknown, continue to wait for the data so return 0. - if ($pos === false) { - return 0; - } - // Return the current package length. - return $pos + 1; - } - - /** - * Encode. - * - * @param string $buffer - * @return string - */ - public static function encode($buffer) - { - // Add "\n" - return $buffer . "\n"; - } - - /** - * Decode. - * - * @param string $buffer - * @return string - */ - public static function decode($buffer) - { - // Remove "\n" - return trim($buffer); - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Protocols/Websocket.php b/pgserver/vendor/workerman/workerman-for-win/Protocols/Websocket.php deleted file mode 100644 index 2ab5635..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Protocols/Websocket.php +++ /dev/null @@ -1,473 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Protocols; - -use Workerman\Connection\ConnectionInterface; -use Workerman\Connection\TcpConnection; -use Workerman\Worker; - -/** - * WebSocket protocol. - */ -class Websocket implements \Workerman\Protocols\ProtocolInterface -{ - /** - * Websocket blob type. - * - * @var string - */ - const BINARY_TYPE_BLOB = "\x81"; - - /** - * Websocket arraybuffer type. - * - * @var string - */ - const BINARY_TYPE_ARRAYBUFFER = "\x82"; - - /** - * Check the integrity of the package. - * - * @param string $buffer - * @param ConnectionInterface $connection - * @return int - */ - public static function input($buffer, ConnectionInterface $connection) - { - // Receive length. - $recv_len = strlen($buffer); - // We need more data. - if ($recv_len < 2) { - return 0; - } - - // Has not yet completed the handshake. - if (empty($connection->websocketHandshake)) { - return static::dealHandshake($buffer, $connection); - } - - // Buffer websocket frame data. - if ($connection->websocketCurrentFrameLength) { - // We need more frame data. - if ($connection->websocketCurrentFrameLength > $recv_len) { - // Return 0, because it is not clear the full packet length, waiting for the frame of fin=1. - return 0; - } - } else { - $firstbyte = ord($buffer[0]); - $secondbyte = ord($buffer[1]); - $data_len = $secondbyte & 127; - $is_fin_frame = $firstbyte >> 7; - $masked = $secondbyte >> 7; - $opcode = $firstbyte & 0xf; - switch ($opcode) { - case 0x0: - break; - // Blob type. - case 0x1: - break; - // Arraybuffer type. - case 0x2: - break; - // Close package. - case 0x8: - // Try to emit onWebSocketClose callback. - if (isset($connection->onWebSocketClose)) { - try { - call_user_func($connection->onWebSocketClose, $connection); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } // Close connection. - else { - $connection->close(); - } - return 0; - // Ping package. - case 0x9: - // Try to emit onWebSocketPing callback. - if (isset($connection->onWebSocketPing)) { - try { - call_user_func($connection->onWebSocketPing, $connection); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } // Send pong package to client. - else { - $connection->send(pack('H*', '8a00'), true); - } - - // Consume data from receive buffer. - if (!$data_len) { - $head_len = $masked ? 6 : 2; - $connection->consumeRecvBuffer($head_len); - if ($recv_len > $head_len) { - return static::input(substr($buffer, $head_len), $connection); - } - return 0; - } - break; - // Pong package. - case 0xa: - // Try to emit onWebSocketPong callback. - if (isset($connection->onWebSocketPong)) { - try { - call_user_func($connection->onWebSocketPong, $connection); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - // Consume data from receive buffer. - if (!$data_len) { - $head_len = $masked ? 6 : 2; - $connection->consumeRecvBuffer($head_len); - if ($recv_len > $head_len) { - return static::input(substr($buffer, $head_len), $connection); - } - return 0; - } - break; - // Wrong opcode. - default : - echo "error opcode $opcode and close websocket connection. Buffer:" . bin2hex($buffer) . "\n"; - $connection->close(); - return 0; - } - - // Calculate packet length. - $head_len = 6; - if ($data_len === 126) { - $head_len = 8; - if ($head_len > $recv_len) { - return 0; - } - $pack = unpack('nn/ntotal_len', $buffer); - $data_len = $pack['total_len']; - } else { - if ($data_len === 127) { - $head_len = 14; - if ($head_len > $recv_len) { - return 0; - } - $arr = unpack('n/N2c', $buffer); - $data_len = $arr['c1']*4294967296 + $arr['c2']; - } - } - $current_frame_length = $head_len + $data_len; - - $total_package_size = strlen($connection->websocketDataBuffer) + $current_frame_length; - if ($total_package_size > TcpConnection::$maxPackageSize) { - echo "error package. package_length=$total_package_size\n"; - $connection->close(); - return 0; - } - - if ($is_fin_frame) { - return $current_frame_length; - } else { - $connection->websocketCurrentFrameLength = $current_frame_length; - } - } - - // Received just a frame length data. - if ($connection->websocketCurrentFrameLength === $recv_len) { - static::decode($buffer, $connection); - $connection->consumeRecvBuffer($connection->websocketCurrentFrameLength); - $connection->websocketCurrentFrameLength = 0; - return 0; - } // The length of the received data is greater than the length of a frame. - elseif ($connection->websocketCurrentFrameLength < $recv_len) { - static::decode(substr($buffer, 0, $connection->websocketCurrentFrameLength), $connection); - $connection->consumeRecvBuffer($connection->websocketCurrentFrameLength); - $current_frame_length = $connection->websocketCurrentFrameLength; - $connection->websocketCurrentFrameLength = 0; - // Continue to read next frame. - return static::input(substr($buffer, $current_frame_length), $connection); - } // The length of the received data is less than the length of a frame. - else { - return 0; - } - } - - /** - * Websocket encode. - * - * @param string $buffer - * @param ConnectionInterface $connection - * @return string - */ - public static function encode($buffer, ConnectionInterface $connection) - { - if (!is_scalar($buffer)) { - throw new \Exception("You can't send(" . gettype($buffer) . ") to client, you need to convert it to a string. "); - } - $len = strlen($buffer); - if (empty($connection->websocketType)) { - $connection->websocketType = static::BINARY_TYPE_BLOB; - } - - $first_byte = $connection->websocketType; - - if ($len <= 125) { - $encode_buffer = $first_byte . chr($len) . $buffer; - } else { - if ($len <= 65535) { - $encode_buffer = $first_byte . chr(126) . pack("n", $len) . $buffer; - } else { - $encode_buffer = $first_byte . chr(127) . pack("xxxxN", $len) . $buffer; - } - } - - // Handshake not completed so temporary buffer websocket data waiting for send. - if (empty($connection->websocketHandshake)) { - if (empty($connection->tmpWebsocketData)) { - $connection->tmpWebsocketData = ''; - } - // If buffer has already full then discard the current package. - if (strlen($connection->tmpWebsocketData) > $connection->maxSendBufferSize) { - if ($connection->onError) { - try { - call_user_func($connection->onError, $connection, WORKERMAN_SEND_FAIL, 'send buffer full and drop package'); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - return ''; - } - $connection->tmpWebsocketData .= $encode_buffer; - // Check buffer is full. - if ($connection->maxSendBufferSize <= strlen($connection->tmpWebsocketData)) { - if ($connection->onBufferFull) { - try { - call_user_func($connection->onBufferFull, $connection); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - } - - // Return empty string. - return ''; - } - - return $encode_buffer; - } - - /** - * Websocket decode. - * - * @param string $buffer - * @param ConnectionInterface $connection - * @return string - */ - public static function decode($buffer, ConnectionInterface $connection) - { - $masks = $data = $decoded = null; - $len = ord($buffer[1]) & 127; - if ($len === 126) { - $masks = substr($buffer, 4, 4); - $data = substr($buffer, 8); - } else { - if ($len === 127) { - $masks = substr($buffer, 10, 4); - $data = substr($buffer, 14); - } else { - $masks = substr($buffer, 2, 4); - $data = substr($buffer, 6); - } - } - for ($index = 0; $index < strlen($data); $index++) { - $decoded .= $data[$index] ^ $masks[$index % 4]; - } - if ($connection->websocketCurrentFrameLength) { - $connection->websocketDataBuffer .= $decoded; - return $connection->websocketDataBuffer; - } else { - if ($connection->websocketDataBuffer !== '') { - $decoded = $connection->websocketDataBuffer . $decoded; - $connection->websocketDataBuffer = ''; - } - return $decoded; - } - } - - /** - * Websocket handshake. - * - * @param string $buffer - * @param \Workerman\Connection\TcpConnection $connection - * @return int - */ - protected static function dealHandshake($buffer, $connection) - { - // HTTP protocol. - if (0 === strpos($buffer, 'GET')) { - // Find \r\n\r\n. - $heder_end_pos = strpos($buffer, "\r\n\r\n"); - if (!$heder_end_pos) { - return 0; - } - $header_length = $heder_end_pos + 4; - - // Get Sec-WebSocket-Key. - $Sec_WebSocket_Key = ''; - if (preg_match("/Sec-WebSocket-Key: *(.*?)\r\n/i", $buffer, $match)) { - $Sec_WebSocket_Key = $match[1]; - } else { - $connection->send("HTTP/1.1 400 Bad Request\r\n\r\n400 Bad Request
Sec-WebSocket-Key not found.
This is a WebSocket service and can not be accessed via HTTP.
See http://wiki.workerman.net/Error1 for detail.", - true); - $connection->close(); - return 0; - } - // Calculation websocket key. - $new_key = base64_encode(sha1($Sec_WebSocket_Key . "258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true)); - // Handshake response data. - $handshake_message = "HTTP/1.1 101 Switching Protocols\r\n"; - $handshake_message .= "Upgrade: websocket\r\n"; - $handshake_message .= "Sec-WebSocket-Version: 13\r\n"; - $handshake_message .= "Connection: Upgrade\r\n"; - $handshake_message .= "Server: workerman/".Worker::VERSION."\r\n"; - $handshake_message .= "Sec-WebSocket-Accept: " . $new_key . "\r\n\r\n"; - // Mark handshake complete.. - $connection->websocketHandshake = true; - // Websocket data buffer. - $connection->websocketDataBuffer = ''; - // Current websocket frame length. - $connection->websocketCurrentFrameLength = 0; - // Current websocket frame data. - $connection->websocketCurrentFrameBuffer = ''; - // Consume handshake data. - $connection->consumeRecvBuffer($header_length); - // Send handshake response. - $connection->send($handshake_message, true); - - // There are data waiting to be sent. - if (!empty($connection->tmpWebsocketData)) { - $connection->send($connection->tmpWebsocketData, true); - $connection->tmpWebsocketData = ''; - } - // blob or arraybuffer - if (empty($connection->websocketType)) { - $connection->websocketType = static::BINARY_TYPE_BLOB; - } - // Try to emit onWebSocketConnect callback. - if (isset($connection->onWebSocketConnect)) { - static::parseHttpHeader($buffer); - try { - call_user_func($connection->onWebSocketConnect, $connection, $buffer); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - if (!empty($_SESSION) && class_exists('\GatewayWorker\Lib\Context')) { - $connection->session = \GatewayWorker\Lib\Context::sessionEncode($_SESSION); - } - $_GET = $_SERVER = $_SESSION = $_COOKIE = array(); - } - if (strlen($buffer) > $header_length) { - return static::input(substr($buffer, $header_length), $connection); - } - return 0; - } // Is flash policy-file-request. - elseif (0 === strpos($buffer, 'send($policy_xml, true); - $connection->consumeRecvBuffer(strlen($buffer)); - return 0; - } - // Bad websocket handshake request. - $connection->send("HTTP/1.1 400 Bad Request\r\n\r\n400 Bad Request
Invalid handshake data for websocket.
See http://wiki.workerman.net/Error1 for detail.", - true); - $connection->close(); - return 0; - } - - /** - * Parse http header. - * - * @param string $buffer - * @return void - */ - protected static function parseHttpHeader($buffer) - { - // Parse headers. - list($http_header, ) = explode("\r\n\r\n", $buffer, 2); - $header_data = explode("\r\n", $http_header); - - if ($_SERVER) { - $_SERVER = array(); - } - - list($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI'], $_SERVER['SERVER_PROTOCOL']) = explode(' ', - $header_data[0]); - - unset($header_data[0]); - foreach ($header_data as $content) { - // \r\n\r\n - if (empty($content)) { - continue; - } - list($key, $value) = explode(':', $content, 2); - $key = str_replace('-', '_', strtoupper($key)); - $value = trim($value); - $_SERVER['HTTP_' . $key] = $value; - switch ($key) { - // HTTP_HOST - case 'HOST': - $tmp = explode(':', $value); - $_SERVER['SERVER_NAME'] = $tmp[0]; - if (isset($tmp[1])) { - $_SERVER['SERVER_PORT'] = $tmp[1]; - } - break; - // cookie - case 'COOKIE': - parse_str(str_replace('; ', '&', $_SERVER['HTTP_COOKIE']), $_COOKIE); - break; - } - } - - // QUERY_STRING - $_SERVER['QUERY_STRING'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY); - if ($_SERVER['QUERY_STRING']) { - // $GET - parse_str($_SERVER['QUERY_STRING'], $_GET); - } else { - $_SERVER['QUERY_STRING'] = ''; - } - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Protocols/Ws.php b/pgserver/vendor/workerman/workerman-for-win/Protocols/Ws.php deleted file mode 100644 index a3a0193..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Protocols/Ws.php +++ /dev/null @@ -1,433 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman\Protocols; - -use Workerman\Worker; -use Workerman\Lib\Timer; -use Workerman\Connection\TcpConnection; - -/** - * Websocket protocol for client. - */ -class Ws -{ - /** - * Websocket blob type. - * - * @var string - */ - const BINARY_TYPE_BLOB = "\x81"; - - /** - * Websocket arraybuffer type. - * - * @var string - */ - const BINARY_TYPE_ARRAYBUFFER = "\x82"; - - /** - * Check the integrity of the package. - * - * @param string $buffer - * @param ConnectionInterface $connection - * @return int - */ - public static function input($buffer, $connection) - { - if (empty($connection->handshakeStep)) { - echo "recv data before handshake. Buffer:" . bin2hex($buffer) . "\n"; - return false; - } - // Recv handshake response - if ($connection->handshakeStep === 1) { - return self::dealHandshake($buffer, $connection); - } - $recv_len = strlen($buffer); - if ($recv_len < 2) { - return 0; - } - // Buffer websocket frame data. - if ($connection->websocketCurrentFrameLength) { - // We need more frame data. - if ($connection->websocketCurrentFrameLength > $recv_len) { - // Return 0, because it is not clear the full packet length, waiting for the frame of fin=1. - return 0; - } - } else { - - $firstbyte = ord($buffer[0]); - $secondbyte = ord($buffer[1]); - $data_len = $secondbyte & 127; - $is_fin_frame = $firstbyte >> 7; - $masked = $secondbyte >> 7; - $opcode = $firstbyte & 0xf; - - switch ($opcode) { - case 0x0: - break; - // Blob type. - case 0x1: - break; - // Arraybuffer type. - case 0x2: - break; - // Close package. - case 0x8: - // Try to emit onWebSocketClose callback. - if (isset($connection->onWebSocketClose)) { - try { - call_user_func($connection->onWebSocketClose, $connection); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } // Close connection. - else { - $connection->close(); - } - return 0; - // Ping package. - case 0x9: - // Try to emit onWebSocketPing callback. - if (isset($connection->onWebSocketPing)) { - try { - call_user_func($connection->onWebSocketPing, $connection); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } // Send pong package to client. - else { - $connection->send(pack('H*', '8a00'), true); - } - // Consume data from receive buffer. - if (!$data_len) { - $head_len = $masked ? 6 : 2; - $connection->consumeRecvBuffer($head_len); - if ($recv_len > $head_len) { - return self::input(substr($buffer, $head_len), $connection); - } - return 0; - } - break; - // Pong package. - case 0xa: - // Try to emit onWebSocketPong callback. - if (isset($connection->onWebSocketPong)) { - try { - call_user_func($connection->onWebSocketPong, $connection); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - // Consume data from receive buffer. - if (!$data_len) { - $head_len = $masked ? 6 : 2; - $connection->consumeRecvBuffer($head_len); - if ($recv_len > $head_len) { - return self::input(substr($buffer, $head_len), $connection); - } - return 0; - } - break; - // Wrong opcode. - default : - echo "error opcode $opcode and close websocket connection. Buffer:" . $buffer . "\n"; - $connection->close(); - return 0; - } - // Calculate packet length. - if ($data_len === 126) { - if (strlen($buffer) < 6) { - return 0; - } - $pack = unpack('nn/ntotal_len', $buffer); - $current_frame_length = $pack['total_len'] + 4; - } else if ($data_len === 127) { - if (strlen($buffer) < 10) { - return 0; - } - $arr = unpack('n/N2c', $buffer); - $current_frame_length = $arr['c1']*4294967296 + $arr['c2'] + 10; - } else { - $current_frame_length = $data_len + 2; - } - - $total_package_size = strlen($connection->websocketDataBuffer) + $current_frame_length; - if ($total_package_size > TcpConnection::$maxPackageSize) { - echo "error package. package_length=$total_package_size\n"; - $connection->close(); - return 0; - } - - if ($is_fin_frame) { - return $current_frame_length; - } else { - $connection->websocketCurrentFrameLength = $current_frame_length; - } - } - // Received just a frame length data. - if ($connection->websocketCurrentFrameLength === $recv_len) { - self::decode($buffer, $connection); - $connection->consumeRecvBuffer($connection->websocketCurrentFrameLength); - $connection->websocketCurrentFrameLength = 0; - return 0; - } // The length of the received data is greater than the length of a frame. - elseif ($connection->websocketCurrentFrameLength < $recv_len) { - self::decode(substr($buffer, 0, $connection->websocketCurrentFrameLength), $connection); - $connection->consumeRecvBuffer($connection->websocketCurrentFrameLength); - $current_frame_length = $connection->websocketCurrentFrameLength; - $connection->websocketCurrentFrameLength = 0; - // Continue to read next frame. - return self::input(substr($buffer, $current_frame_length), $connection); - } // The length of the received data is less than the length of a frame. - else { - return 0; - } - } - - /** - * Websocket encode. - * - * @param string $buffer - * @param ConnectionInterface $connection - * @return string - */ - public static function encode($payload, $connection) - { - if (empty($connection->websocketType)) { - $connection->websocketType = self::BINARY_TYPE_BLOB; - } - $payload = (string)$payload; - if (empty($connection->handshakeStep)) { - self::sendHandshake($connection); - } - $mask = 1; - $mask_key = "\x00\x00\x00\x00"; - - $pack = ''; - $length = $length_flag = strlen($payload); - if (65535 < $length) { - $pack = pack('NN', ($length & 0xFFFFFFFF00000000) >> 32, $length & 0x00000000FFFFFFFF); - $length_flag = 127; - } else if (125 < $length) { - $pack = pack('n*', $length); - $length_flag = 126; - } - - $head = ($mask << 7) | $length_flag; - $head = $connection->websocketType . chr($head) . $pack; - - $frame = $head . $mask_key; - // append payload to frame: - for ($i = 0; $i < $length; $i++) { - $frame .= $payload[$i] ^ $mask_key[$i % 4]; - } - if ($connection->handshakeStep === 1) { - // If buffer has already full then discard the current package. - if (strlen($connection->tmpWebsocketData) > $connection->maxSendBufferSize) { - if ($connection->onError) { - try { - call_user_func($connection->onError, $connection, WORKERMAN_SEND_FAIL, 'send buffer full and drop package'); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - return ''; - } - $connection->tmpWebsocketData = $connection->tmpWebsocketData . $frame; - // Check buffer is full. - if ($connection->maxSendBufferSize <= strlen($connection->tmpWebsocketData)) { - if ($connection->onBufferFull) { - try { - call_user_func($connection->onBufferFull, $connection); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - } - return ''; - } - return $frame; - } - - /** - * Websocket decode. - * - * @param string $buffer - * @param ConnectionInterface $connection - * @return string - */ - public static function decode($bytes, $connection) - { - $masked = ord($bytes[1]) >> 7; - $data_length = $masked ? ord($bytes[1]) & 127 : ord($bytes[1]); - $decoded_data = ''; - if ($masked === true) { - if ($data_length === 126) { - $mask = substr($bytes, 4, 4); - $coded_data = substr($bytes, 8); - } else if ($data_length === 127) { - $mask = substr($bytes, 10, 4); - $coded_data = substr($bytes, 14); - } else { - $mask = substr($bytes, 2, 4); - $coded_data = substr($bytes, 6); - } - for ($i = 0; $i < strlen($coded_data); $i++) { - $decoded_data .= $coded_data[$i] ^ $mask[$i % 4]; - } - } else { - if ($data_length === 126) { - $decoded_data = substr($bytes, 4); - } else if ($data_length === 127) { - $decoded_data = substr($bytes, 10); - } else { - $decoded_data = substr($bytes, 2); - } - } - if ($connection->websocketCurrentFrameLength) { - $connection->websocketDataBuffer .= $decoded_data; - return $connection->websocketDataBuffer; - } else { - if ($connection->websocketDataBuffer !== '') { - $decoded_data = $connection->websocketDataBuffer . $decoded_data; - $connection->websocketDataBuffer = ''; - } - return $decoded_data; - } - } - - /** - * Send websocket handshake data. - * - * @return void - */ - public static function onConnect($connection) - { - self::sendHandshake($connection); - } - - /** - * Clean - * - * @param $connection - */ - public static function onClose($connection) - { - $connection->handshakeStep = null; - $connection->websocketCurrentFrameLength = 0; - $connection->tmpWebsocketData = ''; - $connection->websocketDataBuffer = ''; - if (!empty($connection->websocketPingTimer)) { - Timer::del($connection->websocketPingTimer); - $connection->websocketPingTimer = null; - } - } - - /** - * Send websocket handshake. - * - * @param \Workerman\Connection\TcpConnection $connection - * @return void - */ - public static function sendHandshake($connection) - { - if (!empty($connection->handshakeStep)) { - return; - } - // Get Host. - $port = $connection->getRemotePort(); - $host = $port === 80 ? $connection->getRemoteHost() : $connection->getRemoteHost() . ':' . $port; - // Handshake header. - $header = 'GET ' . $connection->getRemoteURI() . " HTTP/1.1\r\n". - "Host: $host\r\n". - "Connection: Upgrade\r\n". - "Upgrade: websocket\r\n". - "Origin: ". (isset($connection->websocketOrigin) ? $connection->websocketOrigin : '*') ."\r\n". - "Sec-WebSocket-Version: 13\r\n". - "Sec-WebSocket-Key: " . base64_encode(md5(mt_rand(), true)) . "\r\n\r\n"; - $connection->send($header, true); - $connection->handshakeStep = 1; - $connection->websocketCurrentFrameLength = 0; - $connection->websocketDataBuffer = ''; - $connection->tmpWebsocketData = ''; - } - - /** - * Websocket handshake. - * - * @param string $buffer - * @param \Workerman\Connection\TcpConnection $connection - * @return int - */ - public static function dealHandshake($buffer, $connection) - { - $pos = strpos($buffer, "\r\n\r\n"); - if ($pos) { - // handshake complete - $connection->handshakeStep = 2; - $handshake_response_length = $pos + 4; - // Try to emit onWebSocketConnect callback. - if (isset($connection->onWebSocketConnect)) { - try { - call_user_func($connection->onWebSocketConnect, $connection, substr($buffer, 0, $handshake_response_length)); - } catch (\Exception $e) { - Worker::log($e); - exit(250); - } catch (\Error $e) { - Worker::log($e); - exit(250); - } - } - // Headbeat. - if (!empty($connection->websocketPingInterval)) { - $connection->websocketPingTimer = Timer::add($connection->websocketPingInterval, function() use ($connection){ - if (false === $connection->send(pack('H*', '8900'), true)) { - Timer::del($connection->websocketPingTimer); - $connection->websocketPingTimer = null; - } - }); - } - - $connection->consumeRecvBuffer($handshake_response_length); - if (!empty($connection->tmpWebsocketData)) { - $connection->send($connection->tmpWebsocketData, true); - $connection->tmpWebsocketData = ''; - } - if (strlen($buffer) > $handshake_response_length) { - return self::input(substr($buffer, $handshake_response_length), $connection); - } - } - return 0; - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/README.md b/pgserver/vendor/workerman/workerman-for-win/README.md deleted file mode 100644 index 3f80382..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# workerman-for-win -workerman-for-win - -## 环境要求 -(php>=5.3.3) - -## 运行 -运行一个文件 -php your_file.php - -同时运行多个文件 -php your_file.php your_file2.php ... - -## 与Linux多进程版本的区别 -1、单进程,也就是说count属性无效 -2、由于php在win下无法fork进程,Applications/YourApp/start.php被拆成多个子启动项,如start_web.php start_gateway.php等,每个文件自动启动一个进程运行 -3、由于php在win下不支持信号,所以无法使用reload、status、restart、stop命令,也没有start命令 - -## 手册 -开发与Linux版本基本无差别,可以直接参考Linux版本手册 -http://doc3.workerman.net/ - -## 说明 -此版本可用于windows下开发使用,不建议用在生产环境 - -## 移植 -### windows到Linux(需要Linux的Workerman版本3.1.0及以上) -可以直接将Applications下的应用目录拷贝到Linux版本的Applications下直接运行 - -### Linux到windows -Linux下的应用需要将Applications/YourApp/start.php拆成多个启动项 - diff --git a/pgserver/vendor/workerman/workerman-for-win/WebServer.php b/pgserver/vendor/workerman/workerman-for-win/WebServer.php deleted file mode 100644 index afa412a..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/WebServer.php +++ /dev/null @@ -1,301 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman; - -use Workerman\Protocols\Http; -use Workerman\Protocols\HttpCache; - -/** - * WebServer. - */ -class WebServer extends Worker -{ - /** - * Virtual host to path mapping. - * - * @var array ['workerman.net'=>'/home', 'www.workerman.net'=>'home/www'] - */ - protected $serverRoot = array(); - - /** - * Mime mapping. - * - * @var array - */ - protected static $mimeTypeMap = array(); - - - /** - * Used to save user OnWorkerStart callback settings. - * - * @var callback - */ - protected $_onWorkerStart = null; - - /** - * Add virtual host. - * - * @param string $domain - * @param string $root_path - * @return void - */ - public function addRoot($domain, $root_path) - { - $this->serverRoot[$domain] = $root_path; - } - - /** - * Construct. - * - * @param string $socket_name - * @param array $context_option - */ - public function __construct($socket_name, $context_option = array()) - { - list(, $address) = explode(':', $socket_name, 2); - parent::__construct('http:' . $address, $context_option); - $this->name = 'WebServer'; - } - - /** - * Run webserver instance. - * - * @see Workerman.Worker::run() - */ - public function run() - { - $this->_onWorkerStart = $this->onWorkerStart; - $this->onWorkerStart = array($this, 'onWorkerStart'); - $this->onMessage = array($this, 'onMessage'); - parent::run(); - } - - /** - * Emit when process start. - * - * @throws \Exception - */ - public function onWorkerStart() - { - if (empty($this->serverRoot)) { - echo new \Exception('server root not set, please use WebServer::addRoot($domain, $root_path) to set server root path'); - exit(250); - } - - // Init mimeMap. - $this->initMimeTypeMap(); - - // Try to emit onWorkerStart callback. - if ($this->_onWorkerStart) { - try { - call_user_func($this->_onWorkerStart, $this); - } catch (\Exception $e) { - self::log($e); - exit(250); - } catch (\Error $e) { - self::log($e); - exit(250); - } - } - } - - /** - * Init mime map. - * - * @return void - */ - public function initMimeTypeMap() - { - $mime_file = Http::getMimeTypesFile(); - if (!is_file($mime_file)) { - $this->log("$mime_file mime.type file not fond"); - return; - } - $items = file($mime_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); - if (!is_array($items)) { - $this->log("get $mime_file mime.type content fail"); - return; - } - foreach ($items as $content) { - if (preg_match("/\s*(\S+)\s+(\S.+)/", $content, $match)) { - $mime_type = $match[1]; - $workerman_file_extension_var = $match[2]; - $workerman_file_extension_array = explode(' ', substr($workerman_file_extension_var, 0, -1)); - foreach ($workerman_file_extension_array as $workerman_file_extension) { - self::$mimeTypeMap[$workerman_file_extension] = $mime_type; - } - } - } - } - - /** - * Emit when http message coming. - * - * @param Connection\TcpConnection $connection - * @return void - */ - public function onMessage($connection) - { - // REQUEST_URI. - $workerman_url_info = parse_url($_SERVER['REQUEST_URI']); - if (!$workerman_url_info) { - Http::header('HTTP/1.1 400 Bad Request'); - $connection->close('

400 Bad Request

'); - return; - } - - $workerman_path = isset($workerman_url_info['path']) ? $workerman_url_info['path'] : '/'; - - $workerman_path_info = pathinfo($workerman_path); - $workerman_file_extension = isset($workerman_path_info['extension']) ? $workerman_path_info['extension'] : ''; - if ($workerman_file_extension === '') { - $workerman_path = ($len = strlen($workerman_path)) && $workerman_path[$len - 1] === '/' ? $workerman_path . 'index.php' : $workerman_path . '/index.php'; - $workerman_file_extension = 'php'; - } - - $workerman_root_dir = isset($this->serverRoot[$_SERVER['SERVER_NAME']]) ? $this->serverRoot[$_SERVER['SERVER_NAME']] : current($this->serverRoot); - - $workerman_file = "$workerman_root_dir/$workerman_path"; - - if ($workerman_file_extension === 'php' && !is_file($workerman_file)) { - $workerman_file = "$workerman_root_dir/index.php"; - if (!is_file($workerman_file)) { - $workerman_file = "$workerman_root_dir/index.html"; - $workerman_file_extension = 'html'; - } - } - - // File exsits. - if (is_file($workerman_file)) { - // Security check. - if ((!($workerman_request_realpath = realpath($workerman_file)) || !($workerman_root_dir_realpath = realpath($workerman_root_dir))) || 0 !== strpos($workerman_request_realpath, - $workerman_root_dir_realpath) - ) { - Http::header('HTTP/1.1 400 Bad Request'); - $connection->close('

400 Bad Request

'); - return; - } - - $workerman_file = realpath($workerman_file); - - // Request php file. - if ($workerman_file_extension === 'php') { - $workerman_cwd = getcwd(); - chdir($workerman_root_dir); - ini_set('display_errors', 'off'); - ob_start(); - // Try to include php file. - try { - // $_SERVER. - $_SERVER['REMOTE_ADDR'] = $connection->getRemoteIp(); - $_SERVER['REMOTE_PORT'] = $connection->getRemotePort(); - include $workerman_file; - } catch (\Exception $e) { - // Jump_exit? - if ($e->getMessage() != 'jump_exit') { - echo $e; - } - } - $content = ob_get_clean(); - ini_set('display_errors', 'on'); - if (strtolower($_SERVER['HTTP_CONNECTION']) === "keep-alive") { - $connection->send($content); - } else { - $connection->close($content); - } - chdir($workerman_cwd); - return; - } - - // Send file to client. - return self::sendFile($connection, $workerman_file); - } else { - // 404 - Http::header("HTTP/1.1 404 Not Found"); - $connection->close('404 File not found

404 Not Found

'); - return; - } - } - - public static function sendFile($connection, $file_path) - { - // Check 304. - $info = stat($file_path); - $modified_time = $info ? date('D, d M Y H:i:s', $info['mtime']) . ' ' . date_default_timezone_get() : ''; - if (!empty($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $info) { - // Http 304. - if ($modified_time === $_SERVER['HTTP_IF_MODIFIED_SINCE']) { - // 304 - Http::header('HTTP/1.1 304 Not Modified'); - // Send nothing but http headers.. - $connection->close(''); - return; - } - } - - // Http header. - if ($modified_time) { - $modified_time = "Last-Modified: $modified_time\r\n"; - } - $file_size = filesize($file_path); - $file_info = pathinfo($file_path); - $extension = isset($file_info['extension']) ? $file_info['extension'] : ''; - $file_name = isset($file_info['filename']) ? $file_info['filename'] : ''; - $header = "HTTP/1.1 200 OK\r\n"; - if (isset(self::$mimeTypeMap[$extension])) { - $header .= "Content-Type: " . self::$mimeTypeMap[$extension] . "\r\n"; - } else { - $header .= "Content-Type: application/octet-stream\r\n"; - $header .= "Content-Disposition: attachment; filename=\"$file_name\"\r\n"; - } - $header .= "Connection: keep-alive\r\n"; - $header .= $modified_time; - $header .= "Content-Length: $file_size\r\n\r\n"; - $trunk_limit_size = 1024*1024; - if ($file_size < $trunk_limit_size) { - return $connection->send($header.file_get_contents($file_path), true); - } - $connection->send($header, true); - - // Read file content from disk piece by piece and send to client. - $connection->fileHandler = fopen($file_path, 'r'); - $do_write = function()use($connection) - { - // Send buffer not full. - while(empty($connection->bufferFull)) - { - // Read from disk. - $buffer = fread($connection->fileHandler, 8192); - // Read eof. - if($buffer === '' || $buffer === false) - { - return; - } - $connection->send($buffer, true); - } - }; - // Send buffer full. - $connection->onBufferFull = function($connection) - { - $connection->bufferFull = true; - }; - // Send buffer drain. - $connection->onBufferDrain = function($connection)use($do_write) - { - $connection->bufferFull = false; - $do_write(); - }; - $do_write(); - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/Worker.php b/pgserver/vendor/workerman/workerman-for-win/Worker.php deleted file mode 100644 index 24e3c1f..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/Worker.php +++ /dev/null @@ -1,946 +0,0 @@ - - * @copyright walkor - * @link http://www.workerman.net/ - * @license http://www.opensource.org/licenses/mit-license.php MIT License - */ -namespace Workerman; - -require_once __DIR__ . '/Lib/Constants.php'; - -use \Workerman\Events\Libevent; -use \Workerman\Events\Event; -use \Workerman\Events\React; -use \Workerman\Events\Select; -use \Workerman\Events\EventInterface; -use \Workerman\Connection\ConnectionInterface; -use \Workerman\Connection\TcpConnection; -use \Workerman\Connection\UdpConnection; -use \Workerman\Lib\Timer; -use \Workerman\Autoloader; -use \Exception; - -/** - * - * @author walkor - */ -class Worker -{ - /** - * 版本号 - * @var string - */ - const VERSION = '3.5.0'; - - /** - * 状态 启动中 - * @var int - */ - const STATUS_STARTING = 1; - - /** - * 状态 运行中 - * @var int - */ - const STATUS_RUNNING = 2; - - /** - * 状态 停止 - * @var int - */ - const STATUS_SHUTDOWN = 4; - - /** - * 状态 平滑重启中 - * @var int - */ - const STATUS_RELOADING = 8; - - /** - * 给子进程发送重启命令 KILL_WORKER_TIMER_TIME 秒后 - * 如果对应进程仍然未重启则强行杀死 - * @var int - */ - const KILL_WORKER_TIMER_TIME = 1; - - /** - * 默认的backlog,即内核中用于存放未被进程认领(accept)的连接队列长度 - * @var int - */ - const DEFAUL_BACKLOG = 1024; - - /** - * udp最大包长 - * @var int - */ - const MAX_UDP_PACKAGE_SIZE = 65535; - - /** - * worker id - * @var int - */ - public $id = 0; - - /** - * worker的名称,用于在运行status命令时标记进程 - * @var string - */ - public $name = 'none'; - - /** - * 设置当前worker实例的进程数 - * @var int - */ - public $count = 1; - - /** - * 设置当前worker进程的运行用户,启动时需要root超级权限 - * @var string - */ - public $user = ''; - - /** - * 当前worker进程是否可以平滑重启 - * @var bool - */ - public $reloadable = true; - - /** - * reuse port - * @var bool - */ - public $reusePort = false; - - /** - * 当worker进程启动时,如果设置了$onWorkerStart回调函数,则运行 - * 此钩子函数一般用于进程启动后初始化工作 - * @var callback - */ - public $onWorkerStart = null; - - /** - * 当有客户端连接时,如果设置了$onConnect回调函数,则运行 - * @var callback - */ - public $onConnect = null; - - /** - * 当客户端连接上发来数据时,如果设置了$onMessage回调,则运行 - * @var callback - */ - public $onMessage = null; - - /** - * 当客户端的连接关闭时,如果设置了$onClose回调,则运行 - * @var callback - */ - public $onClose = null; - - /** - * 当客户端的连接发生错误时,如果设置了$onError回调,则运行 - * 错误一般为客户端断开连接导致数据发送失败、服务端的发送缓冲区满导致发送失败等 - * 具体错误码及错误详情会以参数的形式传递给回调,参见手册 - * @var callback - */ - public $onError = null; - - /** - * 当连接的发送缓冲区满时,如果设置了$onBufferFull回调,则执行 - * @var callback - */ - public $onBufferFull = null; - - /** - * 当链接的发送缓冲区被清空时,如果设置了$onBufferDrain回调,则执行 - * @var callback - */ - public $onBufferDrain = null; - - /** - * 当前进程退出时(由于平滑重启或者服务停止导致),如果设置了此回调,则运行 - * @var callback - */ - public $onWorkerStop = null; - - /** - * 当收到reload命令时的回调函数 - * @var callback - */ - public $onWorkerReload = null; - - /** - * 传输层协议 - * @var string - */ - public $transport = 'tcp'; - - /** - * 所有的客户端连接 - * @var array - */ - public $connections = array(); - - /** - * 应用层协议,由初始化worker时指定 - * 例如 new worker('http://0.0.0.0:8080');指定使用http协议 - * @var string - */ - protected $protocol = ''; - - /** - * 当前worker实例初始化目录位置,用于设置应用自动加载的根目录 - * @var string - */ - protected $_autoloadRootPath = ''; - - /** - * 是否以守护进程的方式运行。运行start时加上-d参数会自动以守护进程方式运行 - * 例如 php start.php start -d - * @var bool - */ - public static $daemonize = false; - - /** - * 重定向标准输出,即将所有echo、var_dump等终端输出写到对应文件中 - * 注意 此参数只有在以守护进程方式运行时有效 - * @var string - */ - public static $stdoutFile = '/dev/null'; - - /** - * pid文件的路径及名称 - * 例如 Worker::$pidFile = '/tmp/workerman.pid'; - * 注意 此属性一般不必手动设置,默认会放到php临时目录中 - * @var string - */ - public static $pidFile = ''; - - /** - * 日志目录,默认在workerman根目录下,与Applications同级 - * 可以手动设置 - * 例如 Worker::$logFile = '/tmp/workerman.log'; - * @var unknown_type - */ - public static $logFile = ''; - - /** - * 全局事件轮询库,用于监听所有资源的可读可写事件 - * @var Select/Libevent - */ - public static $globalEvent = null; - - /** - * 主进程停止时触发的回调,Win系统下不起作用 - * @var unknown_type - */ - public static $onMasterStop = null; - - /** - * 事件轮询库类名 - * @var string - */ - public static $eventLoopClass = ''; - - /** - * 主进程pid - * @var int - */ - protected static $_masterPid = 0; - - /** - * 监听的socket - * @var stream - */ - protected $_mainSocket = null; - - /** - * socket名称,包括应用层协议+ip+端口号,在初始化worker时设置 - * 值类似 http://0.0.0.0:80 - * @var string - */ - protected $_socketName = ''; - - /** - * socket的上下文,具体选项设置可以在初始化worker时传递 - * @var context - */ - protected $_context = null; - - /** - * 所有的worker实例 - * @var array - */ - protected static $_workers = array(); - - /** - * 所有worker进程的pid - * 格式为 [worker_id=>[pid=>pid, pid=>pid, ..], ..] - * @var array - */ - protected static $_pidMap = array(); - - /** - * 所有需要重启的进程pid - * 格式为 [pid=>pid, pid=>pid] - * @var array - */ - protected static $_pidsToRestart = array(); - - /** - * 当前worker状态 - * @var int - */ - protected static $_status = self::STATUS_STARTING; - - /** - * 所有worke名称(name属性)中的最大长度,用于在运行 status 命令时格式化输出 - * @var int - */ - protected static $_maxWorkerNameLength = 12; - - /** - * 所有socket名称(_socketName属性)中的最大长度,用于在运行 status 命令时格式化输出 - * @var int - */ - protected static $_maxSocketNameLength = 12; - - /** - * 所有user名称(user属性)中的最大长度,用于在运行 status 命令时格式化输出 - * @var int - */ - protected static $_maxUserNameLength = 12; - - /** - * 运行 status 命令时用于保存结果的文件名 - * @var string - */ - protected static $_statisticsFile = ''; - - /** - * 启动的全局入口文件 - * 例如 php start.php start ,则入口文件为start.php - * @var string - */ - protected static $_startFile = ''; - - /** - * 用来保存子进程句柄(windows) - * @var array - */ - protected static $_process = array(); - - /** - * 要执行的文件 - * @var array - */ - protected static $_startFiles = array(); - - /** - * Available event loops. - * - * @var array - */ - protected static $_availableEventLoops = array( - 'libevent' => '\Workerman\Events\Libevent', - 'event' => '\Workerman\Events\Event' - ); - - /** - * PHP built-in protocols. - * - * @var array - */ - protected static $_builtinTransports = array( - 'tcp' => 'tcp', - 'udp' => 'udp', - 'unix' => 'unix', - 'ssl' => 'tcp' - ); - - /** - * 运行所有worker实例 - * @return void - */ - public static function runAll() - { - // 初始化环境变量 - self::init(); - // 解析命令 - self::parseCommand(); - // 初始化所有worker实例,主要是监听端口 - self::initWorkers(); - // 展示启动界面 - self::displayUI(); - // 运行所有的worker - self::runAllWorkers(); - // 监控worker - self::monitorWorkers(); - } - - /** - * 初始化一些环境变量 - * @return void - */ - public static function init() - { - if(strpos(strtolower(PHP_OS), 'win') !== 0) - { - exit("workerman-for-win can not run in linux\n"); - } - if (false !== strpos(ini_get('disable_functions'), 'proc_open')) - { - exit("\r\nWarning: proc_open() has been disabled for security reasons. \r\n\r\nSee http://wiki.workerman.net/Error5\r\n"); - } - $backtrace = debug_backtrace(); - self::$_startFile = $backtrace[count($backtrace)-1]['file']; - // 没有设置日志文件,则生成一个默认值 - if(empty(self::$logFile)) - { - self::$logFile = __DIR__ . '/../workerman.log'; - } - // 标记状态为启动中 - self::$_status = self::STATUS_STARTING; - - $event_loop_class = self::getEventLoopName(); - self::$globalEvent = new $event_loop_class; - Timer::init(self::$globalEvent); - } - - /** - * 初始化所有的worker实例,主要工作为获得格式化所需数据及监听端口 - * @return void - */ - protected static function initWorkers() - { - foreach(self::$_workers as $worker) - { - // 没有设置worker名称,则使用none代替 - if(empty($worker->name)) - { - $worker->name = 'none'; - } - // 获得所有worker名称中最大长度 - $worker_name_length = strlen($worker->name); - if(self::$_maxWorkerNameLength < $worker_name_length) - { - self::$_maxWorkerNameLength = $worker_name_length; - } - // 获得所有_socketName中最大长度 - $socket_name_length = strlen($worker->getSocketName()); - if(self::$_maxSocketNameLength < $socket_name_length) - { - self::$_maxSocketNameLength = $socket_name_length; - } - $user_name_length = strlen($worker->user); - if(self::$_maxUserNameLength < $user_name_length) - { - self::$_maxUserNameLength = $user_name_length; - } - } - } - - /** - * 运行所有的worker - */ - public static function runAllWorkers() - { - // 只有一个start文件时执行run - if(count(self::$_startFiles) === 1) - { - // win不支持同一个页面执初始化多个worker - if(count(self::$_workers) > 1) - { - echo "@@@ Error: multi workers init in one php file are not support @@@\r\n"; - echo "@@@ Please visit http://wiki.workerman.net/Multi_woker_for_win @@@\r\n"; - } - elseif(count(self::$_workers) <= 0) - { - exit("@@@no worker inited@@@\r\n\r\n"); - } - - // 执行worker的run方法 - reset(self::$_workers); - $worker = current(self::$_workers); - $worker->listen(); - // 子进程阻塞在这里 - $worker->run(); - exit("@@@child exit@@@\r\n"); - } - // 多个start文件则多进程打开 - elseif(count(self::$_startFiles) > 1) - { - self::$globalEvent = new Select(); - Timer::init(self::$globalEvent); - foreach(self::$_startFiles as $start_file) - { - self::openProcess($start_file); - } - } - // 没有start文件提示错误 - else - { - //exit("@@@no worker inited@@@\r\n"); - } - } - - /** - * 打开一个子进程 - * @param string $start_file - */ - public static function openProcess($start_file) - { - // 保存子进程的输出 - $start_file = realpath($start_file); - $std_file = sys_get_temp_dir() . '/'.str_replace(array('/', "\\", ':'), '_', $start_file).'.out.txt'; - // 将stdou stderr 重定向到文件 - $descriptorspec = array( - 0 => array('pipe', 'a'), // stdin - 1 => array('file', $std_file, 'w'), // stdout - 2 => array('file', $std_file, 'w') // stderr - ); - - // 保存stdin句柄,用来探测子进程是否关闭 - $pipes = array(); - - // 打开子进程 - $process= proc_open("php \"$start_file\" -q", $descriptorspec, $pipes); - - // 打开stdout stderr 文件句柄 - $std_handler = fopen($std_file, 'a+'); - // 非阻塞 - stream_set_blocking($std_handler, 0); - // 定时读取子进程的stdout stderr - $timer_id = Timer::add(0.1, function()use($std_handler) - { - echo fread($std_handler, 65535); - }); - - // 保存子进程句柄 - self::$_process[$start_file] = array($process, $start_file, $timer_id); - } - - /** - * 定时检查子进程是否退出了 - */ - protected static function monitorWorkers() - { - // 定时检查子进程是否退出了 - Timer::add(0.5, "\\Workerman\\Worker::checkWorkerStatus"); - - // 主进程loop - self::$globalEvent->loop(); - } - - public static function checkWorkerStatus() - { - foreach(self::$_process as $process_data) - { - $process = $process_data[0]; - $start_file = $process_data[1]; - $timer_id = $process_data[2]; - $status = proc_get_status($process); - if(isset($status['running'])) - { - // 子进程退出了,重启一个子进程 - if(!$status['running']) - { - echo "process $start_file terminated and try to restart\n"; - Timer::del($timer_id); - @proc_close($process); - // 重新打开一个子进程 - self::openProcess($start_file); - } - } - else - { - echo "proc_get_status fail\n"; - } - } - } - - /** - * Get all worker instances. - * - * @return array - */ - public static function getAllWorkers() - { - return self::$_workers; - } - - /** - * Get global event-loop instance. - * - * @return EventInterface - */ - public static function getEventLoop() - { - return self::$globalEvent; - } - - /** - * 展示启动界面 - * @return void - */ - protected static function displayUI() - { - global $argv; - // -q不打印 - if(in_array('-q', $argv)) - { - return; - } - echo "----------------------- WORKERMAN -----------------------------\n"; - echo 'Workerman version:' . Worker::VERSION . " PHP version:".PHP_VERSION."\n"; - echo "------------------------ WORKERS -------------------------------\n"; - echo "worker",str_pad('', self::$_maxWorkerNameLength+2-strlen('worker')), "listen",str_pad('', self::$_maxSocketNameLength+2-strlen('listen')), "processes ","status\n"; - foreach(self::$_workers as $worker) - { - echo str_pad($worker->name, self::$_maxWorkerNameLength+2),str_pad($worker->getSocketName(), self::$_maxSocketNameLength+2), str_pad(' '.$worker->count, 9), " [OK] \n";; - } - echo "----------------------------------------------------------------\n"; - echo "Press Ctrl-C to quit. Start success.\n"; - } - - /** - * 解析运行命令 - * php yourfile.php start | stop | restart | reload | status - * @return void - */ - public static function parseCommand() - { - global $argv; - foreach($argv as $file) - { - $ext = pathinfo($file, PATHINFO_EXTENSION ); - if($ext !== 'php') - { - continue; - } - if(is_file($file)) - { - self::$_startFiles[$file] = $file; - include_once $file; - } - } - } - - /** - * 执行关闭流程 - * @return void - */ - public static function stopAll() - { - self::$_status = self::STATUS_SHUTDOWN; - exit(0); - } - - /** - * 记录日志 - * @param string $msg - * @return void - */ - public static function log($msg) - { - $msg = $msg."\n"; - if(self::$_status === self::STATUS_STARTING || !self::$daemonize) - { - echo $msg; - } - file_put_contents(self::$logFile, date('Y-m-d H:i:s') . " " . $msg, FILE_APPEND | LOCK_EX); - } - - /** - * worker构造函数 - * @param string $socket_name - * @return void - */ - public function __construct($socket_name = '', $context_option = array()) - { - // 保存worker实例 - $this->workerId = spl_object_hash($this); - self::$_workers[$this->workerId] = $this; - self::$_pidMap[$this->workerId] = array(); - - // 获得实例化文件路径,用于自动加载设置根目录 - $backrace = debug_backtrace(); - $this->_autoloadRootPath = dirname($backrace[0]['file']); - - // 设置socket上下文 - if($socket_name) - { - $this->_socketName = $socket_name; - if(!isset($context_option['socket']['backlog'])) - { - $context_option['socket']['backlog'] = self::DEFAUL_BACKLOG; - } - $this->_context = stream_context_create($context_option); - } - - // 设置一个空的onMessage,当onMessage未设置时用来消费socket数据 - $this->onMessage = function(){}; - } - - /** - * 监听端口 - * @throws Exception - */ - public function listen() - { - if (!$this->_socketName || $this->_mainSocket) { - return; - } - - // Autoload. - Autoloader::setRootPath($this->_autoloadRootPath); - - // Get the application layer communication protocol and listening address. - list($scheme, $address) = explode(':', $this->_socketName, 2); - // Check application layer protocol class. - if (!isset(self::$_builtinTransports[$scheme])) { - if(class_exists($scheme)){ - $this->protocol = $scheme; - } else { - $scheme = ucfirst($scheme); - $this->protocol = '\\Protocols\\' . $scheme; - if (!class_exists($this->protocol)) { - $this->protocol = "\\Workerman\\Protocols\\$scheme"; - if (!class_exists($this->protocol)) { - throw new Exception("class \\Protocols\\$scheme not exist"); - } - } - } - if (!isset(self::$_builtinTransports[$this->transport])) { - throw new \Exception('Bad worker->transport ' . var_export($this->transport, true)); - } - } else { - $this->transport = $scheme; - } - - $local_socket = self::$_builtinTransports[$this->transport] . ":" . $address; - - // Flag. - $flags = $this->transport === 'udp' ? STREAM_SERVER_BIND : STREAM_SERVER_BIND | STREAM_SERVER_LISTEN; - $errno = 0; - $errmsg = ''; - // SO_REUSEPORT. - if ($this->reusePort) { - stream_context_set_option($this->_context, 'socket', 'so_reuseport', 1); - } - - // Create an Internet or Unix domain server socket. - $this->_mainSocket = stream_socket_server($local_socket, $errno, $errmsg, $flags, $this->_context); - if (!$this->_mainSocket) { - throw new Exception($errmsg); - } - - if ($this->transport === 'ssl') { - stream_socket_enable_crypto($this->_mainSocket, false); - } - - // Try to open keepalive for tcp and disable Nagle algorithm. - if (function_exists('socket_import_stream') && self::$_builtinTransports[$this->transport] === 'tcp') { - $socket = socket_import_stream($this->_mainSocket); - @socket_set_option($socket, SOL_SOCKET, SO_KEEPALIVE, 1); - @socket_set_option($socket, SOL_TCP, TCP_NODELAY, 1); - } - - // Non blocking. - stream_set_blocking($this->_mainSocket, 0); - - // Register a listener to be notified when server socket is ready to read. - if (self::$globalEvent) { - if ($this->transport !== 'udp') { - self::$globalEvent->add($this->_mainSocket, EventInterface::EV_READ, array($this, 'acceptConnection')); - } else { - self::$globalEvent->add($this->_mainSocket, EventInterface::EV_READ, - array($this, 'acceptUdpConnection')); - } - } - } - - /** - * Get event loop name. - * - * @return string - */ - protected static function getEventLoopName() - { - if (self::$eventLoopClass) { - return self::$eventLoopClass; - } - - $loop_name = ''; - foreach (self::$_availableEventLoops as $name=>$class) { - if (extension_loaded($name)) { - $loop_name = $name; - break; - } - } - - if ($loop_name) { - if (interface_exists('\React\EventLoop\LoopInterface')) { - switch ($loop_name) { - case 'libevent': - self::$eventLoopClass = '\Workerman\Events\React\LibEventLoop'; - break; - case 'event': - self::$eventLoopClass = '\Workerman\Events\React\ExtEventLoop'; - break; - default : - self::$eventLoopClass = '\Workerman\Events\React\StreamSelectLoop'; - break; - } - } else { - self::$eventLoopClass = self::$_availableEventLoops[$loop_name]; - } - } else { - self::$eventLoopClass = interface_exists('\React\EventLoop\LoopInterface')? '\Workerman\Events\React\StreamSelectLoop':'\Workerman\Events\Select'; - } - return self::$eventLoopClass; - } - - /** - * 获得 socket name - * @return string - */ - public function getSocketName() - { - return $this->_socketName ? $this->_socketName : 'none'; - } - - /** - * 运行worker实例 - */ - public function run() - { - // 设置自动加载根目录 - Autoloader::setRootPath($this->_autoloadRootPath); - - // Create a global event loop. - if (!self::$globalEvent) { - $event_loop_class = self::getEventLoopName(); - self::$globalEvent = new $event_loop_class; - } - - // 监听_mainSocket上的可读事件(客户端连接事件) - if($this->_socketName) - { - if($this->transport !== 'udp') - { - self::$globalEvent->add($this->_mainSocket, EventInterface::EV_READ, array($this, 'acceptConnection')); - } - else - { - self::$globalEvent->add($this->_mainSocket, EventInterface::EV_READ, array($this, 'acceptUdpConnection')); - } - } - - // 用全局事件轮询初始化定时器 - Timer::init(self::$globalEvent); - - // 如果有设置进程启动回调,则执行 - if($this->onWorkerStart) - { - call_user_func($this->onWorkerStart, $this); - } - - // 子进程主循环 - self::$globalEvent->loop(); - } - - /** - * 停止当前worker实例 - * @return void - */ - public function stop() - { - // 如果有设置进程终止回调,则执行 - if($this->onWorkerStop) - { - call_user_func($this->onWorkerStop, $this); - } - // 删除相关监听事件,关闭_mainSocket - self::$globalEvent->del($this->_mainSocket, EventInterface::EV_READ); - @fclose($this->_mainSocket); - } - - /** - * 接收一个客户端连接 - * @param resources $socket - * @return void - */ - public function acceptConnection($socket) - { - // Accept a connection on server socket. - $new_socket = @stream_socket_accept($socket, 0, $remote_address); - // Thundering herd. - if (!$new_socket) { - return; - } - - // TcpConnection. - $connection = new TcpConnection($new_socket, $remote_address); - $this->connections[$connection->id] = $connection; - $connection->worker = $this; - $connection->protocol = $this->protocol; - $connection->transport = $this->transport; - $connection->onMessage = $this->onMessage; - $connection->onClose = $this->onClose; - $connection->onError = $this->onError; - $connection->onBufferDrain = $this->onBufferDrain; - $connection->onBufferFull = $this->onBufferFull; - - // Try to emit onConnect callback. - if ($this->onConnect) { - try { - call_user_func($this->onConnect, $connection); - } catch (\Exception $e) { - self::log($e); - exit(250); - } catch (\Error $e) { - self::log($e); - exit(250); - } - } - } - - /** - * 处理udp连接(udp其实是无连接的,这里为保证和tcp连接接口一致) - * @param resource $socket - */ - public function acceptUdpConnection($socket) - { - $recv_buffer = stream_socket_recvfrom($socket, self::MAX_UDP_PACKAGE_SIZE, 0, $remote_address); - if (false === $recv_buffer || empty($remote_address)) { - return false; - } - // UdpConnection. - $connection = new UdpConnection($socket, $remote_address); - $connection->protocol = $this->protocol; - if ($this->onMessage) { - if ($this->protocol) { - $parser = $this->protocol; - $recv_buffer = $parser::decode($recv_buffer, $connection); - } - ConnectionInterface::$statistics['total_request']++; - try { - call_user_func($this->onMessage, $connection, $recv_buffer); - } catch (\Exception $e) { - self::log($e); - exit(250); - } catch (\Error $e) { - self::log($e); - exit(250); - } - } - return true; - } -} diff --git a/pgserver/vendor/workerman/workerman-for-win/composer.json b/pgserver/vendor/workerman/workerman-for-win/composer.json deleted file mode 100644 index b9a756f..0000000 --- a/pgserver/vendor/workerman/workerman-for-win/composer.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name" : "workerman/workerman-for-win", - "type" : "project", - "keywords": ["event-loop", "asynchronous"], - "homepage": "http://www.workerman.net", - "license" : "MIT", - "description": "An asynchronous event driven PHP framework for easily building fast, scalable network applications.", - "authors" : [ - { - "name" : "walkor", - "email" : "walkor@workerman.net", - "homepage" : "http://www.workerman.net", - "role": "Developer" - } - ], - "support" : { - "email" : "walkor@workerman.net", - "issues": "https://github.com/walkor/workerman/issues", - "forum" : "http://wenda.workerman.net/", - "wiki" : "http://doc3.workerman.net/index.html", - "source": "https://github.com/walkor/workerman" - }, - "require": { - "php": ">=5.3" - }, - "autoload": { - "psr-4": {"Workerman\\": "./"} - }, - "minimum-stability":"dev" -}