package Kamaitachi::Service::StreamAudienceCounter; use Moose::Role; has stream_audience_count => ( is => 'rw', isa => 'HashRef', default => sub { {} }, ); sub get_stream_audience_count { my ($self, $session) = @_; my $stream = $self->get_stream_name($session) or return; return $self->stream_audience_count->{$stream} || 0; } after on_invoke_play => sub { my ($self, $session, $req) = @_; my $stream = $self->get_stream_name($session) or return; my $stream_info = $self->get_stream_info($stream) or return; $self->{stream_audience_count}{$stream} = keys %{ $stream_info->{child} }; }; after on_invoke_closeStream => sub { my ($self, $session, $req) = @_; my $stream = $self->get_stream_name($session) or return; $self->{stream_audience_count}{$stream}--; }; before on_close => sub { my ($self, $session) = @_; my $stream = $self->get_stream_name($session) or return; if ($self->is_owner($session)) { delete $self->{stream_audience_count}{$stream}; } else { $self->{stream_audience_count}{$stream}--; } }; 1; __END__ =encoding utf8 =head1 NAME Kamaitachi::Service::StreamAudienceCounter - service role to count and broadcast streaming audience =head1 SYNOPSIS =head1 DESCRIPTION =head1 METHODS =head2 get_stream_audience_count L, L =head1 AUTHOR Daisuke Murase Hideo Kimura =head1 COPYRIGHT This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of the license can be found in the LICENSE file included with this module. =cut