Commit Graph
109 Commits
Author SHA1 Message Date
Hamza-AyedandClaude Opus 5 ab3be7e2e3 وصل سوكيت الراكب قبل إنشاء الرحلة — ليسبق FCM والـ polling
كان السوكيت مضموناً أن يخسر السباق الأول بنيوياً. ترتيب
startSearchingForDriver كان:
  ① await postRideDetailsToServer()  → add_ride.php يوزّع الطلب على الكباتن فوراً
  ② _addRideToWaitingTable()          (بلا await)
  ③ initConnectionWithSocket()        ← السوكيت يبدأ الاتصال الآن فقط

بين ① و③ نافذة = ذهاب/عودة HTTP + مصافحة WebSocket + قراءة الـ JWT، ثانية
إلى ثلاث (أسوأ على 3G). وغرف Socket.IO لا تخزّن الأحداث: لو قبل كابتن داخل
تلك النافذة فإن $io->to('passenger_X')->emit() يُرمى نهائياً لأن الغرفة
فارغة — لا طابور ولا إعادة إرسال. وكابتن ينظر لقائمة السوق يقبل في أقل من
ثانية، فالنافذة مُرجَّحة لا نادرة.

هذا يفسّر لماذا كان الـ 404 على getRideOrderID.php قاتلاً: السوكيت يخسر،
والـ FCM يصل بعد أن ضبط الـ polling _isAcceptanceProcessed=true فيُرفض،
والشبكة الاحتياطية الوحيدة مكسورة.

ترتيب السيرفر كان صحيحاً أصلاً (acceptRide.php ينادي
notifyPassengerOnRideServer قبل sendFCM_Internal) — المشكلة أن المستقبِل
لم يكن موجوداً بعد.

التغييرات:
- ensureConnectedBeforeRide(): يوصل وينتظر الانضمام للغرفة بسقف 4 ثوانٍ،
  ولا يُفشل إنشاء الرحلة عند انتهاء المهلة (نكمل ونتّكل على FCM/polling).
- startSearchingForDriver ينتظرها قبل postRideDetailsToServer.
- وصل السوكيت في initializeDataAfterLogin (عند فتح الخريطة) فيصير الانتظار
  صفراً عملياً في الحالة الطبيعية.
- _isConnecting يغطّي نافذة الـ await على الـ JWT حتى لا يفتح النداءان
  المتزامنان سوكيتين، وحرس على passengerID الفارغ.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 16:26:23 +03:00
Hamza-AyedandClaude Opus 5 143146c1b4 إصلاح سوكيت الراكب وتوحيد مسارات الإشعارات
سوكيت الراكب (سبب عدم ظهور معلومات السائق عند القبول):
- تطبيق الراكب كان يرسل id فقط بلا jwt، و passenger_socket.php يرفض أي
  اتصال بلا jwt ⇒ الراكب لا ينضم لغرفته أبداً ولا يستلم ride_status_change
  ولا driver_location_update. تظهر حالة القبول عبر الـ polling فقط بينما
  driver_info يصل بالسوكيت وحده. (سوكيت السائق يعتبر الـ jwt اختيارياً،
  ومن هنا جاء التباين بين التطبيقين.)
- cancelled_by_driver كان يسقط من switch حالات الراكب فيبقى معلّقاً بعد
  إلغاء السائق.
- حماية socket (late) من القراءة قبل التهيئة عند الانسحاب بلا jwt.

الإشعارات والرسائل (سبب "مرات توصل ومرات لا"):
- جدول tokens يخزّن توكن الراكب مشفّراً، و getRideWaiting.php كان يرجعه
  بلا فك تشفير ⇒ من يقبل من قائمة السوق يحمل blob مشفّراً يستخدمه كـ FCM
  target فيرفضه FCM بـ 400: لا إشعار قبول ولا رسائل. ومن يقبل من الـ
  dispatch/FCM يحمل نصاً صريحاً فتعمل. الفرق كان في طريقة القبول.
