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

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.