DR-Tarantool
view release on metacpan or search on metacpan
lib/DR/Tarantool/CoroClient.pm view on Meta::CPAN
use utf8;
use strict;
use warnings;
package DR::Tarantool::CoroClient;
use base 'DR::Tarantool::AsyncClient';
use Coro;
use Carp;
use AnyEvent;
=head1 NAME
DR::Tarantool::CoroClient - an asynchronous coro driver for
L<Tarantool|http://tarantool.org>
=head1 SYNOPSIS
use DR::Tarantool::CoroClient;
use Coro;
my $client = DR::Tarantool::CoroClient->connect(
port => $port,
spaces => $spaces;
);
my @res;
for (1 .. 100) {
async {
push @res => $client->select(space_name => $_);
}
}
cede while @res < 100;
=head1 METHODS
=head2 connect
Connects to Tarantool.
=head3 Arguments
The same as L<DR::Tarantool::AsyncClient/connect>, excluding the callback.
Returns a connection handle or croaks an error.
=head3 Additional arguments
=over
=item raise_error
If B<true> (default behaviour) the driver throws an exception for each
server error.
=back
=cut
sub connect {
my ($class, %opts) = @_;
my $raise_error = 1;
$raise_error = delete $opts{raise_error} if exists $opts{raise_error};
my $cb = Coro::rouse_cb;
$class->SUPER::connect(%opts, $cb);
my ($self) = Coro::rouse_wait;
unless (ref $self) {
croak $self if $raise_error;
$! = $self;
return undef;
}
( run in 0.637 second using v1.01-cache-2.11-cpan-39bf76dae61 )