Goal: ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ РОП Ρ‡Π°Ρ‰Π΅ всСго ΠΈΠΌΠ΅Π΅Ρ‚ свои Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΊ систСмС. А это Π·Π½Π°Ρ‡ΠΈΡ‚ Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Ρ‹. Для Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ доступ ΠΊ Π°Π΄ΠΌΠΈΠ½ функциям управлСния физичСскими Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π°ΠΌΠΈ.

API

Апи ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ для управлСния: https://api.rlslot.com/api/v1/documentation/#/ Π»Π΅ΠΆΠΈΡ‚ Π² скоупС manage.

Π’Π°ΠΆΠ½ΠΎ: для manage Π°ΠΏΠΈ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π½Π°Π±ΠΎΡ€Ρ‹ Π°ΠΏΠΈ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‡Π΅ΠΌ для основного Π°ΠΏΠΈ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² /machine/list ΠΈ /manage/machine/list Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΠΎΠ² (!!!)

ΠœΠ΅Ρ‚ΠΎΠ΄ /managment Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π»ΠΎΠ±Π±ΠΈ, ΠΎΠ½ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ serials машин.

Π ΠΎΠ»ΠΈ:

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π²Π΅ Ρ€ΠΎΠ»ΠΈ:

  • ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΠΎΠ² (device manager): ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Ρ‹, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Ρ‹
  • сСрвисный ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ (service engeneer): ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ Π² сСрвисный Ρ€Π΅ΠΆΠΈΠΌ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² ΡΠ΅Ρ€Π²ΠΈΡΠ½ΡƒΡŽ сСссию. Π’Π°ΠΆΠ½ΠΎ: Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с этими ролями ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ доступа ΠΊ списку ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² Π½Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π΅ (Π² Ρ†Π΅Π»ΠΎΠΌ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ)

UI

Как основной Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ отобраТСния ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ

serialis_alivestatussession_iduser_idcommandsservice mode
02000002truebusyskjkljwkdjelwdemkcms[send command]enter | exit+connect

Π“Π΄Π΅:

  • serial - сСрийный Π½ΠΎΠΌΠ΅Ρ€ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π°, ΠΈΠ΄
  • is_alive - ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ ΠΈΠ· Π°ΠΏΠΈ
  • status - Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ статус Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π° (Π²Π°ΠΆΠ½ΠΎ Ρ€Π°Π·ΡƒΠΊΡ€Π°ΡΠΈΡ‚ΡŒ ΠΈΡ… Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ†Π²Π΅Ρ‚Π°ΠΌΠΈ, список статусов: ???)
  • session_id - ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ сСссии, Ссли Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ занят
  • user_id: внСшний ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² ΠΊΠ°Π·ΠΈΠ½ΠΎ (для нас это ссылка Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с этим ΠΈΠ΄)
  • commands: мСсто для ΠΊΠ½ΠΎΠΏΠΊΠΈ command. НаТатиС Π½Π° Π½Π΅Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ модальноС ΠΎΠΊΠ½ΠΎ с ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ для Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π°.
  • service mode: ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° с ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ€ΠΎΠ»ΠΈ БСрвисный ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€. Π’ зависимости ΠΎΡ‚ состояния содСрТит Π»ΠΈΠ±ΠΎ ΠΎΠ΄Π½Ρƒ ΠΊΠ½ΠΎΠΏΠΊΡƒ - Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сСрвисный Ρ€Π΅ΠΆΠΈΠΌ, Π»ΠΈΠ±ΠΎ Π΄Π²Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ - Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ сСрвисный Ρ€Π΅ΠΆΠΈΠΌ ΠΈΠ»ΠΈ подсоСдинится
  • Основная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ статусы Ρƒ нас Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ, поэтому Π½ΡƒΠΆΠ½Π° Π΅Ρ‰Π΅ какая-Ρ‚ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ°, которая Π±Ρ‹ Π΄Π΅Ρ€Π³Π°Π»Π° ΠΈ обновляла статусы, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ статусов (ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Ρ€Π°Π· Π² 5 ΠΌΠΈΠ½ΡƒΡ‚). Π’Π°ΠΊ ΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π³Π΄Π΅-Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° послСдний Ρ€Π°Π· Π±Ρ‹Π»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ сразу ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ - 3 сСкунды Π½Π°Π·Π°Π΄, 2 сСкунды Π½Π°Π·Π°Π΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π²ΠΈΠ΄Π΅Π» насколько ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ°Ρ Ρƒ Π½Π΅Π³ΠΎ информация.

МСню ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ΡΡ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π° (сСрийник ΠΈ статус, врСмя послСднСго обновлСния Π΄Π°Π½Π½Ρ‹Ρ… с Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π°) + Π½Π°Π±ΠΎΡ€ ΠΊΠ½ΠΎΠΏΠΎΠΊ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ дСйствия Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Ρƒ:

  • reboot
  • cashout
  • disable
  • … НаТатиС Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