- acceptRide.php يحلّ التوكن من القاعدة دائماً ولا يثق بالعميل (أصحّ أمنياً).
- market_new_ride كان لا يحمل passengerId ولا الإحداثيات فتصل "null"؛
  أُضيفت بلا أي PII لأن الحمولة تُبَثّ لكل سائق قريب لا للفائز فقط.
- send_fcm.php: مهلة على OAuth (كان يعلّق حتى مهلة PHP فتُسقط الرسالة
  بصمت)، توحيد ding→default لأندرويد، وحقن title/body/tone في data
  مطابقةً لـ FcmService.
- تطبيق السائق يقرأ title/body من data أولاً مثل الراكب، ولا يعرض فقاعة
  فارغة للرسائل الصامتة.

السوكيت والإعدادات:
- forwardLocationToPassengerSocket كان يقرأ lat/lng والحمولة فيها
  latitude/longitude ⇒ المسافة تخرج ضخمة والـ throttle معطّل تماماً
  فيُعاد التوجيه مع كل نبضة GPS.
- notifyPassengerOnRideServer كان يرجع null بصمت مطلق عند حجب العنوان.
- العنوان الافتراضي لسيرفر الموقع كان nginx/loction_server/driver_socket.php
  وهو ديمون Workerman لا يُخدَم عبر nginx ⇒ صار socket_driver:2021.
  (LOCATION_API_URL بقي على nginx لأن api_get_nearby.php سكربت عادي.)
- ride_server/passenger_socket.php (النسخة التي يشغّلها Docker) كانت ناقصة
  كل كود مواصلاتي الموجود في passenger_server/ ⇒ نُقل مع REDIS_HOST.
- .env.example: ALLOWED_SOCKET_URLS يغطّي أسماء حاويات Docker، وإضافة
  PASSENGER_SOCKET_INTERNAL_URL.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-26 15:47:23 +03:00
