AnyEvent-Hiredis

 view release on metacpan or  search on metacpan

lib/AnyEvent/Hiredis.pm  view on Meta::CPAN

package AnyEvent::Hiredis;
BEGIN {
    $AnyEvent::Hiredis::VERSION = '0.06';
}
# ABSTRACT: AnyEvent hiredis API
use strict;
use warnings;
use namespace::autoclean;
use Hiredis::Async;
use AnyEvent;

sub new {
    my ($class, %args) = @_;

    my $self = bless {}, $class;

    $self->{host}  = $args{host} || '127.0.0.1';
    $self->{port}  = $args{port} || 6379;

    $self->{redis} = $self->_connect;

    return $self;
}

sub _connect {
    my ($self) = @_;

    my $redis = Hiredis::Async->new(
        host => $self->{host},
        port => $self->{port},

        addRead  => sub { $self->_add_read_cb(@_)  },
        delRead  => sub { $self->_del_read_cb(@_)  },
        addWrite => sub { $self->_add_write_cb(@_) },
        delWrite => sub { $self->_del_write_cb(@_) },
    );

    return $redis;
}

sub _add_read_cb {
    my ($self, $fd) = @_;

    return if defined $self->{reader};

    $self->{reader} = AnyEvent->io( fh => $fd, poll => 'r', cb => sub {
        $self->{redis}->HandleRead;
    });

    return;
}

sub _del_read_cb {
    my ($self, $fd) = @_;

    $self->{reader} = undef;

    return;
}

sub _add_write_cb {
    my ($self, $fd) = @_;

    return if defined $self->{writer};

    $self->{writer} = AnyEvent->io( fh => $fd, poll => 'w', cb => sub {
        $self->{redis}->HandleWrite;
    });



( run in 0.726 second using v1.01-cache-2.11-cpan-5a3173703d6 )