AnyEvent-Connection
view release on metacpan or search on metacpan
lib/AnyEvent/Connection.pm view on Meta::CPAN
# callback will be called only 10 times;
=item destroy
Close connection, destroy all associated objects and timers, clean self
=back
=head1 CONNECT METHODS
When connected, there are some methods, that proxied to raw connection or to AE::Handle
=over 4
=item push_write
See AE::Handle::push_write
=item push_read
See AE::Handle::push_read
=item unshift_read
See AE::Handle::unshift_read
=item say
Same as push_write + newline
=item reply
Same as push_write + newline
=back
For next methods there is a feature.
Callback will be called in any way, either by successful processing or by error or object destruction
=over 4
=item recv($bytes, %args, cb => $cb->())
Similar to
$fh->push_read(chunk => $bytes, $cb->());
=item command($data, %args, cb => $cb->());
Similar to
$fh->push_write($data);
$fh->push_read(line => $cb->());
=back
=cut
sub new {
my $self = shift->SUPER::new(@_);
$self->init(@_);
return $self;
}
sub init {
my $self = shift;
$self->{debug} ||= 0;
$self->{connected} = 0;
$self->{connecting} = 0;
$self->{reconnect} = 1 unless defined $self->{reconnect};
$self->{timeout} ||= 3;
$self->{timers} = {};
$self->{rawcon} ||= 'AnyEvent::Connection::Raw';
#warn "Init $self";
}
#sub connected {
# warn "Connected";
# shift->event(connected => ());
#}
sub connect {
my $self = shift;
$self->{connecting} and return;
$self->{connecting} = 1;
weaken $self;
croak "Only client can connect but have $self->{type}" if $self->{type} and $self->{type} ne 'client';
$self->{type} = 'client';
warn "Connecting to $self->{host}:$self->{port}..." if $self->{debug};
# @rewrite s/sub {/cb connect {/;
$self->{_}{con}{cb} = sub {
pop;
delete $self->{_}{con};
if (my $fh = shift) {
warn "Connected @_" if $self->{debug};
$self->{con} = $self->{rawcon}->new(
fh => $fh,
timeout => $self->{timeout},
debug => $self->{debug},
);
$self->{con}->reg_cb(
disconnect => sub {
warn "Disconnected $self->{host}:$self->{port} @_" if $self->{debug};
$self->disconnect(@_);
$self->_reconnect_after();
},
);
$self->{connected} = 1;
#warn "Send connected event";
$self->event(connected => $self->{con}, @_);
} else {
warn "Not connected $self->{host}:$self->{port}: $!" if $self->{debug};
$self->event(connfail => "$!");
$self->_reconnect_after();
}
};
$self->{_}{con}{pre} = sub { $self->{timeout} };
$self->{_}{con}{grd} =
AnyEvent::Socket::tcp_connect
( run in 0.659 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )