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

# User Rev Content
1 root 1.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