on('workerStart', function () use ($io, $INTERNAL_KEY, $INTERNAL_PORT) { $innerHttp = new Worker("http://0.0.0.0:$INTERNAL_PORT"); $innerHttp->onMessage = function ($connection, $request) use ($io, $INTERNAL_KEY) { $headers = $request->header(); if (($headers['x-internal-key'] ?? '') !== $INTERNAL_KEY) { $connection->send('Unauthorized'); return; } $post = $request->post(); $action = trim($post['action'] ?? ''); if ($action === 'update_ride_status') { $passengerId = $post['passenger_id'] ?? null; $rawPayload = $post['payload'] ?? null; if (!$passengerId || !$rawPayload) { $connection->send('Error: Missing passenger_id or payload'); return; } $payload = is_string($rawPayload) ? (json_decode($rawPayload, true) ?? $rawPayload) : $rawPayload; $io->to('passenger_' . $passengerId)->emit('ride_status_change', $payload); $connection->send('OK'); echo '[' . date('H:i:s') . '] Status update sent to Passenger #' . $passengerId . PHP_EOL; } elseif ($action === 'update_driver_location') { $passengerId = $post['passenger_id'] ?? null; $rawPayload = $post['payload'] ?? null; if (!$passengerId || !$rawPayload) { $connection->send('Error: Missing passenger_id or payload'); return; } $payload = is_string($rawPayload) ? (json_decode($rawPayload, true) ?? $rawPayload) : $rawPayload; $io->to('passenger_' . $passengerId)->emit('driver_location_update', $payload); $connection->send('OK'); } else { $connection->send('Unknown action: ' . $action); } }; $innerHttp->listen(); echo '[' . date('H:i:s') . "] Internal HTTP started on port $INTERNAL_PORT" . PHP_EOL; }); $io->on('connection', function ($socket) { $query = $socket->handshake['query'] ?? []; $passengerId = $query['id'] ?? null; if (!$passengerId) { $socket->disconnect(); return; } $socket->join('passenger_' . $passengerId); echo '[' . date('H:i:s') . "] Passenger Connected: #$passengerId" . PHP_EOL; $socket->on('heartbeat', function ($data) { // استقبال النبضة فقط — لا يحتاج رد }); $socket->on('disconnect', function () use ($passengerId) { echo '[' . date('H:i:s') . "] Passenger Disconnected: #$passengerId" . PHP_EOL; }); }); Worker::runAll();