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