The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Sys::Virt::IO::Async::EventImpl - Integration of libvirt into IO::Async event loop

SYNOPSIS

  use Sys::Virt;
  use Sys::Virt::Event;
  use Sys::Virt::IO::Async::EventImpl;

  use IO::Async::Loop;

  my $loop = IO::Async::Loop;
  my $impl = Sys::Virt::IO::Async::EventImpl->new;
  Sys::Virt::Event::register( $impl );


  my $conn = Sys::Virt->new( uri => 'qemu:///system' );
  $conn->domain_event_register(
     sub {
       # ... log some event data
     });

  $loop->add( $impl );
  $loop->run;

DESCRIPTION

This module implements an event loop integration for libvirt through the Sys::Virt::Event libvirt event interface bindings.

libvirt is limited to a single registered event loop. Registration must be done before the first libvirt connection is created.

LOGGING

This module implements logging using Log::Any with the module name as the logging category.

METHODS

new()

Constructor.

As there can only ever be a single event loop registered at a time, this module implements a singleton class. The new method always returns the same instance.

The returned instance is an IO::Async::Notifier that can be used to register an event loop implementation through Sys::Virt::Event::register.

$self->add_handle( $fd, $events, $callback, $opaque, $opaque_free_cb )

Implements the event loop integration protocol add_handle callback.

Adds the file handle $fd to the event loop, calling $callback for the events in the mask $events, returning an integer $watch_id for reference with update_handle and remove_handle.

Returns a non-negative int $watch_id or -1 on error.

$self->update_handle( $watch_id, $events )

Implements the event loop integration protocol update_handle callback.

Changes the events for which the callback registered through add_handle will be triggered to those specified in $events.

$self->remove_handle( $watch_id )

Implements the event loop integration protocol remove_handle callback.

Returns 0 on success, -1 on failure.

$self->add_timeout( $frequency, $callback, $opaque, $opaque_free_cb )

Implements the event loop integration protocol add_timeout callback.

Adds the file handle $fd to the event loop, calling $callback for the events in the mask $events, returning an integer $watch_id for reference with update_handle and remove_handle.

Returns a non-negative int $timer_id or -1 on error.

$self->update_handle( $timer_id, $frequency )

Implements the event loop integration protocol update_timeout callback.

Changes the duration between callback triggers; $frequency is an integer in milliseconds, with the values 0 (zero) and -1 taking special meaning: 0 means calling the callback on each event loop iteration and -1 pauses the timer.

The semantics of 0 are implemented using the watch_idle function of the event loop.

Frequency changes are implemented by stopping the current IO::Async timer and creating a new one with the desired frequency. (Where -1 simply stops the current IO::ASync timer.)

$self->remove_timeout( $timer_id )

Implements the event loop integration protocol remove_timeout callback.

Returns 0 on success, -1 on failure.

AUTHORS

  • Erik Huelsmann ehuels at gmail.com

SUPPORT

Please report bugs and ask your questions on GitHub.

LICENSE AND COPYRIGHT

This software is copyright (c) 2023 by Erik Huelsmann.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.