Update: 2026-08-07 01:53:09
This commit is contained in:
@@ -155,6 +155,30 @@ function dispatchReadSignals($redisLocation, array $driverIds): array
|
||||
return $signals;
|
||||
}
|
||||
|
||||
/**
|
||||
* أول مرشح في الطابور — أي صاحب السبق المتوقّع.
|
||||
*
|
||||
* يُقرأ بلا إخراج (lIndex لا lPop): السوكِت هو من يسحب من الطابور، وسحبنا
|
||||
* منه هنا كان سيحرم الأول من عرضه.
|
||||
*
|
||||
* ⚠️ قد يتخطّاه السوكِت إن كان غير متصل، فيصير السبق لغيره بينما وصل هذا
|
||||
* إشعار FCM. لا ضرر: تطبيقه سيجد الرحلة مأخوذة أو عامة، والسبق ينتهي
|
||||
* بعد ثوانٍ على أي حال.
|
||||
*/
|
||||
function dispatchHeadStartDriver($redisLocation, $rideId): ?string
|
||||
{
|
||||
if (!$redisLocation) {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
$first = $redisLocation->lIndex("ride:$rideId:dispatch_queue", 0);
|
||||
return ($first === false || $first === null) ? null : (string) $first;
|
||||
} catch (Throwable $e) {
|
||||
error_log("[dispatch] تعذّرت قراءة صاحب السبق RideID=$rideId: " . $e->getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* يرتّب المرشحين ويسلّمهم للسوكِت ليمنح الأفضلَ سبقاً حصرياً قصيراً.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user