1 # File: Stem/Event/EventPM.pm
3 # This file is part of Stem.
4 # Copyright (C) 1999, 2000, 2001 Stem Systems, Inc.
6 # Stem is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
11 # Stem is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with Stem; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 # For a license to use the Stem under conditions other than those
21 # described here, to purchase support for this software, or to purchase a
22 # commercial warranty contract, please contact Stem Systems at:
24 # Stem Systems, Inc. 781-643-7504
25 # 79 Everett St. info@stemsystems.com
31 =head1 Stem::Event::EventPM
33 This module wraps the CPAN module Event.pm for use by the rest of
34 Stem. It provides the common API for the standard Stem::Event classes:
39 =item Stem::Event::Plain
40 =item Stem::Event::Timer
41 =item Stem::Event::Signal
42 =item Stem::Event::Read
43 =item Stem::Event::Write
49 package Stem::Event::EventPM ;
54 @Stem::Event::EventPM::ISA = qw( Stem::Event ) ;
56 # basic wrappers for top level Event.pm calls.
59 $Event::DIED = \&_died ;
64 my( $event, $err ) = @_ ;
66 Carp::cluck( "Stem::Event died: $err", "die called in [$event]\n",
67 map( "<$_>", caller() ), "\n" ) ;
74 Event::unloop_all( 1 ) ;
77 ############################################################################
79 package Stem::Event::Plain ;
85 # create the plain event watcher
87 $self->{'idle_event'} = Event->idle(
88 'cb' => [ $self, 'idle_triggered' ],
99 $self->trigger( 'plain' ) ;
100 my $idle_event = delete $self->{'idle_event'} ;
101 $idle_event->cancel() ;
104 ############################################################################
106 package Stem::Event::Signal ;
112 my $signal = $self->{'signal'} ;
114 # create the signal event watcher
116 return Event->signal(
117 'cb' => sub { $self->trigger() },
123 my( $self, $signal_event ) = @_ ;
124 $signal_event->cancel() ;
128 ############################################################################
130 package Stem::Event::Timer ;
137 'cb' => [ $self, 'timer_triggered' ],
138 'hard' => $self->{'hard'},
139 'after' => $self->{'delay'},
140 'interval' => $self->{'interval'},
145 my( $self, $timer_event, $delay ) = @_ ;
146 $timer_event->again() ;
151 my( $self, $timer_event ) = @_ ;
152 $timer_event->cancel() ;
157 my( $self, $timer_event ) = @_ ;
158 $timer_event->start() ;
163 my( $self, $timer_event ) = @_ ;
164 $timer_event->stop() ;
168 ############################################################################
170 package Stem::Event::Read ;
176 # create the read event watcher
179 'cb' => sub { $self->trigger() },
180 'fd' => $self->{'fh'},
186 my( $self, $read_event ) = @_ ;
187 $read_event->cancel() ;
192 my( $self, $read_event ) = @_ ;
193 $read_event->start() ;
198 my( $self, $read_event ) = @_ ;
199 $read_event->stop() ;
203 ############################################################################
205 package Stem::Event::Write ;
211 # create the write event watcher
213 # create the read event watcher
216 'cb' => sub { $self->trigger() },
217 'fd' => $self->{'fh'},
225 my( $self, $write_event ) = @_ ;
226 $write_event->cancel() ;
231 my( $self, $write_event ) = @_ ;
232 $write_event->start() ;
237 my( $self, $write_event ) = @_ ;
238 $write_event->stop() ;