Перейти к основному контенту

Использование методов блокировок

Ниже представлен JS скрипт на примере которого будет рассмотрена работа с методами блокировок.

bot.sendText('Ожидаю получения блокировки')

let lockName = 'my_lock_1'
let lockPrefix = ''
let ttlSec = 5 // время жизни блокировки
let maxWaitSec = 300 // макс время ожидания блокировки

let isLocked = false
// Получаем блокировку по бизнесу (bot.waitForBusinessLock) или боту (bot.waitForBotLock)
isLocked = bot.waitForBusinessLock(lockName, lockPrefix, ttlSec, maxWaitSec) 
if (isLocked) {
  bot.sendText('Блокировка получена')
} else {
  bot.sendText('Время ожидания блокировки истекло')
}

bot.sendText('Ожидаю истечения блокировки и получаю новую')

//bot.releaseAllCurrentLocks()

ttlSec = 20
maxWaitSec = 1 // если раскомментировать то время ожидания будет превышено 
               // (если проверять превышение то закомментировано выше должно быть maxWaitSec)

// Повторно, получаем новую блокировку по бизнесу с тем же ключем
isLocked = bot.waitForBusinessLock(lockName, lockPrefix, ttlSec, maxWaitSec)
if (isLocked) {
  bot.sendText('Повторная блокировка получена')
} else {
  bot.sendText('Время ожидания повторной блокировки истекло')
}

// Блокировка получена или время ожидания истекло
bot.sendText('Блокировка получена')

// --------------

bot.sendText('Ищем и удаляем блокировку')

let hasLock = bot.hasLockForBusiness(lockName)

if (hasLock) {
  // Удаляем блокировку
  // по бизнесу - bot.releaseLockForBusiness / по боту - bot.releaseLockForBot
  // на самом деле это не releaseLock а forceReleaseLock (тк можно разрблокировать даже если ее тут не получали)
  // но зато это гарантирует удаление блокировки, поэтому префикс force в начале убран
  // для удаления же блокировки по тек скрипту можно использовать bot.releaseCurrentLock(lockName) или bot.releaseAllCurrentLocks()
  //if (bot.releaseLockForBusiness(lockName)) {
  
  // Вариант чтобы случайно не удалить блокировку, если мы ее не созадли в текущем скрипте
  // Например истекло время ожидания получения блокировки (maxWaitSec)
  // bot.releaseCurrentLockForBusiness / bot.releaseCurrentLockForBot
  if (bot.releaseCurrentLockForBusiness(lockName)) {
    bot.sendText('Блокировка удалена')
  } else {
    bot.sendText('Ошика удаления блокировки')
  }
} else {
  bot.sendText('Блокировка не найдена')
}

// Удаляем блокировку если она получена именно в данном скрипте (через waitForBusinessLock / waitForBotLock)
// Скрипт сам запоминает какие мы блокировки создавали в данном скрипте и удаляем ее только если создали тут
//bot.releaseCurrentLock(lockName)

// На всякий случай
// Удаляем все блокировки полученные именно в данном скрипте
// Скрипт сам запоминает какие мы блокировки создавали в данном скрипте и удаляем их все, которые мы тут создали
bot.releaseAllCurrentLocks()

bot.sendText('Дополнительно, почистили все блокировки созданные в данном скрипте, на случай, если что-то забыли...')