EV-Etcd

 view release on metacpan or  search on metacpan

t/stream_status.t  view on Meta::CPAN

        send_frame($peer, 4, 0, 0, '');             # SETTINGS
        while (defined(my $head = read_exact($peer, 9))) {
            my ($a, $b, $c, $type, $flags, $stream) = unpack 'C3 C C N', $head;
            my $payload = read_exact($peer, ($a << 16) | ($b << 8) | $c);
            last unless defined $payload;
            if ($type == 4 && !($flags & 1)) {
                send_frame($peer, 4, 1, 0, '');     # SETTINGS ACK
            } elsif ($type == 6 && !($flags & 1)) {
                send_frame($peer, 6, 1, 0, $payload); # PING ACK
            } elsif ($type == 1) {
                # HPACK: indexed :status=200, literal content-type=application/grpc,
                # then literal grpc-status and grpc-message; no Huffman coding.
                (my $text = $message) =~ s/\{n\}/++$requests/e;
                my $headers = "\x88\x0f\x10\x10application/grpc";
                for my $field (['grpc-status', $status], ['grpc-message', $text]) {
                    $headers .= pack('CC', 0, length $field->[0]) . $field->[0]
                        . pack('C', length $field->[1]) . $field->[1];
                }
                send_frame($peer, 1, 5, $stream, $headers); # END_HEADERS | END_STREAM
            }
        }



( run in 1.861 second using v1.01-cache-2.11-cpan-99fa8243a42 )