NAME
IO::Async::JSONStream
- send or receive lines of JSON data in IO::Async
SYNOPSIS
use IO::Async::JSONStream;
use IO::Async::Loop;
my $loop = IO::Async::Loop->new;
my $jsonstream = IO::Async::JSONStream->new;
$loop->add( $jsonstream );
$jsonstream->connect(
host => "my.server",
service => 12345,
)->then( sub {
$jsonstream->write_json( [ data => { goes => "here" } ] );
$jsonstream->read_json
})->on_done( sub {
my ( $data ) = @_;
print "Received the data $data\n";
})->get;
DESCRIPTION
This subclass of IO::Async::Stream implements a simple JSON-encoded data stream, sending and receiving Perl data structures by JSON-encoded lines of text.
EVENTS
The following events are invoked, either using subclass methods or CODE references in parameters:
on_json $data
Invoked when a line of JSON-encoded data is received. It is passed the decoded data as a regular Perl data structure.
on_json_error $error
Invoked when a line is received but JSON decoding fails. It is passed the failure exception from the JSON decoder.
PARAMETERS
The following named parameters may be passed to new
or configure
:
- on_json => CODE
- on_json_error => CODE
-
CODE references for event handlers.
- eol => STRING
-
Optional. Sets the string used for the line ending on the stream when writing JSON. Defaults to
\n
if not given.
METHODS
$jsonstream->write_json( $data, %args )
Writes a new line of JSON-encoded data from the given Perl data structure.
Other arguments are passed to the write
method. Returns a Future
which will complete when the line is flushed.
$jsonstream->read_json ==> $data
Returns a Future that will yield the next line of JSON-encoded data to be read from the stream. This takes place instead of the on_json
event.
If a JSON decoding error occurs it will result in a failed Future with the operation name json
and the line on which decoding failed as its argument.
AUTHOR
Paul Evans <leonerd@leonerd.org.uk>
Incremental parsing support added by Frew Schmidt