Protocol::WebSocket::Frame(3p)

NAME
Protocol::WebSocket::Frame - WebSocket Frame

SYNOPSIS
    # Create frame
    my $frame = Protocol::WebSocket::Frame->new('123');
    $frame->to_bytes;

    # Parse frames
    my $frame = Protocol::WebSocket::Frame->new;
    $frame->append(...);
    $f->next; # get next message
    $f->next; # get another next message

DESCRIPTION
Construct or parse a WebSocket frame.

RANDOM MASK GENERATION
By default built-in "rand" is used, this is not secure, so when Math::Random::Secure is installed it is used instead.

METHODS

  "new"
    Protocol::WebSocket::Frame->new('data');   # same as (buffer => 'data')
    Protocol::WebSocket::Frame->new(buffer => 'data', type => 'close');

Create a new Protocol::WebSocket::Frame instance. Automatically detect if the passed data is a Perl string (UTF-8 flag) or bytes.

When called with more than one arguments, it takes the following named arguments (all of them are optional).

"buffer" => STR (default: "")
    The payload of the frame.

"type" => TYPE_STR (default: "text")
    The type of the frame. Accepted values are:

        continuation
        text
        binary
        ping
        pong
        close

"opcode" => INT (default: 1)
    The opcode of the frame. If "type" field is set to a valid string, this field is ignored.

"fin" => BOOL (default: 1)
    "fin" flag of the frame. "fin" flag must be 1 in the ending frame of fragments.

"masked" => BOOL (default: 0)
    If set to true, the frame will be masked.

"version" => VERSION_STR (default: 'draft-ietf-hybi-17')
    WebSocket protocol version string. See Protocol::WebSocket for valid version strings.

  "is_continuation"
Check if frame is of continuation type.

  "is_text"
Check if frame is of text type.

  "is_binary"
Check if frame is of binary type.

  "is_ping"
Check if frame is a ping request.

  "is_pong"
Check if frame is a pong response.

  "is_close"
Check if frame is of close type.

  "opcode"
    $opcode = $frame->opcode;
    $frame->opcode(8);

Get/set opcode of the frame.

  "masked"
    $masked = $frame->masked;
    $frame->masked(1);

Get/set masking of the frame.

  "append"
    $frame->append($chunk);

Append a frame chunk.

Beware that this method is destructive. It makes $chunk empty unless $chunk is read-only.

  "next"
    $frame->append(...);

    $frame->next; # next message

Return the next message as a Perl string (UTF-8 decoded).

  "next_bytes"
Return the next message as is.

  "to_bytes"
Construct a WebSocket message.

  "max_payload_size"
The maximum size of the payload. You may set this to 0 or "undef" to disable checking the payload size.