Использование методов блокировок
Ниже представлен 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('Дополнительно, почистили все блокировки созданные в данном скрипте, на случай, если что-то забыли...')
Нет комментариев