پرش به مطلب اصلی

اجرای سناریوی سمت سرور و تعامل با وضعیت سناریو

این صفحه دو قابلیت را توضیح می‌دهد که هر دو به «سناریوهای سمت سرور (Server Scenario)» مربوط می‌شوند، اما با سناریوهای درون‌ابزاری صفحه سناریو نویسی استاتیک متفاوت هستند:

  1. اجرای سناریوی سرور از سمت ابزار (Run Server Scenario) — ابزار شما درخواست اجرای یک سناریوی از پیش‌تعریف‌شده در پروژه را می‌دهد.
  2. تعامل با وضعیت سناریو (Server Scenario Interaction) — ابزار شما می‌خواهد وضعیت یک سناریو را بخواند یا آن را فعال/غیرفعال کند.

هر دو قابلیت اختیاری هستند و پیاده‌سازی هرکدام کاملاً به نیاز محصول شما بستگی دارد.

تفاوت با سناریوی درون‌ابزاری

در سناریوی درون‌ابزاری (صفحه قبلی)، تعریف کامل سناریو (لیست ابزارها، Operationها، مقادیر و تاخیرها) روی خود ابزار ذخیره و اجرا می‌شود. اما در «اجرای سناریوی سرور»، ابزار شما هیچ اطلاعاتی از جزئیات سناریو نمی‌داند و نمی‌سازد؛ فقط یک شناسه (code) از یک سناریوی از پیش‌تعریف‌شده در پنل/اپلیکیشن را برای سرور ارسال می‌کند و سرور مسئول اجرای واقعی آن است.

اجرای سناریوی سرور از سمت ابزار

وقتی یک رویداد محلی در ابزار رخ می‌دهد (مثلاً فشردن یک کلید فیزیکی) و می‌خواهید یک سناریوی از پیش تعریف‌شده در پروژه اجرا شود، کافیست کد آن سناریو را روی تاپیک زیر Publish کنید:

Topic : projectCode/RunServerScenarioFromDevice
payload
{
"code": 100
}

code همان کدی است که هنگام تعریف سناریو در اپلیکیشن موبایل به آن اختصاص داده شده است.

پیوند دادن یک رویداد فیزیکی به یک سناریو

معماری واقعی رویداد محلی (فشار کوتاه، فشار طولانی، نگه‌داشتن به مدت مشخص، دوبار لمس، ژست لمسی، یک ورودی سخت‌افزاری خاص یا هر رویداد اختصاصی دیگر تولیدکننده) کاملاً به طراحی محصول شما بستگی دارد و در این مشخصات فنی به‌صورت سراسری تعیین نشده است.

توصیه می‌شود در صفحه تنظیمات اختصاصی (Dedicated Setting HTML) به نصاب اجازه دهید یک سناریوی موجود پروژه را (با استفاده از دریافت تمامی سناریوهای یک پروژه) انتخاب کند و آن را به یکی از رویدادهای فیزیکی ابزار خود متصل کند. کد سناریوی انتخاب‌شده باید در تنظیمات ابزار ذخیره شود تا فریمور در لحظه اجرای رویداد، بداند چه کدی باید روی RunServerScenarioFromDevice منتشر شود.

تعامل با وضعیت سناریو (اختیاری)

سه زیرقابلیت مستقل و اختیاری برای تعامل با وضعیت یک سناریو در نظر گرفته شده است:

  • خواندن اطلاعات سناریو (Read Scenario Info)
  • فعال‌سازی سناریو (Enable Scenario)
  • غیرفعال‌سازی سناریو (Disable Scenario)

انتخاب سناریوی هدف نیز از طریق همان صفحه تنظیمات اختصاصی و با استفاده از Api دریافت سناریوهای پروژه انجام می‌شود؛ کد سناریو در تنظیمات ابزار ذخیره می‌ماند.

این سه زیرقابلیت تاپیک اختصاصی ندارند

برخلاف اجرای سناریو (RunServerScenarioFromDevice)، این سه عملیات از طریق مکانیزم عمومی General Data با یکدیگر و با سرور صحبت می‌کنند — این دو مکانیزم را با هم ادغام نکنید.

پیام‌های General Data (چه در SendGeneralData و چه در ReceiveGeneralData) همیشه یک ساختار ثابت دارند که فیلد tag مشخص می‌کند این پیام دقیقاً چه چیزی است:

{ "tag": "...", "data": "...", "deviceSerial": "..." }

خواندن اطلاعات سناریو: ابزار روی تاپیک زیر با tag = "ServerScenarioInfo" Publish می‌کند:

Topic : projectCode/SendGeneralData

و پاسخ سرور روی تاپیک زیر، با همان tag، به همان ابزار برمی‌گردد:

Topic : projectCode/ReceiveGeneralData/{deviceSerial}

فعال‌سازی سناریو: ابزار روی همان تاپیک projectCode/SendGeneralData با tag = "EnableServerScenario" و data شامل کد سناریوی انتخاب‌شده Publish می‌کند.

غیرفعال‌سازی سناریو: دقیقاً مشابه فعال‌سازی، با tag = "DisableServerScenario".

در صورت استفاده از امنیت لایه دوم، نسخه رمزنگاری‌شده هر دو تاپیک (projectCode/SendGeneralData/AES و projectCode/ReceiveGeneralData/{deviceSerial}/AES) نیز در دسترس است.

وضعیت سناریو، همیشه از سمت سرور اعلام می‌شود

وضعیت یک سناریو می‌تواند یکی از مقادیر زیر باشد و سرور مرجع نهایی این وضعیت است:

  • Enable
  • Disable
  • SystemDisabled
  • PaymentDisabled

فریمور شما هرگز نباید تلاش کند این محدودیت‌های اعلام‌شده از سمت سرور را دور بزند یا نادیده بگیرد — برای مثال، اگر وضعیت یک سناریو PaymentDisabled باشد (به دلیل عدم تسویه هزینه نگهداری سناریوهای ابری)، ابزار شما نباید سناریو را به‌صورت محلی اجرا یا شبیه‌سازی کند.

مجوز لازم برای این قابلیت‌ها

خواندن یا مدیریت سناریوهای سمت سرور، جزو قابلیت‌های حساس امنیتی است. همانند کنترل سایر ابزارها، انتخاب یک سناریو در صفحه تنظیمات به‌تنهایی به معنای دسترسی واقعی نیست و ممکن است نیاز به تایید مالک (Master) پروژه از داخل اپلیکیشن موبایل داشته باشد.