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 22     22   145 use Carp;
  22         55  
  22         1165  
4              
5 22     22   127 use strict;
  22         54  
  22         429  
6 22     22   91 use utf8;
  22         179  
  22         130  
7              
8 22     22   6331 use Socket;
  22         39970  
  22         19666  
9              
10             my $LOG_CONNECTION_ID;
11              
12 40     40 0 306 sub get_cid { shift->{cid} }
13 40     40 0 671 sub get_sock { shift->{sock} }
14 140     140 0 720 sub get_server { shift->{server} }
15              
16 20     20 0 166 sub get_watcher { shift->{watcher} }
17 20     20 0 62 sub set_watcher { shift->{watcher} = $_[1] }
18              
19             sub new {
20 20     20 0 112 my $class = shift;
21 20         83 my ($server, $sock) = @_;
22              
23 20         141 my $cid = ++$LOG_CONNECTION_ID;
24              
25 20         465 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 20     20   662 cb => sub { $self->input; 1 },
  20         508  
36 20         159 desc => "log reader $cid",
37             );
38              
39 20         138 $self->get_server->log (2,
40             "Got new logger connection. Connection ID is $cid"
41             );
42              
43 20         161 return $self;
44             }
45              
46             sub disconnect {
47 20     20 0 56 my $self = shift;
48              
49 20         107 my $sock = $self->get_sock;
50 20 50       136 $self->get_server->get_logger->remove_fh($sock)
51             if $self->get_server->get_logger;
52 20         91 $self->get_server->get_loop->del_io_watcher($self->get_watcher);
53 20         121 $self->set_watcher(undef);
54 20         1267 close $sock;
55              
56 20         137 $self->get_server->set_log_clients_connected ( $self->get_server->get_log_clients_connected - 1 );
57 20         76 delete $self->get_server->get_logging_clients->{$self->get_cid};
58 20         84 $self->get_server->log(2, "Log client disconnected");
59              
60 20         41 1;
61             }
62              
63             sub input {
64 20     20 0 70 my $self = shift;
65              
66 20         50 my $buffer;
67 20 50       388 $self->disconnect
68             if not sysread($self->get_sock, $buffer, 4096);
69              
70 20         33 1;
71             }
72              
73             1;
74              
75             __END__