ΠœΠ°ΡΡΠΎΠ²Ρ‹Π΅ дСйствия

ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π±Π°Π·ΠΎΠ²Ρ‹Ρ… сцСнариСв использования - Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ всС Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Ρ‹, послС Ρ‡Π΅Π³ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ всС Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Ρ‹. Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого сцСнария Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ список Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΠΎΠ² (чСкбоксы) ΠΈΠ»ΠΈ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ сразу всС Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Ρ‹, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄Π½ΠΎΠΌΠΎΠΌΠ΅Π½Ρ‚Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ (Π² ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ пСрСвСсти ΠΈΡ… Π² Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ состояниС)

БСрвисный Ρ€Π΅ΠΆΠΈΠΌ

БСрвисный Ρ€Π΅ΠΆΠΈΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для досутпа ΠΊ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎΠΌΡƒ мСню, доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ с Ρ€ΠΎΠ»ΡŒΡŽ БСрвисный ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€. Π’ этом Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ссылку Π½Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ограничСния Π½Π° сСссии ΠΈ Π΅ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ. БоотвСтствСнно Π² интСрфСйсС ΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡƒ - пСрСвСсти Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ Π² сСрвисный Ρ€Π΅ΠΆΠΈΠΌ. Если ΠΆΠ΅ статус Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π° service, Ρ‚ΠΎ вмСсто этого ΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π΄Π²Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ - Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· сСрвисного Ρ€Π΅ΠΆΠΈΠΌΠ°, ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ ΠΊ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Ρƒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ запросов

  • api_base=https://api.rlslot.com/api/v1
  • key=d859ded8-e8d5-454b-9902-6f521a21c8de

List

curl "$api_base/manage/machines?key=$key"
{
  "machines": [
    {
      "serial": "0400000000000004",
      "is_alive": true,
      "status": "online",
      "tags": {}
    },
    {
      "serial": "FF00000000000002",
      "is_alive": false,
      "status": "online",
      "tags": {}
    }
  ]
}

Get Machine by Serial

curl -s "$api_base/manage/machines/FF00000000000002?key=$key"
{
  "machine": {
    "serial": "FF00000000000002",
    "is_alive": false,
    "status": "online",
    "tags": {}
  }
}

Commands

Calibrate
curl -X POST \
  "$api_base/manage/machines/FF00000000000002/command?key=$key" \
  -H 'Content-Type: application/json' \
  -d '{"command":"calibrate"}'
Reboot
curl -X POST \
  "$api_base/manage/machines/FF00000000000002/command?key=$key" \
  -H 'Content-Type: application/json' \
  -d '{"command":"reboot"}'

Reset on-server state

curl -X POST "$api_base/manage/machines/FF00000000000002/reset?key=$key"
{
  "machine": {
    "serial": "FF00000000000002",
    "is_alive": false,
    "status": "online",
    "tags": {}
  }
}
Reset all Machines
curl -X POST "$api_base/manage/machines/reset?key=$key"
{
  "machines": [
    {
      "serial": "0400000000000004",
      "is_alive": false,
      "status": "online",
      "tags": {}
    },
    {
      "serial": "FF00000000000002",
      "is_alive": false,
      "status": "online",
      "tags": {}
    }
  ]
}

Update on-server state

NOTE: usage of this method is discouraged, because it doesn't respect the attached session during status change, which might need to make a payout first

curl -X POST \
  "$api_base/manage/machines/FF00000000000002/update?key=$key" \
  -H "Content-Type: application/json" \
  -d '{"status":"online"}'
{
  "machine": {
    "serial": "FF00000000000002",
    "is_alive": false,
    "status": "online",
    "tags": {}
  }
}
curl -X POST \
  "$api_base/manage/machines/FF00000000000002/update?key=$key" \
  -H "Content-Type: application/json" \
  -d '{"game_start":false}'
{
  "machine": {
    "serial": "FF00000000000002",
    "is_alive": false,
    "status": "online",
    "tags": {}
  }
}

Enter Service Mode

curl -X POST "$api_base/manage/machines/FF00000000000002/service/enter?key=$key"
{
  "machine": {
    "serial": "FF00000000000002",
    "is_alive": true,
    "status": "service-payout",
    "tags": {}
  }
}

…then poll for Machine's status until it becomes service:

curl -s "$api_base/manage/machines/FF00000000000002?key=$key"
{
  "machine": {
    "serial": "FF00000000000002",
    "is_alive": true,
    "status": "service",
    "tags": {}
  }
}

Exit Service Mode

curl -X POST "$api_base/manage/machines/FF00000000000002/service/exit?key=$key"
{
  "machine": {
    "serial": "FF00000000000002",
    "is_alive": true,
    "status": "online",
    "tags": {}
  }
}

Create Service Session

curl -X POST "$api_base/manage/machines/FF00000000000002/service/session/init?key=$key"
{
  "url": "https://game.rlslot.com/client?s=op_..."
}

The session will be on it's own, will dispose itself after server restart / client disconnect etc