Browse Source

update client api

main
yggverse 7 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 @@ -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

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

@ -2,9 +2,9 @@ @@ -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 @@ -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 @@ -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 @@ -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 @@ -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();
}
}
}
}
Loading…
Cancel
Save