پیادهسازی کلاینت gRPC تحویل تیکت ورود به Gameplay
۱ روز پیش
کارفرمای جدید
قزوین

ثبت پیشنهاد روی پروژه
ثبت پروژه مشابه [Backend/React] پیادهسازی کلاینت gRPC تحویل تیکت ورود به Gameplay، دریافت launch_url و هماهنگی نمایش Modal در React ( مدیر بخش Frontend )
۱. شرح مسئله و هدف معماری (Problem Statement & Objective)
طبق بخشهای ۳، ۳-الف و ۳-ب سند، پس از کلیک کاربر روی «ورود به ملک» و ساخت تیکت در میکروسرویس، بکاند میکروسرویس تیکت را به همراه property_id و request_id از طریق یک درخواست کوتاه gRPC Unary به درگاه ورود Gameplay میفرستد و منتظر پاسخ همان درخواست میماند.
در صورت تأیید، Gameplay فیلدهای accepted، launch_url، launch_code (در صورت نیاز) و request_id را برمیگرداند. بکاند میکروسرویس این پاسخ را از طریق مسیر HTTP به فرانتاند React همان کاربر تحویل میدهد تا React یک پنجره بزرگ (Modal) در همان صفحه باز کرده و نسخه Unity WebGL را داخل iframe بارگذاری کند.
۲. جریان داده و الزامات امنیتی (Data Flow & Security Guardrails)
React ⬅ کلیک روی «ورود به ملک ۴۱۲» (POST /api/v1/properties/412/enter).
Microservice Backend ⬅ احراز هویت نشست کاربر ۲۵ + صدور تیکت امضاشده (MS-02) + تولید request_id.
Microservice Backend -> Gameplay Server ⬅ فراخوانی Unary RPC RequestPropertyEntry(request_id, signed_ticket, property_id=412).
Gameplay Server -> Microservice Backend ⬅ دریافت PropertyEntryResponse(accepted=true, launch_url, launch_code, request_id).
نکته امنیتی حیاتی (بخش ۳-ب): تیکت امضاشده اولیه بین دو سرور مصرف شده است و هرگز نباید همان تیکت اولیه در لینک عمومی iframe قرار گیرد. راهاندازی کلاینت Unity در iframe صرفاً با launch_url و سازوکار مجوز کوتاهمدت نشست (launch_code) که Gameplay برگردانده انجام میشود.
React ⬅ باز کردن Modal بزرگ در همان صفحه سایت (نه پنجره جدید مرورگر) و قرار دادن iframe با آدرس دریافتی.
۳. الزامات پیادهسازی (Implementation Tasks)
سمت Backend میکروسرویس:
ایجاد Endpoint امن HTTP (POST /api/v1/properties/{propertyId}/enter) با محافظت Rate Limit به ازای هر کاربر.
فراخوانی کلاینت GameplayIntegrationService.RequestPropertyEntry با Timeout مشخص (مثلاً ۳ تا ۵ ثانیه).
بررسی تطابق دقیق request_id برگشتی از Gameplay با request_id ارسالی تا پاسخ اشتباه به کاربر دیگری داده نشود (بخش ۳-الف).
در صورت accepted == false یا خطای شبکه/Timeout، بازگرداندن کد وضعیت و پیام خطای استاندارد و قابلفهم به React (عدم ارسال هیچگونه لینک قابل استفاده در صورت رد شدن).
سمت React در سایت میکروسرویس (در صورت استقرار در این ریپازیتوری یا ریپازیتوری فرانتاند مرتبط):
پیادهسازی کامپوننت PropertyWebGLModal (یک Modal بزرگ روی همان صفحه سایت).
نمایش وضعیت Loading در حین دریافت پاسخ از بکاند و بارگذاری فایلهای Build مشترک Unity WebGL داخل iframe.
تنظیم ویژگیهای استاندارد iframe برای اجرای صحیح WebGL (مانند allow="autoplay; fullscreen; microphone; clipboard-read; clipboard-write" و مدیریت فوکوس کیبورد/ماوس).
مدیریت رویداد بستن Modal (ارسال سیگنال خروج یا پاکسازی کامل DOM مربوط به iframe جهت آزادسازی WebGL Context و حافظه مرورگر و هماهنگی با چرخه نشست Gameplay طبق بخش ۳ - گام ۰۵).
۴. معیارهای پذیرش (Acceptance Criteria)
با کلیک کاربر مجاز، کل فرآیند ساخت تیکت، استعلام gRPC از Gameplay و بازگشت launch_url به React در یک چرخه واحد انجام شده و Modal بازی باز میشود.
در URL قرارگرفته در src تگ iframe، هیچ اثری از signed_ticket اولیه سرور-به-سرور وجود ندارد.
اگر Gameplay درخواست ورود را رد کند (accepted: false)، هیچ لینکی به کلاینت برنمیگردد و پیام خطای مناسب در رابط کاربری React نمایش داده میشود.
باز کردن، تمامصفحه کردن، فوکوس ورودیها، صدا/میکروفون و بستن Modal در مرورگرهای هدف بدون نشت حافظه (Memory Leak) یا باقی ماندن صدای بازی پس از بستن Modal کار میکند.
برنامه نویسی
برنامه نویسی وب
برنامه نویسی php
php
جاوا اسکریپت (Javascript)
پی اچ پی
طراحی سایت
grpc
unity
webgl
مشاهده جزئیات پیشنهادهای این پروژه
گزارش تخلف
ثبت پیشنهاد روی پروژه
ثبت پروژه مشابه پروژه را با دوستان خود به اشتراک بگذارید