ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent/Impl/Glib.pm
Revision: 1.2
Committed: Thu Dec 1 18:56:18 2005 UTC (18 years, 6 months ago) by root
Branch: MAIN
Changes since 1.1: +45 -26 lines
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 root 1.2 my %RWE = (
8     in => 'r',
9     out => 'w',
10     pri => 'e',
11     );
12    
13     sub io {
14     my ($class, %arg) = @_;
15    
16     my $self = \%arg, $class;
17     my $rcb = \$self->{cb};
18    
19     my @cond;
20     push @cond, "in" if $self->{poll} =~ /r/i;
21     push @cond, "out" if $self->{poll} =~ /w/i;
22     push @cond, "pri" if $self->{poll} =~ /e/i;
23    
24     $self->{source} = add_watch Glib::IO fileno $self->{fh}, \@cond, sub {
25     $$rcb->(join "", map $RWE{$_}, @{ $_[1] });
26     ! ! $$rcb
27     };
28 root 1.1
29 root 1.2 $self
30 root 1.1 }
31    
32 root 1.2 sub timer {
33     my ($class, %arg) = @_;
34 root 1.1
35 root 1.2 my $self = \%arg, $class;
36     my $cb = $self->{cb};
37 root 1.1
38 root 1.2 $self->{source} = add Glib::Timeout $self->{after} * 1000, sub {
39     $cb->();
40     0
41 root 1.1 };
42    
43 root 1.2 $self
44 root 1.1 }
45    
46 root 1.2 sub cancel {
47 root 1.1 my ($self) = @_;
48    
49 root 1.2 return unless HASH:: eq ref $self;
50    
51 root 1.1 remove Glib::Source delete $self->{source} if $self->{source};
52 root 1.2 $self->{cb} = undef;
53     delete $self->{cb};
54 root 1.1 }
55    
56 root 1.2 sub DESTROY {
57     my ($self) = @_;
58 root 1.1
59 root 1.2 $self->cancel;
60     }
61    
62     sub condvar {
63 root 1.1 my $class = shift;
64    
65     bless \my $x, $class;
66     }
67    
68 root 1.2 sub broadcast {
69     ${$_[0]}++
70 root 1.1 }
71    
72     sub wait {
73     $maincontext->iteration (1) while !${$_[0]};
74     }
75    
76 root 1.2 $AnyEvent::MODEL = __PACKAGE__;
77    
78 root 1.1 1;
79