ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent/Impl/Glib.pm
Revision: 1.1
Committed: Wed Apr 27 01:26:44 2005 UTC (19 years, 1 month ago) by root
Branch: MAIN
Log Message:
*** empty log message ***

File Contents

# Content
1 package AnyEvent::Impl::Glib;
2
3 use Glib ();
4
5 my $maincontext = Glib::MainContext->default;
6
7 sub new_from_fh {
8 my ($class, $fh) = @_;
9 bless { fh => $fh }, $class;
10 }
11
12 sub cb {
13 my ($self, $cb) = @_;
14 $self->{cb} = $cb;
15 $self;
16 }
17
18 sub poll {
19 my ($self, $r, $w, $e) = @_;
20
21 remove Glib::Source delete $self->{source} if $self->{source};
22
23 my @cond;
24 push @cond, "in" if $r;
25 push @cond, "out" if $w;
26 push @cond, "err" if $e;
27
28 my $cb = \$self->{cb}; # avoid $self-reference
29
30 $self->{source} = add_watch Glib::IO fileno $self->{fh}, \@cond, sub {
31 $$cb->(); 1;
32 };
33
34 $self;
35 }
36
37 sub DESTROY {
38 my ($self) = @_;
39
40 remove Glib::Source delete $self->{source} if $self->{source};
41 }
42
43 #############
44
45 sub new_signal {
46 my $class = shift;
47
48 bless \my $x, $class;
49 }
50
51 sub send {
52 ${$_[0]}++;
53 }
54
55 sub wait {
56 $maincontext->iteration (1) while !${$_[0]};
57 }
58
59 1;
60