package Net::Async::HelloWorld;
use strict;
use warnings;
use base qw( IO::Async::Protocol::Stream );
sub on_read
{
my $self = shift;
my ( $buffref, $eof ) = @_;
return 0 unless $$buffref =~ s/^(.*)\n//;
my $line = $1;
if( $line =~ m/^HELLO (.*)/ ) {
my $name = $1;
$self->invoke_event( on_hello => $name );
}
return 1;
}
sub send_hello
{
my $self = shift;
my ( $name ) = @_;
$self->write( "HELLO $name\n" );
}
This small example elides such details as error handling, which a real protocol implementation would be likely to contain.
It contains an instance of an IO::Async::Stream object which it uses for actual communication, rather than being a subclass of it, allowing a level of independence from the actual stream being used. For example, the stream may actually be an IO::Async::SSLStream to allow the protocol to be used over SSL.
As with IO::Async::Stream, it is required that by the time the protocol object is added to a Loop, that it either has an "on_read" method, or has been configured with an "on_read" callback handler.
$protocol->write( $data )
Writes the given data by calling the "write" method on the contained transport stream.
$protocol->connect( %args )
Sets up a connection to a peer, and configures the underlying "transport" for the Protocol. Calls IO::Async::Protocol "connect" with "socktype" set to "stream".