File Coverage

examples/04-websocket-echo/app.pl
Criterion Covered Total %
statement 24 25 96.0
branch 9 12 75.0
condition n/a
subroutine 4 4 100.0
pod n/a
total 37 41 90.2


line stmt bran cond sub pod time code
1 1     1   193459 use strict;
  1         2  
  1         35  
2 1     1   3 use warnings;
  1         1  
  1         47  
3 1     1   4 use Future::AsyncAwait;
  1         2  
  1         11  
4              
5 8     8   11 async sub app {
6 8         12 my ($scope, $receive, $send) = @_;
7              
8 8 100       63 die "Unsupported scope type: $scope->{type}" if $scope->{type} ne 'websocket';
9              
10 4         13 my $event = await $receive->();
11 4 50       59 die "Expected websocket.connect" if $event->{type} ne 'websocket.connect';
12              
13 4         12 await $send->({ type => 'websocket.accept' });
14              
15 4         119 while (1) {
16 9         179 my $frame = await $receive->();
17 9 100       487 if ($frame->{type} eq 'websocket.receive') {
    50          
18 5         6 my %payload;
19 5 100       11 if (defined $frame->{text}) {
    50          
20 4         10 $payload{text} = "echo: $frame->{text}";
21             }
22             elsif (defined $frame->{bytes}) {
23 1         3 $payload{bytes} = $frame->{bytes};
24             }
25             else {
26 0         0 next;
27             }
28 5         16 await $send->({ type => 'websocket.send', %payload });
29             }
30             elsif ($frame->{type} eq 'websocket.disconnect') {
31 4         37 last;
32             }
33             }
34             }
35              
36             \&app; # Return coderef when loaded via do