AnyEvent

 view release on metacpan or  search on metacpan

lib/AnyEvent/Impl/UV.pm  view on Meta::CPAN

      my $rc = UV::poll_start $master->{w}, $master->{mode}, sub {
         io_watcher_cb $master->{slaves}, @_;
      };
      warnlog $rc if $rc;
   }
}

sub io {
   my ($class, %arg) = @_;
   my $fd = fileno $arg{fh};
   defined $fd or $fd = $arg{fh};

   my $master = $io_watchers{$fd} ||= { fd => $fd };

   unless (defined $master->{w}) {
      $master->{w} = UV::poll_init $fd;
      return warnlog $master->{w} unless defined $master->{w};
      $master->{slaves} = {};
   }

   my $slave = AnyEvent::Impl::UV::io_slave->new ($master);
   weaken ($master->{slaves}->{$slave} = $slave);

   $slave->{mode}  = $arg{poll} eq "r" ? UV::READABLE : UV::WRITABLE;
   $master->{mode} = 0 unless defined $master->{mode};
   $slave->{cb}    = $arg{cb};

   unless ($master->{mode} & $slave->{mode}) {
      $master->{mode} |= $slave->{mode};
      my $rc = UV::poll_start $master->{w}, $master->{mode}, sub {
         io_watcher_cb $master->{slaves}, @_;
      };
      warnlog $rc if $rc;
   }

   $slave
}

sub AnyEvent::Impl::UV::handle::new {
   my ($class, $w, $start, $stop, @args) = @_;
   return warnlog $w unless defined $w;

   my $rc = $start->($w, @args);
   warnlog $rc if $rc;

   bless { w => $w, stop => $stop }, $class
}

sub AnyEvent::Impl::UV::handle::DESTROY {
   my $h  = $_[0];
   return unless $h->{w};
   my $rc = $h->{stop}($h->{w});
   warnlog $rc if $rc;
   UV::close $h->{w};
}

sub idle {
   my ($class, %arg) = @_;

   AnyEvent::Impl::UV::handle->new (
      UV::timer_init,
      \&UV::idle_start,
      \&UV::idle_stop,
      $arg{cb}
   );
}

sub timer {
   my ($class, %arg) = @_;

   AnyEvent::Impl::UV::handle->new (
      UV::timer_init,
      \&UV::timer_start,
      \&UV::timer_stop,
      $arg{after} * 1000, $arg{interval} * 1000, $arg{cb}
   );
}

sub now { UV::now }

sub _poll {
   UV::run UV::RUN_ONCE;
}

sub AnyEvent::CondVar::Base::_wait {
   UV::run UV::RUN_NOWAIT until exists $_[0]{_ae_sent};
}

=head1 SEE ALSO

L<AnyEvent>, L<UV>.

=head1 AUTHOR

 Mike Lowell <mikedotlowell@gmail.com>

=cut

1



( run in 0.357 second using v1.01-cache-2.11-cpan-39bf76dae61 )