File Coverage

blib/lib/Event/RPC/LogConnection.pm
Criterion Covered Total %
statement 40 40 100.0
branch 2 4 50.0
condition n/a
subroutine 13 13 100.0
pod 0 8 0.0
total 55 65 84.6


line stmt bran cond sub pod time code
1             package Event::RPC::LogConnection;
2              
3 19     19   98 use Carp;
  19         50  
  19         1282  
4              
5 19     19   111 use strict;
  19         59  
  19         402  
6 19     19   105 use utf8;
  19         25  
  19         117  
7              
8 19     19   12070 use Socket;
  19         72436  
  19         20628  
9              
10             my $LOG_CONNECTION_ID;
11              
12 34     34 0 383 sub get_cid { shift->{cid} }
13 34     34 0 694 sub get_sock { shift->{sock} }
14 119     119 0 1040 sub get_server { shift->{server} }
15              
16 17     17 0 231 sub get_watcher { shift->{watcher} }
17 17     17 0 90 sub set_watcher { shift->{watcher} = $_[1] }
18              
19             sub new {
20 17     17 0 86 my $class = shift;
21 17         80 my ($server, $sock) = @_;
22              
23 17         82 my $cid = ++$LOG_CONNECTION_ID;
24              
25 17         519 my $self = bless {
26             cid => $cid,
27             sock => $sock,
28             server => $server,
29             watcher => undef,
30             }, $class;
31              
32             $self->{watcher} = $server->get_loop->add_io_watcher(
33             fh => $sock,
34             poll => 'r',
35 17     17   555 cb => sub { $self->input; 1 },
  17         859  
36 17         179 desc => "log reader $cid",
37             );
38              
39 17         163 $self->get_server->log (2,
40             "Got new logger connection. Connection ID is $cid"
41             );
42              
43 17         192 return $self;
44             }
45              
46             sub disconnect {
47 17     17 0 76 my $self = shift;
48              
49 17         100 my $sock = $self->get_sock;
50 17 50       125 $self->get_server->get_logger->remove_fh($sock)
51             if $self->get_server->get_logger;
52 17         163 $self->get_server->get_loop->del_io_watcher($self->get_watcher);
53 17         128 $self->set_watcher(undef);
54 17         2569 close $sock;
55              
56 17         158 $self->get_server->set_log_clients_connected ( $self->get_server->get_log_clients_connected - 1 );
57 17         182 delete $self->get_server->get_logging_clients->{$self->get_cid};
58 17         109 $self->get_server->log(2, "Log client disconnected");
59              
60 17         61 1;
61             }
62              
63             sub input {
64 17     17 0 76 my $self = shift;
65              
66 17         51 my $buffer;
67 17 50       210 $self->disconnect
68             if not sysread($self->get_sock, $buffer, 4096);
69              
70 17         67 1;
71             }
72              
73             1;
74              
75             __END__