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   173 use Carp;
  22         76  
  22         1853  
4              
5 22     22   169 use strict;
  22         60  
  22         895  
6 22     22   126 use utf8;
  22         31  
  22         130  
7              
8 22     22   9590 use Socket;
  22         94757  
  22         29515  
9              
10             my $LOG_CONNECTION_ID;
11              
12 40     40 0 189 sub get_cid { shift->{cid} }
13 40     40 0 578 sub get_sock { shift->{sock} }
14 140     140 0 743 sub get_server { shift->{server} }
15              
16 20     20 0 269 sub get_watcher { shift->{watcher} }
17 20     20 0 72 sub set_watcher { shift->{watcher} = $_[1] }
18              
19             sub new {
20 20     20 0 78 my $class = shift;
21 20         90 my ($server, $sock) = @_;
22              
23 20         127 my $cid = ++$LOG_CONNECTION_ID;
24              
25 20         569 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   841 cb => sub { $self->input; 1 },
  20         1085  
36 20         164 desc => "log reader $cid",
37             );
38              
39 20         130 $self->get_server->log (2,
40             "Got new logger connection. Connection ID is $cid"
41             );
42              
43 20         326 return $self;
44             }
45              
46             sub disconnect {
47 20     20 0 177 my $self = shift;
48              
49 20         90 my $sock = $self->get_sock;
50 20 50       100 $self->get_server->get_logger->remove_fh($sock)
51             if $self->get_server->get_logger;
52 20         257 $self->get_server->get_loop->del_io_watcher($self->get_watcher);
53 20         108 $self->set_watcher(undef);
54 20         2237 close $sock;
55              
56 20         132 $self->get_server->set_log_clients_connected ( $self->get_server->get_log_clients_connected - 1 );
57 20         84 delete $self->get_server->get_logging_clients->{$self->get_cid};
58 20         81 $self->get_server->log(2, "Log client disconnected");
59              
60 20         42 1;
61             }
62              
63             sub input {
64 20     20 0 134 my $self = shift;
65              
66 20         69 my $buffer;
67 20 50       255 $self->disconnect
68             if not sysread($self->get_sock, $buffer, 4096);
69              
70 20         41 1;
71             }
72              
73             1;
74              
75             __END__