diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8820f86075c3558b2e403e298502c5242a405015..05b1afe3de9e4edc39449fefd05952db02887f05 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 4267ff40ad28715bb6382b12d7ce3e70b02227a9..e750005b67e35013f7e901221d77ab14008d0378 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 8c278b5f3b30988174529825a0bdbdbea13a29ea..95c1c0fb649433bad695625202655b8d7a3e670f 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> + +