From fc56154edb0d375d4549737a3f34f212c3a0325f Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Wed, 13 Apr 2022 15:54:45 +0200 Subject: [PATCH] add lock mechanism --- server/src/Server.php | 22 ++++++++++++++++++++++ server/src/resource/server.php | 12 +++++------- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/server/src/Server.php b/server/src/Server.php index d486655..f785e86 100644 --- a/server/src/Server.php +++ b/server/src/Server.php @@ -25,6 +25,11 @@ class Server implements MessageComponentInterface */ protected $output; + /** + * @var array + */ + protected $locks = []; + /** * Constructor. */ @@ -109,4 +114,21 @@ class Server implements MessageComponentInterface { $conn->close(); } + + public function addLock($key) + { + $this->locks[$key] = true; + } + + public function hasLock($key) + { + return isset($this->locks[$key]); + } + + public function removeLock($key) + { + if ($this->hasLock($key)) { + unset($this->locks[$key]); + } + } } diff --git a/server/src/resource/server.php b/server/src/resource/server.php index 4eb5f53..d5e67ae 100644 --- a/server/src/resource/server.php +++ b/server/src/resource/server.php @@ -167,16 +167,14 @@ $server->addMessageHandler('text', function (ConnectionInterface $from, array $d } }); -$server->addMessageHandler('screenshot', function (ConnectionInterface $from, array $data) use ($shell, $messageOutput) { - $tmpFilename = sprintf('%s/remote_i3wm_ws_screenshot.lock', sys_get_temp_dir()); - $qualities = ['hq' => 95, 'lq' => 5]; - - if (file_exists($tmpFilename) && time() - filemtime($tmpFilename) < 10) { +$server->addMessageHandler('screenshot', function (ConnectionInterface $from, array $data) use ($shell, $messageOutput, $server) { + if ($server->hasLock('screenshot')) { return; } - touch($tmpFilename); + $server->addLock('screenshot'); + $qualities = ['hq' => 95, 'lq' => 5]; $content = $shell->exec(sprintf('import -window root -quality %d -display :0 jpeg:-', $qualities[$data['quality'] ?? 'hq'])); if (!empty($content)) { @@ -188,7 +186,7 @@ $server->addMessageHandler('screenshot', function (ConnectionInterface $from, ar ])); } - unlink($tmpFilename); + $server->removeLock('screenshot'); }); $server->addMessageHandler('messages', function (ConnectionInterface $from, array $data) use ($server, $serverOutput) {