// شغل خادم ويب بعيد على 127.0.0.1:8001، ثم اطلب /busy و/wait و // /fast على المنفذ 8000. تواصل النافذة الرسم بينما تتناوب المعالجات. استورد أساسي::رايليب. استورد أساسي::ويب. سجل حالة { إطارات: ص64, مشغول: منطقي, سريع: منطقي, تعارض: منطقي } دالة طلب_صادر(سياق: ويب::سياق<نص,حالة>, محفوظ: ص64) -> ويب::استجابة_خادم { دع لقطة = ويب::التقط_الحالة(سياق). دع طلب = ويب::أنشئ_طلب("GET", ويب::اقرأ_إعدادات(سياق))::قيمة. دع رد = ويب::اطلب(طلب, ويب::خيارات_طلب()). إذا لا رد::نجاح { أرجع ويب::استجابة_نصية(502, رد::الخطأ::الرمز, "text/plain")::قيمة. } إذا محفوظ لا يطابق 7 { أرجع ويب::أنشئ_استجابة(500, [])::قيمة. } دع منشور = ويب::استبدل_الحالة_إن_كانت_حالية(سياق, لقطة, لقطة::قيمة)::قيمة. متغير حالي = ويب::اقرأ_حالة(سياق). حالي::تعارض = لا منشور. ويب::استبدل_حالة(سياق, حالي). أرجع ويب::استجابة_نصية(200, "conflict", "text/plain")::قيمة. } دالة معالج(الطلب: ويب::طلب_وارد, سياق: ويب::سياق<نص,حالة>) -> ويب::استجابة_خادم { إذا الطلب::مسار يطابق "/busy" { متغير الحالة = ويب::اقرأ_حالة(سياق). الحالة::مشغول = صواب. ويب::استبدل_حالة(سياق, الحالة). طالما صواب {} } إذا الطلب::مسار يطابق "/wait" { أرجع طلب_صادر(سياق, 7). } متغير حالي = ويب::اقرأ_حالة(سياق). حالي::سريع = رايليب::هل_النافذة_جاهزة(). ويب::استبدل_حالة(سياق, حالي). أرجع ويب::استجابة_نصية(200, "fast", "text/plain")::قيمة. } دالة ابدأ_الرئيسية() -> ص64 { دع مفتوح = رايليب::هيئ_نافذة(480, 240, "ASPL HTTP and drawing"). إذا لا مفتوح::نجاح { اطبع(مفتوح::الخطأ::الرمز). أرجع 1. } دع معدل_الإطارات = رايليب::اضبط_معدل_الإطارات(60). إذا لا معدل_الإطارات::نجاح { أرجع 9. } متغير خادم = ويب::إعدادات_خدمة(). خادم::مستمعون = [ويب::أنشئ_مستمع("127.0.0.1", 8000)::قيمة]. دع وجهات = ويب::أنشئ_موجه([ ويب::أنشئ_وجهة("GET", "/busy", معالج)::قيمة, ويب::أنشئ_وجهة("GET", "/wait", معالج)::قيمة, ويب::أنشئ_وجهة("GET", "/fast", معالج)::قيمة ])::قيمة. دع مبدوء = ويب::ابدأ(خادم, وجهات, "http://127.0.0.1:8001/", حالة {إطارات: 0, مشغول: خطأ, سريع: خطأ, تعارض: خطأ}). إذا لا مبدوء::نجاح { اطبع(مبدوء::الخطأ::الرمز). أرجع 2. } دع مالك = مبدوء::قيمة. اطبع("ready\س"). متغير ميزانية = ويب::ميزانية_التقدم(). ميزانية::حد_التعليمات = 128. متغير إطارات: ص32 = 0. طالما إطارات < 180 و لا رايليب::هل_يجب_إغلاق_النافذة()::قيمة { إذا لا ويب::تقدم(مالك, ميزانية)::نجاح { أرجع 3. } إذا لا رايليب::ابدأ_الرسم()::نجاح { أرجع 4. } إذا لا رايليب::امسح_الخلفية(رايليب::أبيض_رايليب)::نجاح { أرجع 10. } متغير الحالة = ويب::التقط_حالة_الجلسة(مالك)::قيمة::قيمة. الحالة::إطارات = الحالة::إطارات + 1. إذا لا ويب::استبدل_حالة_الجلسة(مالك, الحالة)::نجاح { أرجع 5. } إذا لا رايليب::ارسم_مستطيلا(إطارات, 90, 40, 40, رايليب::أزرق)::نجاح { أرجع 11. } إذا لا رايليب::أنه_الرسم()::نجاح { أرجع 6. } إطارات = إطارات + 1. } دع نهائي = ويب::حالة_الجلسة(مالك)::قيمة. إذا لا ويب::أغلق_الجلسة(مالك)::نجاح { أرجع 7. } إذا لا رايليب::أغلق_النافذة()::نجاح { أرجع 8. } إذا نهائي::مشغول و نهائي::سريع و نهائي::تعارض { اطبع("busy fast conflict\س"). } أرجع 0. }