Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yggverse/nps-php
PHP 8 Library for NPS Protocol
https://github.com/yggverse/nps-php
composer nex nex-protocol nps nps-php nps-protocol nps-protocol-server nps-server server smallweb tinyweb
Last synced: about 2 months ago
JSON representation
PHP 8 Library for NPS Protocol
- Host: GitHub
- URL: https://github.com/yggverse/nps-php
- Owner: YGGverse
- License: mit
- Created: 2024-04-24T18:04:34.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-04-24T20:04:36.000Z (10 months ago)
- Last Synced: 2024-04-24T20:09:20.606Z (10 months ago)
- Topics: composer, nex, nex-protocol, nps, nps-php, nps-protocol, nps-protocol-server, nps-server, server, smallweb, tinyweb
- Language: PHP
- Homepage:
- Size: 1.95 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
**Archived!**
Use [Ratchet](https://github.com/ratchetphp/Ratchet) `IoServer` - asynchronous WebSocket in PHP as more featured replacement to this library.
# 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::setWelcome
Define application logic on peer connection established
``` php
$server->setWelcome(
function (
string $connect
): ?string
{
printf(
"connected: %s\n\r",
$connect
);return sprintf(
"welcome, %s\n\r",
$connect
);
}
);
```#### Server::getWelcome
Get current `Welcome` function, `null` by default
#### Server::setPending
Define application logic on peer make initial request
``` php
$server->setPending(
function (
string $request,
string $connect
): ?string
{
printf(
'connection: %s requested: %s',
$connect,
$request,
);return sprintf(
'received: %s',
$request
);
}
);
```#### Server::getPending
Get current `Pending` function, `null` by default
#### Server::setHandler
Define basic application logic on complete packet received
* could be also defined as [Server::start](https://github.com/YGGverse/nps-php#serverstart) argument
``` php
$server->setHandler(
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::getHandler
Get current `Handler` function, `null` by default
#### Server::start
Run server object
``` php
$server->start();
```Optionally, 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!'; // null|string response
}
);
```#### 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 dotTo send any file:
``` file.txt
test
╦ ╦╔═╗╔═╗╔╦╗╦═╗╔═╗╔═╗╦╦
╚╦╝║ ╦║ ╦ ║║╠╦╝╠═╣╚═╗║║
╩ ╚═╝╚═╝═╩╝╩╚═╩ ╩╚═╝╩╩═╝
.
````cat file.txt | nc 127.0.0.1 1915`