افزودن منطق دلخواه به مسابقه

در این مستند، قصد داریم کارهایی را که شما بایست به عنوان سرور یک رقابت آنلاین پیاده‌سازی کنید، با هم ببینیم.

توجه: این مستند فقط برای رقابت آنلاین است و برای نیازمندی‌های چت کاربردی ندارد

پیش‌نیازها

  1. در صورتی که با سرویس بلادرنگ آشنایی ندارید، به معرفی سرویس بلادرنگ مراجعه کنید.
  2. در صورتی که هنوز با تنظیمات پنل سرویس بلادرنگ آشنا نشده اید، به تنظیمات پنل سرویس بلادرنگ مراجعه کنید.
  3. اگر با مفهوم انطباق (Match-Making) در سرویس بلادرنگ آشنایی ندارید، به آشنایی با Match-Making مراجعه کنید.
  4. در صورتی که با مفهوم وب‌هوک (webhook) آشنایی ندارید، به آشنایی با Webhook مراجعه کنید.

یک مثال کاربردی

فرض کنید قصد نوشتن یک بازی کارتی دو نفره را دارید. در این بازی کارتی، می‌خواهید از امکان Match-Making بکتوری استفاده کنید و پس از انطباق دو بازیکن با هم، آنها وارد یک Game بکتوری شوند و حرکات کارت‌های خود را به یکدیگر اطلاع داده و یک رقابت آنلاین با هم داشته باشند. همچنین می‌خواهید وقتی یک کاربر یک رقابت آنلاین را می‌برد امتیازی به لیدربورد او اضافه شود و در نهایت یک لیدربورد (سرویس مرکز بازی) بر اساس این امتیازها داشته باشید. شما برای پیاده‌سازی قسمت بازی در بکتوری، یکی از دو انتخاب زیر را دارید:

روش پیاده‌سازی منطق در اپلیکیشن

تمام منطق به سمت کلاینت (اپلیکیشن موبایل) انتقال یابد، یعنی برای مثال تمامی حرکات و اتفاقات و کارت‌هایی که بازیکن اول استفاده می‌کند، به عنوان یک پیام، به کاربر دوم انتقال یابد. در این حالت اپلیکیشن شما این پیام‌ها را دریافت کرده و تحلیل می‌کند که تاثیر کارتی که در بازی استفاده شده چیست و وضعیت بازی را به شکل منطقی تغییر می‌دهد. یعنی منطق اینکه هر کارت چه می‌کند و یا ترکیب کارت‌ها چه می‌شود و یا اینکه هر کارت چه امتیازی دارد در اپلیکیشن تعیین می‌شود. در پایان بازی نیز اپلیکیشن برنده می‌تواند امتیاز خود را در لیدربورد گزارش کند.

مزایای این روش عبارتند از:

معایب نیز به شرح زیر است:

روش پیاده‌سازی منطق در سرور

راه‌کار دوم این است که، حداقل منطق را در اپلیکیشن داشته باشید و همه تصمیم‌گیری‌ها را به سرور انتقال دهید. معنای این جمله آن است که اپلیکیشن تنها اتفاقاتی که می‌افتد را گزارش می‌دهد. مثلا اینکه چه کارتی یا ترکیبی از کارت استفاده شده است. سرور پردازش‌های لازم را انجام می‌دهد و نتیجه را به کلاینت بازیکن اول و دوم خبر می‌دهد. مثلا می‌گوید، کارت X باید از بازی خارج شود، کاربر اول Y امتیاز دریافت کرد و نوبت کاربر دوم است. در نهایت کلاینت‌ها فقط کافیست بتوانند این اعمال را در ظاهر بازی نشان دهند و هیچ نیازی ندارند که بدانند چرا این اتفاقات افتاده است و عملا کارهای بسیار ساده‌ای انجام می‌دهند. در نهایت وقتی از دید سرور بازی برنده داشته باشد، امتیاز برنده از طریق سرور به سرویس مرکز بازی گزارش می‌شود.

