44
55namespace MicroPHP \Workerman ;
66
7- use League \Route \Router ;
87use League \Route \Strategy \ApplicationStrategy ;
98use MicroPHP \Framework \Application ;
10- use MicroPHP \Framework \Http \Contract \ServerInterface ;
9+ use MicroPHP \Framework \Config \Config ;
10+ use MicroPHP \Framework \Http \Contract \HttpServerInterface ;
1111use MicroPHP \Framework \Http \ServerConfig ;
12+ use MicroPHP \Framework \Http \Traits \HttpServerTrait ;
13+ use MicroPHP \Framework \Router \Router ;
1214use Workerman \Connection \TcpConnection ;
1315use Workerman \Protocols \Http \Request ;
1416use Workerman \Psr7 \Response ;
1517use Workerman \Psr7 \ServerRequest ;
1618use Workerman \Worker ;
1719
18- class WorkermanHttpServer implements ServerInterface
20+ class WorkermanHttpServer implements HttpServerInterface
1921{
22+ use HttpServerTrait;
23+
2024 public function run (Router $ router ): void
2125 {
26+ $ this ->setRuntime ();
2227 $ strategy = new ApplicationStrategy ();
2328 $ strategy ->setContainer (Application::getContainer ());
2429 $ router ->setStrategy ($ strategy );
@@ -30,12 +35,27 @@ public function run(Router $router): void
3035
3136 $ httpWorker ->onMessage = function (TcpConnection $ connection , Request $ request ) use ($ router ) {
3237 $ psr7Request = new ServerRequest ($ request ->rawBuffer ());
33- $ serverRequest = \MicroPHP \Framework \Http \ServerRequest::fromPsr7 ($ psr7Request );
3438
35- $ response = $ router -> dispatch ( $ serverRequest );
39+ $ response = $ this -> routeDispatch ( $ router , \ MicroPHP \ Framework \ Http \ServerRequest:: fromPsr7 ( $ psr7Request ) );
3640 $ connection ->send (new Response ($ response ->getStatusCode (), $ response ->getHeaders (), $ response ->getBody (), $ response ->getProtocolVersion (), $ response ->getReasonPhrase ()));
3741 };
3842
3943 Worker::runAll ();
4044 }
45+
46+ private function setRuntime (): void
47+ {
48+ $ this ->createRuntimeDir ();
49+ $ enableWorkermanLog = Config::get ('log.enable_workerman_log ' );
50+ Worker::$ logFile = base_path ('runtime/logs/workerman.log ' );
51+ if (empty ($ enableWorkermanLog ) && $ this ->isLinux ()) {
52+ Worker::$ logFile = '/dev/null ' ;
53+ }
54+ Worker::$ pidFile = 'runtime/ ' . uniqid ('workerman_ ' , true ) . '.pid ' ;
55+ }
56+
57+ private function isLinux (): bool
58+ {
59+ return PHP_OS_FAMILY === 'Linux ' ;
60+ }
4161}
0 commit comments