Skip to content

Commit

Permalink
connection errors get higher priority
Browse files Browse the repository at this point in the history
  • Loading branch information
kraih committed Dec 2, 2017
1 parent af2c1f4 commit fe8a8cc
Showing 1 changed file with 18 additions and 20 deletions.
38 changes: 18 additions & 20 deletions lib/Mojo/UserAgent.pm
Expand Up @@ -66,7 +66,23 @@ sub start {
return $tx;
}

sub start_p { shift->_promise(0, @_) }
sub start_p {
my ($self, $tx) = @_;

my $promise = Mojo::Promise->new;
$self->start(
$tx => sub {
my ($self, $tx) = @_;
my $err = $tx->error;
return $promise->reject($err->{message}) if $err && !$err->{code};
return $promise->reject('WebSocket handshake failed')
if $tx->req->is_handshake && !$tx->is_websocket;
$promise->resolve($tx);
}
);

return $promise;
}

sub websocket {
my ($self, $cb) = (shift, pop);
Expand All @@ -75,7 +91,7 @@ sub websocket {

sub websocket_p {
my $self = shift;
return $self->_promise(1, $self->build_websocket_tx(@_));
return $self->start_p($self->build_websocket_tx(@_));
}

sub _cleanup {
Expand Down Expand Up @@ -263,24 +279,6 @@ sub _finish {
$c->{cb}($self, $old) unless $self->_redirect($c, $old);
}

sub _promise {
my ($self, $ws, $tx) = @_;

my $promise = Mojo::Promise->new;
$self->start(
$tx => sub {
my ($self, $tx) = @_;
$promise->reject('WebSocket handshake failed')
if $ws && !$tx->is_websocket;
my $err = $tx->error;
$promise->resolve($tx) if !$err || $err->{code};
$promise->reject($err->{message});
}
);

return $promise;
}

sub _read {
my ($self, $id, $chunk) = @_;

Expand Down

0 comments on commit fe8a8cc

Please sign in to comment.