Agent::Transport - the Transportable Agent Perl module


Agent documentation Contained in the Agent distribution.

Index


Code Index:

NAME

Top

Agent::Transport - the Transportable Agent Perl module

SYNOPSIS

Top

  use Agent;

  my $t = new Agent::Transport(
	Medium => $name,
	Address => $addr
	...
  );
  ...
  my $data = $t->recv( [%args] );

DESCRIPTION

Top

This package provides a standard interface to different transport mediums. Agent::Transport does not contain any transport code itself; it contains a constructor, and code that autoloads the appropriate transport methods.

CONSTRUCTOR

Top

new( %args )

new() must be passed at least a Medium. The Address argument is strongly recomended (and should be required in most cases), as it's best not to let the system make assumptions. new() decides which Transport package to use base upon the Medium specified. Address is the destination in that medium. Any other arguments will be documented in the Agent::Transport subclasses (such as Agent::Transport::TCP).

STANDARD API METHODS

Top

These methods are implemented in all transport subclasses.

$t->recv()

recv attempts to retrieve a message (from said address, over said transport medium). Returns the data if called in a scalar context, or a list containing ($data, $from_address) if called in an array context. Returns nothing (i.e. sv_null or an empty list) if unsuccessful.

$t->transport()

Returns the transport medium over which the object communicates.

$t->address()

Returns the primary address at which the object can be reached.

$t->aliases()

Returns a list of addresses at which the object can be reached.

STANDARD SUBROUTINES

Top

send( %args )

send too must be passed a Medium and an Address. In addition, it also needs a Message as either an anonymous array or a reference to an array.

valid_address( %args )

This checks to see if the Address provided is valid within the Medium specified by checking the syntax of the address. It does not check to see whether or not said address exists. Returns the address if successful, or nothing otherwise.

SEE ALSO

Top

Agent, Agent::Transport::*

AUTHOR

Top

Steve Purkis <spurkis@engsoc.carleton.ca>

COPYRIGHT

Top

THANKS

Top

The perl5-agents mailing list.


Agent documentation Contained in the Agent distribution.

#!/usr/bin/perl

##
# Transport class stub for Agent.pm messages.
# Steve Purkis <spurkis@engsoc.carleton.ca>
# June 21, 1998
##

package Agent::Transport;
use vars qw( $Debug );

#$Debug = 1;


##
# Autoloaded, non-OO Stuff
##

sub AUTOLOAD {
	return if (@_ % 2);	# was this _meant_ to be called?
	my (%args) = @_;
	my $med = delete $args{Medium} or return;
	$AUTOLOAD =~ /^((\w+\:\:)+)(\w+)$/;
	my $pkg = $1 . $med;
	my $sub = "$pkg\:\:$+";

	print "Autoloading $sub...\n" if $Debug;

	unless (defined &$sub) {
		# try Autoloading it...
		unless (eval "require $pkg") {
			warn "Couldn't autoload $pkg!\n";
			return;
		}
		unless (defined &$sub) {
			warn "Call to non-existing sub: $sub!\n";
			return;
		}
	}
	goto &$sub;
}


##
# OO Stuff
##

sub new {
	my ($class, %args) = @_;
	my $med = delete $args{Medium} or return;
	my $pkg = "$class\:\:$med";
	my $sub = "$pkg\:\:new";

	unless (defined &$sub) {
		unless (eval "require $pkg") {
			warn "Couldn't Autoload $pkg!\n";
			return;
		}
	}
	# does this really need to be wrapped in an eval?
	return eval "new $pkg( \%args )";
}

1;


__END__