Skip to content

Commit

Permalink
simplify build_message logic
Browse files Browse the repository at this point in the history
  • Loading branch information
kraih committed Nov 28, 2013
1 parent 1dd8ffa commit a0f8e0f
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 27 deletions.
47 changes: 21 additions & 26 deletions lib/Mojo/Transaction/WebSocket.pm
Expand Up @@ -87,30 +87,23 @@ sub build_message {
my ($self, $frame) = @_;

# Text
$frame = {text => encode('UTF-8', $frame)}
if ref $frame ne 'HASH' && ref $frame ne 'ARRAY';

if (ref $frame eq 'HASH') {

# JSON
$frame->{text} = Mojo::JSON->new->encode($frame->{json}) if $frame->{json};

# Raw text or binary
if (exists $frame->{text}) { $frame = [1, 0, 0, 0, TEXT, $frame->{text}] }
else { $frame = [1, 0, 0, 0, BINARY, $frame->{binary}] }

# "permessage-deflate" extension
if ($self->compressed) {
$frame->[1] = 1;
my $deflate = $self->{deflate}
|| Compress::Raw::Zlib::Deflate->new(WindowBits => -15, MemLevel => 8);
$self->{deflate} = $deflate if $self->context_takeover;
$deflate->deflate(\$frame->[5], my $out);
$deflate->flush($out, Z_SYNC_FLUSH);
$frame->[5] = substr $out, 0, length($out) - 4;
}
}
$frame = {text => encode('UTF-8', $frame)} if ref $frame ne 'HASH';

# JSON
$frame->{text} = Mojo::JSON->new->encode($frame->{json}) if $frame->{json};

# Raw text or binary
if (exists $frame->{text}) { $frame = [1, 0, 0, 0, TEXT, $frame->{text}] }
else { $frame = [1, 0, 0, 0, BINARY, $frame->{binary}] }

# "permessage-deflate" extension
return $self->build_frame(@$frame) unless $self->compressed;
my $deflate = $self->{deflate}
|| Compress::Raw::Zlib::Deflate->new(WindowBits => -15, MemLevel => 8);
$self->{deflate} = $deflate if $self->context_takeover;
$deflate->deflate(\$frame->[5], my $out);
$deflate->flush($out, Z_SYNC_FLUSH);
@$frame[1, 5] = (1, substr($out, 0, length($out) - 4));
return $self->build_frame(@$frame);
}

Expand Down Expand Up @@ -241,9 +234,12 @@ sub resume {

sub send {
my ($self, $msg, $cb) = @_;

$self->once(drain => $cb) if $cb;
$self->{write} .= $self->build_message($msg);
if (ref $msg eq 'ARRAY') { $self->{write} .= $self->build_frame(@$msg) }
else { $self->{write} .= $self->build_message($msg) }
$self->{state} = 'write';

return $self->emit('resume');
}

Expand Down Expand Up @@ -562,7 +558,6 @@ Build WebSocket frame.
my $bytes = $ws->build_message({binary => $bytes});
my $bytes = $ws->build_message({text => $bytes});
my $bytes = $ws->build_message({json => {test => [1, 2, 3]}});
my $bytes = $ws->build_message([$fin, $rsv1, $rsv2, $rsv3, $op, $bytes]);
my $bytes = $ws->build_message($chars);
Build WebSocket message.
Expand Down Expand Up @@ -680,7 +675,7 @@ Resume L</"handshake"> transaction.
$ws = $ws->send({binary => $bytes});
$ws = $ws->send({text => $bytes});
$ws = $ws->send({json => {test => [1, 2, 3]}});
$ws = $ws->send([$fin, $rsv1, $rsv2, $rsv3, $op, $bytes]);
$ws = $ws->send([$fin, $rsv1, $rsv2, $rsv3, $op, $payload]);
$ws = $ws->send($chars);
$ws = $ws->send($chars => sub {...});
Expand Down
2 changes: 1 addition & 1 deletion lib/Mojolicious/Controller.pm
Expand Up @@ -800,7 +800,7 @@ is set to the value C<XMLHttpRequest>.
$c = $c->send({binary => $bytes});
$c = $c->send({text => $bytes});
$c = $c->send({json => {test => [1, 2, 3]}});
$c = $c->send([$fin, $rsv1, $rsv2, $rsv3, $op, $bytes]);
$c = $c->send([$fin, $rsv1, $rsv2, $rsv3, $op, $payload]);
$c = $c->send($chars);
$c = $c->send($chars => sub {...});
Expand Down

0 comments on commit a0f8e0f

Please sign in to comment.