From 0bcd30f836dc3c31de5437cc96de4f8f76db761a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrej=20Rama=C5=A1euski?= <andrej@x2.cz> Date: Fri, 26 Nov 2021 22:11:48 +0100 Subject: [PATCH] Better counting --- .gitlab-ci.yml | 2 +- lib/PiTube/Controller/Websockets.pm | 8 ++++++-- templates/stream/player.html.ep | 24 +++++++++++++++--------- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8820f86..05b1afe 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ image: docker:20.10.9 variables: DOCKER_TLS_CERTDIR: "/certs" - IMAGE_VER: 2.2.0 + IMAGE_VER: 2.2.1 services: - docker:20.10.9-dind diff --git a/lib/PiTube/Controller/Websockets.pm b/lib/PiTube/Controller/Websockets.pm index 4267ff4..e750005 100644 --- a/lib/PiTube/Controller/Websockets.pm +++ b/lib/PiTube/Controller/Websockets.pm @@ -28,12 +28,16 @@ sub main { $c->on(json => sub( $c, $message ) { if ( $message->{stream} ) { + $c->redis->db->set( join (':', ('live', $message->{stream}, $key)), 'live', 'EX', 16 ); - my $keys = $c->redis->db->keys( 'live:' . $message->{stream} . ':*' ); - $c->send(encode_json({ watchers => scalar @{$keys} })); + + $c->redis->db->keys( 'live:' . $message->{stream} . ':*', sub { + my ($db, $err, $res) = @_ ; + $c->send(encode_json({ watchers => scalar @{ $res} })); + }); } }); diff --git a/templates/stream/player.html.ep b/templates/stream/player.html.ep index 8c278b5..95c1c0f 100644 --- a/templates/stream/player.html.ep +++ b/templates/stream/player.html.ep @@ -3,23 +3,17 @@ %= include 'includes/player', src => $url, live => 1; <script> +var timer; +var ws; function connect() { - var ws = new WebSocket('<%= $c->config->{ws_url} %>'); + ws = new WebSocket('<%= $c->config->{ws_url} %>'); ws.onmessage = function (event) { var data = JSON.parse(event.data) - if ( typeof data.watchers !== 'undefined' ) { console.log(data); } - else { - ws.send(JSON.stringify({ - event: "watch", - stream: "<%= $c->stash->{stream}{id} %>" - })); - } - }; ws.onclose = function(e) { @@ -35,6 +29,18 @@ function connect() { }; } +function poll() { + timer = setInterval(function() { + ws.send(JSON.stringify({ + event: "watch", + stream: "<%= $c->stash->{stream}{id} %>" + })); + }, 15000); +} + connect(); +poll(); </script> + + -- GitLab