File Coverage

blib/lib/Plack/Middleware/SocketIO/Base.pm
Criterion Covered Total %
statement 27 72 37.5
branch 0 8 0.0
condition n/a
subroutine 9 22 40.9
pod 9 9 100.0
total 45 111 40.5


line stmt bran cond sub pod time code
1             package Plack::Middleware::SocketIO::Base;
2              
3 1     1   6 use strict;
  1         2  
  1         34  
4 1     1   5 use warnings;
  1         2  
  1         21  
5              
6 1     1   5 use JSON ();
  1         1  
  1         14  
7 1     1   888 use Encode ();
  1         10908  
  1         23  
8 1     1   9 use Try::Tiny;
  1         2  
  1         68  
9 1     1   6 use Scalar::Util qw(weaken);
  1         2  
  1         43  
10              
11 1     1   5 use Plack::Request;
  1         2  
  1         19  
12 1     1   6 use Plack::Middleware::SocketIO::Handle;
  1         1  
  1         20  
13 1     1   5 use Plack::Middleware::SocketIO::Resource;
  1         2  
  1         538  
14              
15             sub new {
16 0     0 1   my $class = shift;
17              
18 0           my $self = bless {@_}, $class;
19              
20 0           weaken $self->{env};
21 0           $self->{req} = Plack::Request->new($self->{env});
22              
23 0           return $self;
24             }
25              
26 0     0 1   sub req { shift->{req} }
27 0     0 1   sub env { shift->{req}->{env} }
28              
29             sub resource {
30 0     0 1   my $self = shift;
31 0           my ($resource) = @_;
32              
33 0 0         return $self->{resource} unless defined $resource;
34              
35 0           $self->{resource} = $resource;
36              
37 0           return $self;
38             }
39              
40             sub add_connection {
41 0     0 1   my $self = shift;
42              
43 0           return Plack::Middleware::SocketIO::Resource->instance->add_connection(
44             type => $self->name,
45             @_
46             );
47             }
48              
49             sub remove_connection {
50 0     0 1   my $self = shift;
51 0           my ($conn) = @_;
52              
53 0           Plack::Middleware::SocketIO::Resource->instance->remove_connection(
54             $conn->id);
55              
56 0           return $self;
57             }
58              
59             sub find_connection_by_id {
60 0     0 1   my $self = shift;
61 0           my ($id) = @_;
62              
63 0           return Plack::Middleware::SocketIO::Resource->instance->connection($id);
64             }
65              
66             sub client_connected {
67 0     0 1   my $self = shift;
68 0           my ($conn) = @_;
69              
70 0 0         return if $conn->is_connected;
71              
72 0           $self->_log_client_connected($conn);
73              
74 0           $conn->connect;
75             }
76              
77             sub client_disconnected {
78 0     0 1   my $self = shift;
79 0           my ($conn) = @_;
80              
81 0           $conn->disconnect;
82              
83 0           $self->_log_client_disconnected($conn);
84              
85 0           $self->remove_connection($conn);
86             }
87              
88             sub _log_client_connected {
89 0     0     my $self = shift;
90 0           my ($conn) = @_;
91              
92 0           my $logger = $self->_get_logger;
93 0 0         return unless $logger;
94              
95 0           $logger->(
96             { level => 'debug',
97             message => sprintf(
98             "Client '%s' connected via '%s'",
99             $conn->id, $conn->type
100             )
101             }
102             );
103             }
104              
105             sub _log_client_disconnected {
106 0     0     my $self = shift;
107 0           my ($conn) = @_;
108              
109 0           my $logger = $self->_get_logger;
110 0 0         return unless $logger;
111              
112 0           $logger->(
113             { level => 'debug',
114             message => sprintf("Client '%s' disconnected", $conn->id)
115             }
116             );
117             }
118              
119             sub _get_logger {
120 0     0     my $self = shift;
121              
122 0           return $self->env->{'psgix.logger'};
123             }
124              
125             sub _build_handle {
126 0     0     my $self = shift;
127              
128 0           return Plack::Middleware::SocketIO::Handle->new(@_);
129             }
130              
131             1;
132             __END__