public function listen($port, $host = '127.0.0.1', $backlog = 100)
{
$this->port = $port;
$this->host = $host;
$self = $this;
$system = $this->getSystem();
$this->server = uv_tcp_init();
$request = $self->getServerRequest();
$response = $self->getServerResponse();
$requestListener = $self->getRequestListener();
uv_tcp_bind($this->server, uv_ip4_addr($host, $port));
uv_listen($this->server, $backlog, function ($server) use($self, &$request, &$response, &$requestListener) {
$client = uv_tcp_init();
uv_accept($server, $client);
uv_read_start($client, function ($socket, $nread, $buffer) use($self, &$request, &$response, &$requestListener) {
$self->generateServerVariables($buffer, $socket);
call_user_func_array($requestListener, array($request, $response));
$status_code = $response->getStatusCode();
$statusMessage = $response->getReasonPhrase();
$headers = $response->getHeaders();
$header = "";
if (count($headers) > 0) {
foreach ($headers as $key => $val) {
$header .= $key . ": " . $val . "\r\n";
}
}
$output = $response->getData();
$buffer = "HTTP/1.1 {$status_code} {$statusMessage}\r\n{$header}\r\n{$output}";
uv_write($socket, $buffer);
uv_close($socket);
});
});
}