mirror of
https://github.com/YGGverse/nps-php.git
synced 2025-01-30 00:24:24 +00:00
implement welcome, pending, handler features
This commit is contained in:
parent
5a68a95809
commit
5e662c33d9
93
README.md
93
README.md
@ -71,6 +71,99 @@ Set server status `true`|`false` to shutdown immediately
|
|||||||
|
|
||||||
Get current server status
|
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!\n\r";
|
||||||
|
}
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Server::getHandler
|
||||||
|
|
||||||
|
Get current `Handler` function, `null` by default
|
||||||
|
|
||||||
#### Server::start
|
#### Server::start
|
||||||
|
|
||||||
Run server object using this method.
|
Run server object using this method.
|
||||||
|
@ -10,6 +10,10 @@ class Server
|
|||||||
private int $_line;
|
private int $_line;
|
||||||
private bool $_live;
|
private bool $_live;
|
||||||
|
|
||||||
|
private $_welcome = null;
|
||||||
|
private $_pending = null;
|
||||||
|
private $_handler = null;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
string $host = '127.0.0.1',
|
string $host = '127.0.0.1',
|
||||||
int $port = 1915,
|
int $port = 1915,
|
||||||
@ -111,10 +115,53 @@ class Server
|
|||||||
$this->_live = $value;
|
$this->_live = $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getWelcome(): callable
|
||||||
|
{
|
||||||
|
return $this->_welcome;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setWelcome(
|
||||||
|
callable $function
|
||||||
|
): void
|
||||||
|
{
|
||||||
|
$this->_welcome = $function;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPending(): callable
|
||||||
|
{
|
||||||
|
return $this->_pending;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPending(
|
||||||
|
callable $function
|
||||||
|
): void
|
||||||
|
{
|
||||||
|
$this->_pending = $function;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getHandler(): callable
|
||||||
|
{
|
||||||
|
return $this->_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setHandler(
|
||||||
|
callable $function
|
||||||
|
): void
|
||||||
|
{
|
||||||
|
$this->_handler = $function;
|
||||||
|
}
|
||||||
|
|
||||||
public function start(
|
public function start(
|
||||||
?callable $handler = null
|
?callable $handler = null
|
||||||
): void
|
): void
|
||||||
{
|
{
|
||||||
|
if ($handler)
|
||||||
|
{
|
||||||
|
$this->setHandler(
|
||||||
|
$handler
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
$socket = stream_socket_server(
|
$socket = stream_socket_server(
|
||||||
sprintf(
|
sprintf(
|
||||||
'tcp://%s:%d',
|
'tcp://%s:%d',
|
||||||
@ -141,6 +188,22 @@ class Server
|
|||||||
$socket, -1, $connect
|
$socket, -1, $connect
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if ($this->_welcome)
|
||||||
|
{
|
||||||
|
$response = call_user_func(
|
||||||
|
$this->_welcome,
|
||||||
|
$connect
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($response)
|
||||||
|
{
|
||||||
|
fwrite(
|
||||||
|
$incoming,
|
||||||
|
$response
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
stream_set_blocking(
|
stream_set_blocking(
|
||||||
$incoming,
|
$incoming,
|
||||||
true
|
true
|
||||||
@ -151,6 +214,23 @@ class Server
|
|||||||
$this->_line
|
$this->_line
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if ($this->_pending)
|
||||||
|
{
|
||||||
|
$response = call_user_func(
|
||||||
|
$this->_pending,
|
||||||
|
$request,
|
||||||
|
$connect
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($response)
|
||||||
|
{
|
||||||
|
fwrite(
|
||||||
|
$incoming,
|
||||||
|
$response
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$success = true;
|
$success = true;
|
||||||
|
|
||||||
$content = '';
|
$content = '';
|
||||||
@ -185,10 +265,10 @@ class Server
|
|||||||
false
|
false
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($handler)
|
if ($this->_handler)
|
||||||
{
|
{
|
||||||
$response = call_user_func(
|
$response = call_user_func(
|
||||||
$handler,
|
$this->_handler,
|
||||||
$success,
|
$success,
|
||||||
$content,
|
$content,
|
||||||
$request,
|
$request,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user