99use mfe \server \libs \http \HttpSocketReader ;
1010use mfe \server \libs \http \HttpSocketWriter ;
1111
12+ require_once dirname (dirname (dirname (dirname (__DIR__ )))) . '/vendor/autoload.php ' ;
13+
1214/**
1315 * Class HttpServer
1416 *
1517 * @package mfe\server\libs\http\server
1618 */
1719class HttpServer implements ITcpServer
1820{
19- use TStreamServer ;
21+ public $ enableKeepAlive = false ;
2022
2123 /** @var ArrayObject */
2224 private $ config ;
@@ -30,10 +32,21 @@ class HttpServer implements ITcpServer
3032 /** @var IUpgradeServer[] */
3133 private $ upgradedSockets = [];
3234
33- public function __construct ($ upgrades , $ middleware )
35+ /** @var resource */
36+ private $ socket ;
37+
38+ /**
39+ * @param $socket
40+ * @param array $proxy
41+ * @param ArrayObject $config
42+ */
43+ public function __construct ($ socket , array $ proxy , ArrayObject $ config )
3444 {
35- $ this ->upgrades = $ upgrades ;
36- $ this ->middleware = $ middleware ;
45+ $ this ->socket = $ socket ;
46+ $ this ->setConfig ($ config );
47+ $ this ->upgrades = $ proxy ['upgrades ' ];
48+ $ this ->middleware = $ proxy ['middleware ' ];
49+ $ this ->run ();
3750 }
3851
3952 /**
@@ -44,7 +57,11 @@ public function __construct($upgrades, $middleware)
4457 */
4558 static public function build (array $ upgrades = [], array $ middleware = [])
4659 {
47- return new static ($ upgrades , $ middleware );
60+ return [
61+ '_CLASS ' => __CLASS__ ,
62+ 'upgrades ' => $ upgrades ,
63+ 'middleware ' => $ middleware
64+ ];
4865 }
4966
5067 /**
@@ -57,14 +74,9 @@ public function setConfig(ArrayObject $config)
5774 $ this ->config = $ config ;
5875 }
5976
60- public function run ($ ip , $ port )
77+ public function run ()
6178 {
62- $ this ->listenStreamServer ($ ip , $ port );
63- //stream_set_chunk_size($this->server, 1024);
64- //stream_set_blocking($this->server, 1);
65- stream_set_timeout ($ this ->server , 5 );
66- $ this ->acceptSockets ();
67- $ this ->closeStreamServer ();
79+ $ this ->handleSocket ($ this ->socket );
6880 }
6981
7082 /**
@@ -90,7 +102,7 @@ protected function handleSocket($socket)
90102 $ this ->keepAliveHandler ($ socket );
91103 }
92104
93- $ this -> closeSocket ($ socket );
105+ fclose ($ socket );
94106
95107 return true ;
96108 }
@@ -108,7 +120,9 @@ protected function pipe($socket, IHttpSocketReader $reader, IHttpSocketWriter $w
108120 $ this ->upgradedSockets [(int )$ socket ] = $ upgrade ;
109121 } else {
110122 if ($ reader ->isHttpRequest ) {
111- $ reader ->tryKeepAlive ();
123+ if ($ this ->enableKeepAlive ) {
124+ $ reader ->tryKeepAlive ();
125+ }
112126 $ reader ->parseBody ();
113127 $ reader ->overrideGlobals ();
114128 $ this ->httpRequest ($ reader , $ writer );
@@ -140,7 +154,7 @@ protected function keepAliveHandler($socket)
140154 *
141155 * @return void
142156 */
143- private function httpRequest (IHttpSocketReader $ reader , IHttpSocketWriter $ writer )
157+ protected function httpRequest (IHttpSocketReader $ reader , IHttpSocketWriter $ writer )
144158 {
145159 foreach ($ this ->middleware as $ middleware ) {
146160 $ middleware = new $ middleware ($ this ->config );
@@ -151,6 +165,6 @@ private function httpRequest(IHttpSocketReader $reader, IHttpSocketWriter $write
151165 }
152166 }
153167
154- $ writer ->setHttpStatus (404 )->send ('Error 404: Not found file by path ' . $ reader ->getUriPath ());
168+ $ writer ->setHttpStatus (404 )->send ('Error 404: Not found file by path ' . $ reader ->getUriPath ());
155169 }
156170}
0 commit comments