1 2# 3# Use Event for the IO::Event event handler 4# 5 6my $debug = $IO::Event::debug; 7my $edebug = $IO::Event::edebug; 8my $sdebug = $IO::Event::sdebug; 9 10package IO::Event::Event; 11 12require IO::Event; 13use strict; 14use warnings; 15 16our @ISA = qw(IO::Event::Common); 17 18sub import 19{ 20 require IO::Event; 21 IO::Event->import('no_emulate_Event'); 22} 23 24sub new 25{ 26 my ($pkg, @stuff) = @_; 27 require Event; 28 require Event::Watcher; 29 $pkg->SUPER::new(@stuff); 30} 31 32sub loop 33{ 34 require Event; 35 Event::loop(@_); 36} 37 38sub unloop_all 39{ 40 require Event; 41 Event::unloop_all(@_); 42} 43 44sub timer 45{ 46 require Event; 47 shift; 48 Event->timer(hard => 1, @_); 49} 50 51sub idle 52{ 53 require Event; 54 shift; 55 Event->idle(@_); 56} 57 58sub set_write_polling 59{ 60 my ($self, $new) = @_; 61 my $event = ${*$self}{ie_event}; 62 if ($new) { 63 $event->poll($event->poll | Event::Watcher::W()); 64 } else { 65 $event->poll($event->poll & ~Event::Watcher::W()); 66 } 67} 68 69sub set_read_polling 70{ 71 my ($self, $new) = @_; 72 my $event = ${*$self}{ie_event}; 73 if ($new) { 74 $event->poll($event->poll | Event::Watcher::R()); 75 } else { 76 if ($event) { 77 $event->poll($event->poll & ~Event::Watcher::R()); 78 } 79 } 80} 81 82sub ie_register 83{ 84 my ($self) = @_; 85 my ($fh, $fileno) = $self->SUPER::ie_register(); 86 my $R = ${*$self}{ie_readclosed} 87 ? 0 88 : Event::Watcher::R(); 89 ${*$self}{ie_want_read_events} = ! ${*$self}{ie_readclosed}; 90 ${*$self}{ie_want_write_events} = ''; 91 ${*$self}{ie_event} = Event->io( 92 fd => $fileno, 93 poll => Event::Watcher::E()|Event::Watcher::T()|$R, 94 cb => [ $self, 'ie_dispatch' ], 95 desc => ${*$self}{ie_desc}, 96 edebug => $edebug, 97 ); 98 print STDERR "registered ${*$self}{ie_fileno}:${*$self}{ie_desc} $self $fh ${*$self}{ie_event}\n" 99 if $debug; 100} 101 102sub ie_deregister 103{ 104 my ($self) = @_; 105 $self->SUPER::ie_deregister(); 106 ${*$self}{ie_event}->cancel 107 if ${*$self}{ie_event}; 108 delete ${*$self}{ie_event}; 109} 110 1111; 112