NAME

   Ryu::Async - use Ryu with IO::Async

SYNOPSIS

    #!/usr/bin/env perl
    use strict;
    use warnings;
    use IO::Async::Loop;
    use Ryu::Async;
    # This will generate a lot of output, but is useful
    # for demonstrating lifecycles. Drop this to 'info' or
    # 'debug' to make it more realistic.
    use Log::Any::Adapter qw(Stdout), log_level => 'trace';
    #
    my $loop = IO::Async::Loop->new;
    $loop->add(
           my $ryu = Ryu::Async->new
    );
    {
           my $timer = $ryu->timer(
                   interval => 0.10,
           )->take(10)
            ->each(sub { print "tick\n" });
           warn $timer->describe;
           $timer->get;
    }

DESCRIPTION

   This is an IO::Async::Notifier subclass for interacting with Ryu.

METHODS

from

   Creates a new Ryu::Source from a thing.

   The exact details of this are likely to change in future, but a few
   things that are expected to work:

    $ryu->from($io_async_stream_instance)
        ->by_line
        ->each(sub { print "Line: $_\n" });
    $ryu->from([1..1000])
        ->sum
        ->each(sub { print "Total was $_\n" });

from_stream

   Create a new Ryu::Source from an IO::Async::Stream instance.

   Note that a stream which is not already attached to an
   IO::Async::Notifier will be added as a child of this instance.

stdin

   Create a new Ryu::Source that wraps STDIN.

   As with other IO::Async::Stream wrappers, this will emit data as soon
   as it's available, as raw bytes.

   Use "by_line" in Ryu::Source and "decode" in Ryu::Source to split into
   lines and/or decode from UTF-8.

stdout

   Returns a new Ryu::Sink that wraps STDOUT.

timer

   Provides a Ryu::Source which emits an empty string at selected
   intervals.

   Takes the following named parameters:

     * interval - how often to trigger the timer, in seconds (fractional
     values allowed)

     * reschedule - type of rescheduling to use, can be soft, hard or
     drift as documented in IO::Async::Timer::Periodic

   Example:

    $ryu->timer(interval => 1, reschedule => 'hard')
        ->combine_latest(...)

run

   Creates an IO::Async::Process.

source

   Returns a new Ryu::Source instance.

udp_client

   Creates a new UDP client.

   This provides a sink for "outgoing" in Ryu::Async::Client packets, and
   a source for "incoming" in Ryu::Async::Client responses.

     * uri - an optional URI of the form udp://host:port

     * host - which host to listen on, defaults to 0.0.0.0

     * port - the port to listen on

   Returns a Ryu::Async::Client instance.

udp_server

sink

   Returns a new Ryu::Sink.

   The label will default to the calling package/class and method, with
   some truncation rules:

     * A Net::Async:: prefix will be replaced by Na.

     * A Web::Async:: prefix will be replaced by Wa.

     * A IO::Async:: prefix will be replaced by Ia.

     * A Tickit::Async:: prefix will be replaced by Ta.

     * A Tickit::Widget:: prefix will be replaced by TW.

   This list of truncations is subject to change, so please don't rely on
   any of these in string matches or similar - better to set your own
   label if you need consistency.

SEE ALSO

     * Ryu

     * IO::Async

AUTHOR

   Tom Molesworth <[email protected]>

LICENSE

   Copyright Tom Molesworth 2011-2019. Licensed under the same terms as
   Perl itself.