Protocol-DBus
view release on metacpan or search on metacpan
lib/Protocol/DBus/Peer.pm view on Meta::CPAN
package Protocol::DBus::Peer;
use strict;
use warnings;
=encoding utf-8
=head1 NAME
Protocol::DBus::Peer - base class for a D-Bus peer
=head1 SYNOPSIS
$dbus->send_call(
interface => 'org.freedesktop.DBus.Properties',
member => 'GetAll',
signature => 's',
path => '/org/freedesktop/DBus',
destination => 'org.freedesktop.DBus',
body => [ 'org.freedesktop.DBus' ],
)->then( sub { .. } );
my $msg = $dbus->get_message();
# Same pattern as the IO::Handle method.
$dbus->blocking(0);
my $fileno = $dbus->fileno();
$dbus->flush_write_queue() if $dbus->pending_send();
# Iâm not sure why youâd want to do this, but â¦
$dbus->big_endian();
=head1 DESCRIPTION
This class contains D-Bus logic that is useful in both client and
server contexts. (Currently this distribution does not include a server
implementation.)
=cut
use Call::Context;
use Protocol::DBus::Message;
use Protocol::DBus::Parser;
use Protocol::DBus::WriteMsg;
use constant _PROMISE_CLASS => 'Promise::ES6';
#----------------------------------------------------------------------
=head1 METHODS
=head2 $msg = I<OBJ>->get_message()
This returns a single instace of L<Protocol::DBus::Message>, or undef if
no message is available. It will also fire the appropriate âon_returnâ
method on METHOD_RETURN or ERROR messages.
The backend I/O logic reads data in chunks; thus, if there is a message
already available in the read buffer, no I/O is done. If youâre doing
non-blocking I/O then it is thus B<vital> that, every time the DBus socket
is readable, you call this function until undef is returned.
=cut
sub get_message {
my $msg = $_[0]->{'_parser'}->get_message();
if ($msg) {
if (my $serial = $msg->get_header('REPLY_SERIAL')) {
delete $_[0]->{'_on_armageddon'}{$serial};
if (my $cb = delete $_[0]->{'_on_return'}{$serial}) {
$cb->($msg);
}
}
}
( run in 0.633 second using v1.01-cache-2.11-cpan-39bf76dae61 )