cro-websocket-message
Cro::WebSocket::Message
This class represents a message received over or to be sent over a web socket. A message will either be parsed from, or serialized into, one or more frames.
Opcodes
The Cro::WebSocket::Message::Opcode
enum contains the various kinds of
message: Text
, Binary
, Ping
, Pong
, and Close
. These are available
as just Cro::WebSocket::Message::Close
, for example. The message level has
no Continuation opcode, because Message includes all frames' content already.
It can be used as follows:
if $message.opcode ~~ Cro::WebSocket::Message::Close { ... }
Attributes
opcode
opcode
attribute represents one of enum value, list of possible
values is described in Opcodes
section.
fragmented
fragmented
attribute is a Bool
flag that represents whether this
message fragmented or not. It is set automatically in case of special
new
implementation usage or must be set to correct value during
instance creation.
fragmented
is True
if the Message consists of more than one
frame. It can be determined during serialization(if body-byte-stream
emits more than one value) or during Message parsing(if the first
Message frame is not final).
Methods
new
The class may be instantiated with "shortcut" new
calls or in a
default way (specifying each attribute). Such constructors can take
Blob
, Str
and Supply
, that can be used as follows:
my $m1 = Cro::WebSocket::Message.new('Single-frame Message with a text string and Text opcode');
my $m2 = Cro::WebSocket::Message.new('Single-frame Message with a Blob and Binary opcode'.encode);
my $m3 = Cro::WebSocket::Message.new(supply { emit "Multi-frame message"; emit "With binary opcode"; });
In the case that a body serializer is being used, then any object that these can handle may be passed.
Message instance can be also created as
my $m = Cro::WebSocket::Message.new(opcode => Binary,
fragmented => False, body-byte-stream => supply {
emit 'Content'.encode('utf-8');
});
is-text
Returns Bool
value True
if the Message's opcode
is Text
.
is-binary
Returns Bool
value True
if the Message's opcode
is Binary
.
is-data
Returns Bool
value True
if the Message's opcode
is Text
or
Binary
.
body-byte-stream
body-byte-stream
is a Supply that emits Blob
s. It may be used to process
the payload of every frame as it arrives over the network, however in cases
where this streaming behavior is not required it is much more convenient to
use the body-blob
, body-text
, and body
methods for access to the
message payload.
body-text
Returns a Promise that will be kept on every frame's payload
collection finish. The result
value of the Promise will be a Str
that contains the Message payload decoded as UTF-8
.
body-blob
Returns a Promise that will be kept on every frame's payload
collection finish. The result
value of the Promise will be a Buf
that contains the Message payload.
body
By default, this will be a Str
for Text messages and a Buf
for Binary
messages. However, if an alternate body parser/serializer has been set up,
then it might be some other object (for example, if a JSON body parser is
configured then it would be the Hash
or List
resulting from JSON parsing).