2022-08-12 07:56:56 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Helpers;
|
|
|
|
|
|
|
|
use Closure;
|
|
|
|
use Illuminate\Contracts\Cache\LockTimeoutException;
|
|
|
|
use Illuminate\Support\Facades\Cache;
|
|
|
|
|
2022-11-16 05:16:56 +00:00
|
|
|
trait Lock
|
|
|
|
{
|
|
|
|
public function await($name, Closure $callback)
|
|
|
|
{
|
2022-08-13 08:37:17 +00:00
|
|
|
// if env is local
|
|
|
|
if (env('APP_ENV') == 'local') {
|
|
|
|
return $callback();
|
|
|
|
}
|
2022-08-12 07:56:56 +00:00
|
|
|
$lock = Cache::lock("lock_" . $name, 5);
|
|
|
|
try {
|
|
|
|
$lock->block(5);
|
|
|
|
return $callback();
|
|
|
|
} catch (LockTimeoutException $e) {
|
|
|
|
return false;
|
|
|
|
} finally {
|
|
|
|
optional($lock)->release();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|