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

# Content
1 package AnyEvent::Impl::Glib;
2
3 use Glib ();
4
5 my $maincontext = Glib::MainContext->default;
6
7 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
29 $self
30 }
31
32 sub timer {
33 my ($class, %arg) = @_;
34
35 my $self = \%arg, $class;
36 my $cb = $self->{cb};
37
38 $self->{source} = add Glib::Timeout $self->{after} * 1000, sub {
39 $cb->();
40 0
41 };
42
43 $self
44 }
45
46 sub cancel {
47 my ($self) = @_;
48
49 return unless HASH:: eq ref $self;
50
51 remove Glib::Source delete $self->{source} if $self->{source};
52 $self->{cb} = undef;
53 delete $self->{cb};
54 }
55
56 sub DESTROY {
57 my ($self) = @_;
58
59 $self->cancel;
60 }
61
62 sub condvar {
63 my $class = shift;
64
65 bless \my $x, $class;
66 }
67
68 sub broadcast {
69 ${$_[0]}++
70 }
71
72 sub wait {
73 $maincontext->iteration (1) while !${$_[0]};
74 }
75
76 $AnyEvent::MODEL = __PACKAGE__;
77
78 1;
79