From f8e0d0e035726b909ef5ff96aa1d2c23c88314da Mon Sep 17 00:00:00 2001 From: yggverse Date: Wed, 24 Apr 2024 00:54:22 +0300 Subject: [PATCH] update client api --- README.md | 34 +++--- src/{Client/Request.php => Client.php} | 154 ++++++++++++++++--------- 2 files changed, 115 insertions(+), 73 deletions(-) rename src/{Client/Request.php => Client.php} (74%) diff --git a/README.md b/README.md index 1fc23bf..665c8d5 100644 --- a/README.md +++ b/README.md @@ -12,34 +12,32 @@ composer require yggverse/nex PHP interface for Nex protocol queries -### Request - ``` php -$request = new \Yggverse\Nex\Client\Request( - 'nex://nightfall.city/nex/' -); +$client = new \Yggverse\Nex\Client; ``` -#### Request::getResponse +#### Client::request -Execute requested URL and return raw response +Request data from URL ``` php var_dump( - $request->getResponse() + $client->request( + 'nex://nightfall.city/nex/' + ) ); ``` -#### Request::setHost -#### Request::getHost -#### Request::setPort -#### Request::getPort -#### Request::setPath -#### Request::getPath -#### Request::setQuery -#### Request::getQuery -#### Request::getOptions -#### Request::setOptions +#### Client::setHost +#### Client::getHost +#### Client::setPort +#### Client::getPort +#### Client::setPath +#### Client::getPath +#### Client::setQuery +#### Client::getQuery +#### Client::getOptions +#### Client::setOptions ## Server diff --git a/src/Client/Request.php b/src/Client.php similarity index 74% rename from src/Client/Request.php rename to src/Client.php index 0eceb81..45360f2 100644 --- a/src/Client/Request.php +++ b/src/Client.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Yggverse\Nex\Client; +namespace Yggverse\Nex; -class Request +class Client { private string $_host; private int $_port; @@ -13,59 +13,13 @@ class Request private array $_options = []; - public function __construct(string $url) - { - if ($host = parse_url($url, PHP_URL_HOST)) + public function __construct( + ?string $request = null + ) { + if ($request) { - $this->setHost( - $host - ); - } - - else - { - throw new Exception(); // @TODO - } - - if ($port = parse_url($url, PHP_URL_PORT)) - { - $this->setPort( - $port - ); - } - - else - { - $this->setPort( - 1900 - ); - } - - if ($path = parse_url($url, PHP_URL_PATH)) - { - $this->setPath( - $path - ); - } - - else - { - $this->setPath( - '' - ); - } - - if ($query = parse_url($url, PHP_URL_QUERY)) - { - $this->setQuery( - $query - ); - } - - else - { - $this->setQuery( - '' + $this->_init( + $request ); } } @@ -120,7 +74,8 @@ class Request return $this->_query; } - public function getResponse( + public function request( + string $address, // URL|URI int $timeout = 30, // socket timeout, useful for offline resources ?int $limit = null, // content length, null for unlimited ?int &$length = 0, // initial response length, do not change without special needs @@ -129,6 +84,10 @@ class Request string &$response = '' // response init, also returning by this method ): ?string { + $this->_init( + $address + ); + $connection = stream_socket_client( sprintf( 'tcp://%s:%d', @@ -178,4 +137,89 @@ class Request return $response; } + + + private function _url( + ?string $value + ): bool + { + if (!$value) + { + return false; + } + + if ('nex' != parse_url($value, PHP_URL_SCHEME)) + { + return false; + } + + if ($host = parse_url($value, PHP_URL_HOST)) + { + $this->setHost( + $host + ); + } + + else + { + return false; + } + + if ($port = parse_url($value, PHP_URL_PORT)) + { + $this->setPort( + $port + ); + } + + else + { + $this->setPort( + 1900 + ); + } + + if ($path = parse_url($value, PHP_URL_PATH)) + { + $this->setPath( + $path + ); + } + + else + { + $this->setPath( + '' + ); + } + + if ($query = parse_url($value, PHP_URL_QUERY)) + { + $this->setQuery( + $query + ); + } + + else + { + $this->setQuery( + '' + ); + } + + return true; + } + + private function _init( + string $request + ): void + { + if (!$this->_url($request)) + { + if (!$this->_host || !$this->_port) + { + throw new \Exception(); + } + } + } } \ No newline at end of file