مانند روش قبل این روش نیز مزایا و معایبی دارد. مزایای این روش عبارتند از:

معایب نیز عبارتند از:

انتخاب روش درست

شما باید از بین دو روش بالا، بسته به محدودیت‌ها و نیازهای خود یکی را انتخاب کنید و شروع به کار کنید.

در صورتی که روش اول (پیاده‌سازی منطق در اپلیکیشن) را انتخاب کنید، نیازی به ادامه این مستند ندارید و باید به سراغ SDK بروید. در غیر این صورت در ادامه این مستند، راه‌کارهایی را که بکتوری برای پیاده‌سازی روش دوم در اختیار شما می‌گذارد، خواهید دید.

مکانیزم منطق سمت سرور

برای آنکه بتوانید منطق رقابت آنلاین خود را در سمت سرور بکتوری پیاده‌سازی کنید، باید از مکانیزمی به نام Webhook استفاده کنید. در این مکانیزم شما می‌توانید یک تابع یا کد در سرویس رایانش را به یک اتفاق در سرویس بلادرنگ وصل کنید. مثلا تعیین کنید که هر وقت یک Game آغاز شد، تابع hello_game در رایانش فراخوانی شود. در تابع hello_game نیز پیام خوش‌آمدگویی به تمام بازیکنان بدهید. و یا بسته به نوع رقابت، یک متن راهنما برای آنها ارسال کنید.

در صورتی که سرویس بلادرنگ را فعال کرده باشید، می‌توانید تنظیماتی مشابه زیر، در پنل بلادرنگ خود، انجام دهید:

Realtime advanced settings

همانطور که می‌بینید به ازای هر یک از اتفاقاتی که طی یک رقابت آنلاین، در سرویس بلادرنگ می‌افتد، شما امکان تعریف یک وب‌هوک مجزا دارید. در مثال بالا، اگر یک پیام در حین بازی جا‌به‌جا شود یک درخواست POST به آدرس http://myserver/webhooks/event ارسال خواهد شد و اطلاعات پیام، شناسه بازی که پیام به آن تعلق دارد و کسی که پیام را ارسال کرده است در آنجا قابل دسترس و محاسبه خواهد بود. لیست تمامی اتفاقاتی که امکان تعریف وب‌هوک برای آنها دارید عبارتند از:

وب‌هوک‌های Match-Making:

وب‌هوک‌های Realtime Game:

شما باید تمامی منطق خود را در این توابع پیاده‌سازی کنید. در بخش بعدی مستند، اطلاعاتی که به هر یک از وب‌هوک‌ها ارسال می‌شود و پاسخی که مورد انتظار است، به همراه مثالی از کاربرد هر یک در دنیای واقع گفته خواهد شد.

تیک انتقال خطا: اگر به تصویر تنظیمات پیشرفته دقت کنید، یک تیک به نام «انتقال خطا» وجود دارد، در صورتی که این تیک فعال باشد، هر وب‌هوک شما که خطا بدهد و مشکل داشته باشد، مشکل آن برای اپلیکیشن شما ارسال خواهد شد، معمولا به ازای ارسال این خطا در کلاینت کاری نمی‌توان کرد و به همین دلیل، این تیک به صورت پیشفرض در بکتوری غیرفعال است. در صورتی که تمایل دارید این خطا برای اپلیکیشن شما ارسال شود، آن را فعال کنید.

در صورتی که تیک “فراخوانی Event بصورت همگام” فعال باشد، تیک “فراخوانی Event بصورت مرتب شده” نیز ظاهر می‌شود.

Realtime advanced settings

تیک فراخوانی Event بصورت مرتب شده: در صورت فعال بودن event های ارسال شده به ترتیب به وب‌هوک داده‌ می‌شوند و تا اجرای وب‌هوک برای یک ایونت تمام نشده ایونت بعدی به وب‌هوک داده نمی‌شود. این تنظیمات برای استفاده با خصوصیات بازی مفید واقع می‌شوند.

گام بعدی