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