# -*- perl -*- # # Copyright (C) 2006 Red Hat # Copyright (C) 2006-2007 Daniel P. Berrange # # This program is free software; You can redistribute it and/or modify # it under either: # # a) the GNU General Public License as published by the Free # Software Foundation; either version 2, or (at your option) any # later version, # # or # # b) the "Artistic License" # # The file "LICENSE" distributed along with this file provides full # details of the terms and conditions of the two licenses. =pod =head1 NAME Sys::Virt::Event - An event loop contract =head1 DESCRIPTION The C module represents the contract for integrating libvirt with an event loop. This package is abstract and intended to be subclassed to provide an actual implementation. =head1 METHODS =over 4 =cut package Sys::Virt::Event; use strict; use warnings; our $eventimpl = undef; =item register($impl) Register an event loop implementation. The implementation should be a instance of a sub-class of the C package. =cut sub register { my $impl = shift; if (!(ref($impl) && $impl->isa("Sys::Virt::Event"))) { die "event implementation must be a subclass of Sys::Virt::Event"; } $eventimpl = $impl; Sys::Virt::Event::_register_impl(); } sub _add_handle { $eventimpl->add_handle(@_); } sub _update_handle { $eventimpl->update_handle(@_); } sub _remove_handle { $eventimpl->remove_handle(@_); } sub _add_timeout { $eventimpl->add_timeout(@_); } sub _update_timeout { $eventimpl->update_timeout(@_); } sub _remove_timeout { $eventimpl->remove_timeout(@_); } =item $self->_run_handle_callback($watch, $fd, $events, $cb, $opaque) A helper method for executing a callback in response to one of more C<$events> on the file handle C<$fd>. The C<$watch> number is the unique idenifier associated with the file descriptor. The C<$cb> and C<$opaque> parameters are the callback and data registered for the handle. =cut sub _run_handle_callback { my $self = shift; my $watch = shift; my $fd = shift; my $events = shift; my $cb = shift; my $opaque = shift; Sys::Virt::Event::_run_handle_callback_helper($watch, $fd, $events, $cb, $opaque); } =item $self->_run_timeout_callback($timer, $cb, $opaque) A helper method for executing a callback in response to the expiry of a timeout identified by C<$timer>. The C<$cb> and C<$opaque> parameters are the callback and data registered for the timeout. =cut sub _run_timeout_callback { my $self = shift; my $timer = shift; my $cb = shift; my $opaque = shift; Sys::Virt::Event::_run_timeout_callback_helper($timer, $cb, $opaque); } =item $self->_free_callback_opaque($ff, $opaque) A helper method for freeing the data associated with a callback. The C<$ff> and C<$opaque> parameters are the callback and data registered for the handle/timeout. =cut sub _free_callback_opaque { my $self = shift; my $ff = shift; my $opaque = shift; Sys::Virt::Event::_free_callback_opaque_helper($ff, $opaque); } 1; =back =head1 CONSTANTS =head2 FILE HANDLE EVENTS When integrating with an event loop the following constants define the file descriptor events =over 4 =item Sys::Virt::Event::HANDLE_READABLE The file descriptor has data available for read without blocking =item Sys::Virt::Event::HANDLE_WRITABLE The file descriptor has ability to write data without blocking =item Sys::Virt::Event::HANDLE_ERROR An error occurred on the file descriptor =item Sys::Virt::Event::HANDLE_HANGUP The remote end of the file descriptor closed =back =head1 AUTHORS Daniel P. Berrange =head1 COPYRIGHT Copyright (C) 2006-2009 Red Hat Copyright (C) 2006-2009 Daniel P. Berrange =head1 LICENSE This program is free software; you can redistribute it and/or modify it under the terms of either the GNU General Public License as published by the Free Software Foundation (either version 2 of the License, or at your option any later version), or, the Artistic License, as specified in the Perl README file. =head1 SEE ALSO L, C =cut