Browse Source

update client api

main
yggverse 2 months ago
parent
commit
f8e0d0e035
  1. 34
      README.md
  2. 154
      src/Client.php

34
README.md

@ -12,34 +12,32 @@ composer require yggverse/nex
PHP interface for Nex protocol queries PHP interface for Nex protocol queries
### Request
``` php ``` php
$request = new \Yggverse\Nex\Client\Request( $client = new \Yggverse\Nex\Client;
'nex://nightfall.city/nex/'
);
``` ```
#### Request::getResponse #### Client::request
Execute requested URL and return raw response Request data from URL
``` php ``` php
var_dump( var_dump(
$request->getResponse() $client->request(
'nex://nightfall.city/nex/'
)
); );
``` ```
#### Request::setHost #### Client::setHost
#### Request::getHost #### Client::getHost
#### Request::setPort #### Client::setPort
#### Request::getPort #### Client::getPort
#### Request::setPath #### Client::setPath
#### Request::getPath #### Client::getPath
#### Request::setQuery #### Client::setQuery
#### Request::getQuery #### Client::getQuery
#### Request::getOptions #### Client::getOptions
#### Request::setOptions #### Client::setOptions
## Server ## Server

154
src/Client/Request.php → src/Client.php

@ -2,9 +2,9 @@
declare(strict_types=1); declare(strict_types=1);
namespace Yggverse\Nex\Client; namespace Yggverse\Nex;
class Request class Client
{ {
private string $_host; private string $_host;
private int $_port; private int $_port;
@ -13,59 +13,13 @@ class Request
private array $_options = []; private array $_options = [];
public function __construct(string $url) public function __construct(
{ ?string $request = null
if ($host = parse_url($url, PHP_URL_HOST)) ) {
if ($request)
{ {
$this->setHost( $this->_init(
$host $request
);
}
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(
''
); );
} }
} }
@ -120,7 +74,8 @@ class Request
return $this->_query; return $this->_query;
} }
public function getResponse( public function request(
string $address, // URL|URI
int $timeout = 30, // socket timeout, useful for offline resources int $timeout = 30, // socket timeout, useful for offline resources
?int $limit = null, // content length, null for unlimited ?int $limit = null, // content length, null for unlimited
?int &$length = 0, // initial response length, do not change without special needs ?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 &$response = '' // response init, also returning by this method
): ?string ): ?string
{ {
$this->_init(
$address
);
$connection = stream_socket_client( $connection = stream_socket_client(
sprintf( sprintf(
'tcp://%s:%d', 'tcp://%s:%d',
@ -178,4 +137,89 @@ class Request
return $response; 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();
}
}
}
} }
Loading…
Cancel
Save