Hamza-Ayed e7629a9eb9 Update: 2026-07-23 22:14:10 2026-07-23 22:14:10 +03:00
Hamza-Ayed c35b350b31 Update: 2026-07-23 16:56:57 2026-07-23 16:56:58 +03:00
Hamza-Ayed 9e065e5a83 Update: 2026-07-23 00:16:56 2026-07-23 00:16:56 +03:00
Hamza-Ayed a7fa40dc31 Update: 2026-07-23 00:11:36 2026-07-23 00:11:37 +03:00
Hamza-Ayed b86f95c90d Update: 2026-07-22 23:27:18 2026-07-22 23:27:18 +03:00
Hamza-Ayed b83ca1f664 Update: 2026-07-22 23:20:32 2026-07-22 23:20:33 +03:00
Hamza-Ayed 939c7a9c2c Update: 2026-07-22 17:49:27 2026-07-22 17:49:28 +03:00
Hamza-Ayed 901f429b9c Update driver and rider socket URLs to jordan-siro.intaleqapp.com for Docker setup 2026-07-22 04:15:18 +03:00
Hamza-Ayed cf95455bcf Update: 2026-07-22 00:27:49 2026-07-22 00:27:50 +03:00
Hamza-Ayed 699b380f2b Update: 2026-07-21 20:58:30 2026-07-21 20:58:30 +03:00
Hamza-Ayed 3d0c266b7a Update: 2026-07-21 20:55:19 2026-07-21 20:55:20 +03:00
Hamza-Ayed 586deec4f4 Update: 2026-07-21 20:50:03 2026-07-21 20:50:04 +03:00
Hamza-Ayed bb3536aa90 Update: 2026-07-21 20:40:48 2026-07-21 20:40:48 +03:00
Hamza-Ayed 13d10d13c7 feat: implement gate selection bottom sheet for location routing and update intaleq_maps dependency 2026-07-21 16:12:08 +03:00
Hamza-Ayed ab77ed529a Update: 2026-07-14 19:10:36 2026-07-14 19:10:36 +03:00
Hamza-Ayed fd3f4a365a Update: 2026-07-13 18:23:52 2026-07-13 18:23:52 +03:00
Hamza-Ayed 653d73422f Update: 2026-07-12 18:53:59 2026-07-12 18:53:59 +03:00
Hamza-Ayed 8cd4a4b57e Update: 2026-07-12 17:46:46 2026-07-12 17:46:46 +03:00
Hamza-Ayed 27200013ac Update: 2026-07-12 17:22:40 2026-07-12 17:22:40 +03:00
Hamza-Ayed 8fa2f153c1 refactor: disable Mawasalati feature, wrap controller initialization in post-frame callbacks, and add documentation plan 2026-07-12 06:27:36 +03:00
Hamza-Ayed 1f68cb7333 Update: 2026-07-12 05:49:17 2026-07-12 05:49:17 +03:00
Hamza-Ayed 24fb56f08f Update: 2026-07-12 05:40:28 2026-07-12 05:40:28 +03:00
Hamza-Ayed 1fa517acc9 chore: remove service_unavailable_area translation keys and add mowasalaty strategy report 2026-07-12 02:53:36 +03:00
Hamza-Ayed 8f4bb1631c Update: 2026-07-12 00:24:19 2026-07-12 00:24:19 +03:00
Hamza-Ayed 83f5bf516b feat: add Nabeh payment verification proxy and update UI components 2026-07-11 22:14:37 +03:00
Hamza-Ayed de761c1d97 Update: 2026-07-11 19:38:43 2026-07-11 19:38:43 +03:00
Hamza-Ayed 9535d702d6 Update: 2026-07-11 19:32:42 2026-07-11 19:32:42 +03:00
Hamza-Ayed 8353c4cef4 Update: 2026-07-11 19:26:05 2026-07-11 19:26:05 +03:00
Hamza-Ayed ce2f3d5675 Update: 2026-07-11 19:11:50 2026-07-11 19:11:50 +03:00
Hamza-Ayed cb9aefc591 Update: 2026-07-11 19:04:58 2026-07-11 19:04:59 +03:00
Hamza-Ayed 06dc0aaffe Update: 2026-07-11 05:39:23 2026-07-11 05:39:23 +03:00
Hamza-Ayed 6294d6e725 Update: 2026-07-10 22:31:26 2026-07-10 22:31:27 +03:00
Hamza-Ayed 2bce11b940 Update: 2026-07-10 17:26:15 2026-07-10 17:26:16 +03:00
Hamza-Ayed 81d4715664 Update: 2026-07-10 16:09:37 2026-07-10 16:09:37 +03:00
Hamza-Ayed 5fb2c25504 Update: 2026-07-10 13:41:34 2026-07-10 13:41:34 +03:00
Hamza-Ayed b18fd027b6 Update: 2026-07-10 03:04:06 2026-07-10 03:04:06 +03:00
Hamza-Ayed 2ff7450d0b Update: 2026-07-09 17:18:06 2026-07-09 17:18:06 +03:00
Hamza-Ayed d94808c380 Update: 2026-07-09 15:01:29 2026-07-09 15:01:29 +03:00
Hamza-Ayed 87dc925ea7 Refactor(Auth): Complete auth folder restructuring, security patches, and Flutter endpoint updates 2026-07-09 05:22:05 +03:00
Hamza-Ayed 45859883a5 Update: 2026-07-09 05:02:10 2026-07-09 05:02:10 +03:00
Hamza-Ayed 2152d34a8e fix: resolve stale price display in driver ratings and remove misleading discount UI in rider ratings 2026-07-09 04:48:19 +03:00
Hamza-Ayed 03e9d648a1 chore: update localization strings for driver and rider apps 2026-07-09 04:22:12 +03:00
Hamza-Ayed 70718946f5 Update: 2026-07-09 03:41:48 2026-07-09 03:41:48 +03:00
Hamza-Ayed df1f487804 Update: 2026-07-06 04:23:43 2026-07-06 04:23:43 +03:00
Hamza-Ayed 32a6531613 Update: 2026-07-06 04:21:17 2026-07-06 04:21:17 +03:00
Hamza-Ayed e42754bb0e Update: 2026-07-06 04:16:38 2026-07-06 04:16:38 +03:00
Hamza-Ayed cadc26518b Update: 2026-07-06 03:51:32 2026-07-06 03:51:32 +03:00
Hamza-Ayed ff49586d6d Update: 2026-07-06 03:45:17 2026-07-06 03:45:17 +03:00