File Coverage

blib/lib/XAS/Lib/Service.pm
Criterion Covered Total %
statement 9 69 13.0
branch 1 8 12.5
condition n/a
subroutine 3 12 25.0
pod 3 3 100.0
total 16 92 17.3


line stmt bran cond sub pod time code
1             package XAS::Lib::Service;
2              
3             our $VERSION = '0.04';
4              
5 1     1   4 use POE;
  1         1  
  1         7  
6              
7             my ($mixin, $shutdown);
8              
9             BEGIN {
10              
11 1 50   1   263 if ($^O eq 'MSWin32') {
12              
13 0         0 $mixin = 'XAS::Lib::Service::Win32';
14 0         0 $shutdown = 25;
15              
16             } else {
17            
18 1         1 $mixin = 'XAS::Lib::Service::Unix';
19 1         56 $shutdown = 2;
20              
21             }
22              
23             }
24              
25             use XAS::Class
26 1         10 debug => 0,
27             version => $VERSION,
28             base => 'XAS::Lib::POE::Session',
29             utils => ':validation',
30             mixin => $mixin,
31             accessors => 'sessions',
32             mutators => 'last_state',
33             constants => 'DELIMITER',
34             vars => {
35             PARAMS => {
36             -poll_interval => { optional => 1, default => 2 },
37             -shutdown_interval => { optional => 1, default => $shutdown },
38             -alias => { optional => 1, default => 'services' },
39             }
40             }
41 1     1   5 ;
  1         1  
42              
43             #use Data::Dumper;
44              
45             # ----------------------------------------------------------------------
46             # Public Methods
47             # ----------------------------------------------------------------------
48              
49             sub register {
50 0     0 1   my $self = shift;
51 0           my $sessions = validate_params(\@_, [
52             (0) x (@_)
53             ]);
54              
55 0           foreach my $session (@$sessions) {
56              
57 0 0         if (my @parts = split(DELIMITER, $session)) {
58              
59 0           foreach my $part (@parts) {
60              
61 0 0         next if ($part eq '');
62 0           push(@{$self->{'sessions'}}, $part);
  0            
63              
64             }
65              
66             } else {
67              
68 0 0         next if ($session eq '');
69 0           push(@{$self->{'sessions'}}, $session);
  0            
70              
71             }
72              
73             }
74              
75             }
76              
77             sub session_shutdown {
78 0     0 1   my $self = shift;
79              
80 0           $poe_kernel->delay('poll');
81 0           $self->SUPER::session_shutdown();
82              
83             }
84              
85             # ----------------------------------------------------------------------
86             # Public Events
87             # ----------------------------------------------------------------------
88              
89             # ----------------------------------------------------------------------
90             # Private Events
91             # ----------------------------------------------------------------------
92              
93             sub _session_init {
94 0     0     my ($self) = $_[OBJECT];
95              
96 0           my $alias = $self->alias;
97              
98 0           $self->log->debug("$alias: _session_init()");
99              
100 0           $poe_kernel->state('poll', $self);
101              
102 0           $self->last_state(SERVICE_START_PENDING);
103 0           $self->_current_state(SERVICE_START_PENDING);
104              
105 0           $self->init_service();
106 0           $self->session_initialize();
107              
108 0           $poe_kernel->post($alias, 'poll');
109              
110             }
111              
112             # ----------------------------------------------------------------------
113             # Private Methods
114             # ----------------------------------------------------------------------
115              
116             sub init {
117 0     0 1   my $class = shift;
118              
119 0           $poe_kernel->run(); # this only initializes POE
120              
121 0           my $self = $class->SUPER::init(@_);
122              
123 0           $self->{'sessions'} = ();
124              
125 0           return $self;
126              
127             }
128              
129             sub _service_startup {
130 0     0     my $self = shift;
131              
132 0           my $alias = $self->alias;
133              
134 0           $self->log->debug("$alias: _service_startup");
135              
136 0           foreach my $session (@{$self->{'sessions'}}) {
  0            
137              
138 0           $poe_kernel->post($session, 'session_startup');
139              
140             }
141              
142             }
143              
144             sub _service_shutdown {
145 0     0     my $self = shift;
146              
147 0           my $alias = $self->alias;
148              
149 0           $self->log->debug("$alias: _service_shutdown");
150              
151 0           foreach my $session (@{$self->{'sessions'}}) {
  0            
152              
153 0           $poe_kernel->post($session, 'session_shutdown');
154              
155             }
156              
157             }
158              
159             sub _service_idle {
160 0     0     my $self = shift;
161              
162 0           my $alias = $self->alias;
163              
164 0           $self->log->debug("$alias: _service_idle");
165              
166 0           foreach my $session (@{$self->{'sessions'}}) {
  0            
167              
168 0           $poe_kernel->post($session, 'session_idle');
169              
170             }
171              
172             }
173              
174             sub _service_paused {
175 0     0     my $self = shift;
176              
177 0           my $alias = $self->alias;
178              
179 0           $self->log->debug("$alias: _service_paused");
180              
181 0           foreach my $session (@{$self->{'sessions'}}) {
  0            
182              
183 0           $poe_kernel->post($session, 'session_pause');
184              
185             }
186              
187             }
188              
189             sub _service_resumed {
190 0     0     my $self = shift;
191              
192 0           my $alias = $self->alias;
193              
194 0           $self->log->debug("$alias: _service_resumed");
195              
196 0           foreach my $session (@{$self->{'sessions'}}) {
  0            
197              
198 0           $poe_kernel->post($session, 'session_resume');
199              
200             }
201              
202             }
203              
204             1;
205              
206             __END__