|
|
|
# nps-php
|
|
|
|
|
|
|
|
PHP 8 / Composer Library for NPS Protocol
|
|
|
|
|
|
|
|
Like Titan for Gemini, NPS is the satellite for NEX protocol (see also [nex-php](https://github.com/YGGverse/nex-php))\
|
|
|
|
it listen for single dot in line to signal the package ending.
|
|
|
|
|
|
|
|
## Specification
|
|
|
|
|
|
|
|
`nex://nightfall.city/nps/`
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
```
|
|
|
|
composer require yggverse/nps
|
|
|
|
```
|
|
|
|
|
|
|
|
## Server
|
|
|
|
|
|
|
|
Build interactive server instance to listen NPS protocol connections!
|
|
|
|
|
|
|
|
``` php
|
|
|
|
$server = new \Yggverse\Nps\Server;
|
|
|
|
```
|
|
|
|
|
|
|
|
Provide optional `host`, `port`, `size`, `line` and `live` arguments in constructor:
|
|
|
|
|
|
|
|
``` php
|
|
|
|
$server = new \Yggverse\Nps\Server('127.0.0.1', 1915);
|
|
|
|
```
|
|
|
|
|
|
|
|
Alternatively, use following setters after object initiation
|
|
|
|
|
|
|
|
#### Server::setHost
|
|
|
|
|
|
|
|
Bind server host to listen incoming connections, `127.0.0.1` by default
|
|
|
|
|
|
|
|
#### Server::getHost
|
|
|
|
|
|
|
|
Get current server host
|
|
|
|
|
|
|
|
#### Server::setPort
|
|
|
|
|
|
|
|
Bind server port to listen incoming connections, `1915` by default
|
|
|
|
|
|
|
|
#### Server::getPort
|
|
|
|
|
|
|
|
Get current server port
|
|
|
|
|
|
|
|
#### Server::setSize
|
|
|
|
|
|
|
|
Set total content length limit by [mb_strlen](https://www.php.net/manual/en/function.mb-strlen.php), `0` by default (unlimited)
|
|
|
|
|
|
|
|
#### Server::getSize
|
|
|
|
|
|
|
|
Get current content length limit
|
|
|
|
|
|
|
|
#### Server::setLine
|
|
|
|
|
|
|
|
Set packet line limit in bytes passing to [fread](https://www.php.net/manual/en/function.fread.php#length), `1024` by default
|
|
|
|
|
|
|
|
#### Server::getLine
|
|
|
|
|
|
|
|
Get current packet line limit
|
|
|
|
|
|
|
|
#### Server::setLive
|
|
|
|
|
|
|
|
Set server status `true`|`false` to shutdown immediately
|
|
|
|
|
|
|
|
#### Server::getLive
|
|
|
|
|
|
|
|
Get current server status
|
|
|
|
|
|
|
|
#### Server::start
|
|
|
|
|
|
|
|
Run server object using this method.
|
|
|
|
|
|
|
|
Define handler function as the argument to process application logic dependent of client request.
|
|
|
|
|
|
|
|
``` php
|
|
|
|
$server->start(
|
|
|
|
function (
|
|
|
|
bool $success,
|
|
|
|
string $content,
|
|
|
|
string $request,
|
|
|
|
string $connect
|
|
|
|
): ?string
|
|
|
|
{
|
|
|
|
printf(
|
|
|
|
'connection: %s request: %s',
|
|
|
|
$connect,
|
|
|
|
$request
|
|
|
|
);
|
|
|
|
|
|
|
|
if ($success)
|
|
|
|
{
|
|
|
|
var_dump(
|
|
|
|
$content
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
return 'thank you!';
|
|
|
|
}
|
|
|
|
);
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Server::stop
|
|
|
|
|
|
|
|
Stop server instance.
|
|
|
|
|
|
|
|
Same to `Server::setLive(false)`
|
|
|
|
|
|
|
|
### Testing
|
|
|
|
|
|
|
|
1. `nc 127.0.0.1 1915` - connect server using `nc`
|
|
|
|
2. `test` - enter the target path
|
|
|
|
3. `YOUR MESSAGE GOES HERE` - enter the message text
|
|
|
|
4. `.` - commit package with dot
|
|
|
|
|
|
|
|
To send any file:
|
|
|
|
|
|
|
|
``` file.txt
|
|
|
|
test
|
|
|
|
╦ ╦╔═╗╔═╗╔╦╗╦═╗╔═╗╔═╗╦╦
|
|
|
|
╚╦╝║ ╦║ ╦ ║║╠╦╝╠═╣╚═╗║║
|
|
|
|
╩ ╚═╝╚═╝═╩╝╩╚═╩ ╩╚═╝╩╩═╝
|
|
|
|
.
|
|
|
|
```
|
|
|
|
|
|
|
|
`cat file.txt | nc 127.0.0.1 1915`
|