$conn->{_assort} = $sort;
$conn->{csort} = 'http';
+ my $data = delete $args{data};
+
my $ua = Mojo::UserAgent->new;
my $s;
$s .= $host;
# $tx->on(error => sub { $conn->_error(@_); });
# $tx->on(finish => sub { $conn->disconnect; });
+ $ua->on(start => sub {
+ my ($ua, $tx) = @_;
+ while (my ($k, $v) = each %args) {
+ dbg("AsyncMsg: attaching header $k: $v") if isdbg('async');
+ $tx->req->headers->header($k => $v);
+ }
+ if (defined $data) {
+ dbg("AsyncMsg: body ='$data'") if isdbg('async');
+ $tx->req->body($data);
+ }
+ });
+
+
$ua->start($tx => sub { $conn->handle_getpost(@_) });
my %args = @_;
my $handler = delete $args{handler} || \&handle_raw;
+
my $conn = $pkg->new($call, $handler);
$conn->{prefix} = delete $args{prefix} if exists $args{prefix};
$conn->{prefix} ||= '';
+ $conn->{on_disconnect} = delete $args{on_disc} || delete $args{on_disconnect};
$r = $conn->connect($host, $port, on_connect => &_on_raw_connect);
return $r ? $conn : undef;
}
my $dxchan = DXChannel::get($conn->{caller});
if ($dxchan) {
no strict 'refs';
- $ondisc->($conn, $dxchan)
+ $ondisc->($conn, $dxchan);
+ delete $conn->{on_disconnect};
}
}
delete $conn->{mojo};
$conn->SUPER::disconnect;
}
+sub _send_later
+{
+ my $conn = shift;
+ my $m = shift;
+
+ if (isdbg('async')) {
+ my $s = $m;
+ $s =~ s/([\%\x00-\x1f\x7f-\xff])/sprintf("%%%02X", ord($1))/eg;
+ dbg("AsyncMsg: send $s");
+ }
+ $conn->send_later($m);
+}
+
sub DESTROY
{
my $conn = shift;