# vim: ts=2 sw=2 noexpandtab # A TCP echo client that looks like it's blocking when it's not. use lib qw(../lib); use Reflex::Interval; use Reflex::Connector; use Reflex::Stream; use Reflex::Callbacks qw(cb_coderef); use ExampleHelpers qw(eg_say); # Run a timer so we can prove the client isn't blocking. my $ticker = Reflex::Interval->new( interval => 0.001, auto_repeat => 1, on_tick => cb_coderef { eg_say("tick...") }, ); # Begin connecting to eg-34-tcp-server-echo.pl. my $connector = Reflex::Connector->new(port => 12345); # Wait for the connection to finish. my $event = $connector->next(); # Failure? Ok, bye. if ($event->_name() eq "failure") { eg_say($event->formatted()); exit; } # Otherwise success. eg_say("Connected."); # Start a stream to work with it. my $stream = Reflex::Stream->new( handle => $event->handle(), rd => 1, ); # Say hello. $stream->put("Hello, world!\n"); # Handle a response. $event = $stream->next(); if ($event->_name() eq "data") { eg_say("Got echo response: ", $event->octets()); } else { eg_say("Unexpected event: ", $event->_name()); } # Bored now. exit;