NAME

Reflex::UdpPeer - Base class for UDP networking peers.

VERSION

version 0.004

SYNOPSIS

Inherit it.

{
	package Reflex::UdpPeer::Echo;
	use Moose;
	extends 'Reflex::UdpPeer';

	sub on_udppeer_datagram {
		my ($self, $args) = @_;
		my $data = $args->{datagram};

		if ($data =~ /^\s*shutdown\s*$/) {
			$self->destruct();
			return;
		}

		$self->send(
			datagram    => $data,
			remote_addr => $args->{remote_addr},
		);
	}

	sub on_udppeer_error {
		my ($self, $args) = @_;
		warn "$args->{op} error $args->{errnum}: $args->{errstr}";
		$self->destruct();
	}
}

Use it as a helper.

{
	package Reflex::UdpPeer::Echo;
	use Moose;
	extends 'Reflex::Object';
	use Reflex::UdpPeer;

	has port => (
		isa     => 'Int',
		is      => 'ro',
	);

	has peer => (
		isa     => 'Reflex::UdpPeer|Undef',
		is      => 'rw',
		traits  => ['Reflex::Trait::Observer'],
		setup   => sub {
			my $self = shift;
			Reflex::UdpPeer->new(port => $self->port());
		},
	);

	sub on_peer_datagram {
		my ($self, $args) = @_;
		my $data = $args->{datagram};

		if ($data =~ /^\s*shutdown\s*$/) {
			$self->peer(undef);
			return;
		}

		$self->peer()->send(
			datagram    => $data,
			remote_addr => $args->{remote_addr},
		);
	}

	sub on_peer_error {
		my ($self, $args) = @_;
		warn "$args->{op} error $args->{errnum}: $args->{errstr}";
		$self->peer(undef);
	}
}

Compose objects with its base role. See Reflex::Role::UdpPeer.

DESCRIPTION

Reflex::UdpPeer is a base class for UDP network peers.

TODO - Complete the documentation.

SEE ALSO

Reflex "ACKNOWLEDGEMENTS" in Reflex "ASSISTANCE" in Reflex "AUTHORS" in Reflex "BUGS" in Reflex "BUGS" in Reflex "CONTRIBUTORS" in Reflex "COPYRIGHT" in Reflex "LICENSE" in Reflex "TODO" in Reflex