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   220705 use strict;
  1         3  
  1         40  
2 1     1   4 use warnings;
  1         2  
  1         59  
3 1     1   5 use Future::AsyncAwait;
  1         1  
  1         13  
4              
5 8     8   14 async sub app {
6 8         14 my ($scope, $receive, $send) = @_;
7              
8 8 100       81 die "Unsupported scope type: $scope->{type}" if $scope->{type} ne 'websocket';
9              
10 4         8 my $event = await $receive->();
11 4 50       84 die "Expected websocket.connect" if $event->{type} ne 'websocket.connect';
12              
13 4         16 await $send->({ type => 'websocket.accept' });
14              
15 4         144 while (1) {
16 9         198 my $frame = await $receive->();
17 9 100       463 if ($frame->{type} eq 'websocket.receive') {
    50          
18 5         25 my %payload;
19 5 100       18 if (defined $frame->{text}) {
    50          
20 4         13 $payload{text} = "echo: $frame->{text}";
21             }
22             elsif (defined $frame->{bytes}) {
23 1         4 $payload{bytes} = $frame->{bytes};
24             }
25             else {
26 0         0 next;
27             }
28 5         27 await $send->({ type => 'websocket.send', %payload });
29             }
30             elsif ($frame->{type} eq 'websocket.disconnect') {
31 4         14 last;
32             }
33             }
34             }
35              
36             \&app; # Return coderef when loaded via do