AnyEvent-PacketForwarder
view release on metacpan or search on metacpan
examples/pktproxy.pl view on Meta::CPAN
$self;
}
sub _on_connected_to_server {
my ($self, $server_socket) = @_;
if (defined $server_socket) {
$self->{server_socket} = $server_socket;
my $client_socket = $self->{client_socket};
use Data::Dumper;
print STDERR Data::Dumper->Dump([$self], [qw($self)]);
$self->{c2s_forwarder} = packet_forwarder $client_socket, $server_socket, $header_templ,
weak_method_callback($self, '_on_data', 'c2s');
$self->{s2c_forwarder} = packet_forwarder $server_socket, $client_socket, $header_templ,
weak_method_callback($self, '_on_data', 's2c');
}
else {
warn "unable to connect to remote server: $!\n";
delete $pp_by_client_fd{$self->{client_fd}};
}
lib/AnyEvent/PacketForwarder.pm view on Meta::CPAN
# data is: 0:reader, 1:out, 2:queue_size, 3:queue, 4:cb, 5:out_watcher
my $data = [ undef , $out , $queue_size , [] , $cb , undef ];
$data->[0] = packet_reader $in, $templ, $max_load_length, sub { _packet($_[0], $data) };
my $obj = \$data;
bless $obj;
}
sub _push {
my $data = $_[1];
# use Data::Dumper;
# print STDERR Data::Dumper->Dump([\@_, $data], [qw(@_ $data)]);
if (length $_[0]) {
my $queue = $data->[3];
push @$queue, $_[0];
$data->[0]->pause if @$queue == $data->[2];
$data->[5] ||= AE::io $data->[1], 1, sub { _write($data) };
}
}
sub _packet {
my $data = $_[1];
if (defined $_[0]) {
# use Data::Dumper;
# print STDERR Data::Dumper->Dump([$data], [qw($data)]);
$data->[4]->($_[0]);
_push(@_);
return;
}
$data->[4]->();
_fatal_write($data, ENODATA) unless defined $data->[5];
undef $data->[0];
}
sub _write {
( run in 0.246 second using v1.01-cache-2.11-cpan-4d50c553e7e )