The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
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<Kamaitachi>,
L<Kamaitachi::Service>

=head1 AUTHOR

Daisuke Murase <typester@cpan.org>

Hideo Kimura <hide@cpan.org>

=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