Fix: update destination limits to 3 and sync with Redis
This commit is contained in:
@@ -321,6 +321,8 @@ $io->on('workerStart', function () use ($io, $INTERNAL_KEY) {
|
||||
$rideId = $payload['id'] ?? null;
|
||||
$lat = (float)($payload['start_lat'] ?? 0);
|
||||
$lng = (float)($payload['start_lng'] ?? 0);
|
||||
$endLat = isset($payload['end_lat']) ? (float)$payload['end_lat'] : null;
|
||||
$endLng = isset($payload['end_lng']) ? (float)$payload['end_lng'] : null;
|
||||
|
||||
if (!$redis || !$rideId || $lat == 0 || $lng == 0) {
|
||||
$connection->send('Error: Redis unavailable or invalid coords');
|
||||
@@ -333,6 +335,20 @@ $io->on('workerStart', function () use ($io, $INTERNAL_KEY) {
|
||||
$count = 0;
|
||||
foreach ($nearbyDrivers as $driverId) {
|
||||
if (isset($connectedDrivers[$driverId])) {
|
||||
// Check if driver has a destination constraint in Redis
|
||||
$profileKey = "driver:profile:$driverId";
|
||||
$profile = $redis->hgetall($profileKey);
|
||||
if ($profile && isset($profile['has_destination']) && $profile['has_destination'] == 1 && $endLat !== null && $endLng !== null) {
|
||||
$driverDestLat = (float)($profile['destination_lat'] ?? 0);
|
||||
$driverDestLng = (float)($profile['destination_lng'] ?? 0);
|
||||
|
||||
$destDistance = haversineDistance($endLat, $endLng, $driverDestLat, $driverDestLng);
|
||||
// Filter out driver if destination is > 5km (5000 meters) away
|
||||
if ($destDistance > 5000.0) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$io->to('driver_' . $driverId)->emit('market_new_ride', $payload);
|
||||
$count++;
|
||||
}
|
||||
@@ -390,6 +406,37 @@ $io->on('workerStart', function () use ($io, $INTERNAL_KEY) {
|
||||
$connection->send('Driver not connected');
|
||||
}
|
||||
|
||||
// ── 6. Update Driver Destination ──────────────────────
|
||||
} elseif ($action === 'update_driver_destination') {
|
||||
$driverId = $post['driver_id'] ?? null;
|
||||
$hasDest = isset($post['has_destination']) ? intval($post['has_destination']) : 0;
|
||||
|
||||
if (!$driverId || !$redis) {
|
||||
$connection->send('Error: Missing driver_id or Redis unavailable');
|
||||
return;
|
||||
}
|
||||
|
||||
$profileKey = "driver:profile:$driverId";
|
||||
if ($hasDest === 1) {
|
||||
$destLat = $post['destination_lat'] ?? '';
|
||||
$destLng = $post['destination_lng'] ?? '';
|
||||
$destName = $post['destination_name'] ?? '';
|
||||
|
||||
$redis->hmset($profileKey, [
|
||||
'has_destination' => 1,
|
||||
'destination_lat' => $destLat,
|
||||
'destination_lng' => $destLng,
|
||||
'destination_name' => $destName
|
||||
]);
|
||||
$redis->expire($profileKey, 86400); // 24 Hours
|
||||
logMsg("🎯 Destination set for Driver #$driverId: $destName ($destLat, $destLng)");
|
||||
} else {
|
||||
$redis->hmset($profileKey, ['has_destination' => 0]);
|
||||
$redis->hdel($profileKey, ['destination_lat', 'destination_lng', 'destination_name']);
|
||||
logMsg("🎯 Destination cleared for Driver #$driverId");
|
||||
}
|
||||
$connection->send('OK');
|
||||
|
||||
} else {
|
||||
$connection->send('Unknown action');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user