Agent

 view release on metacpan or  search on metacpan

Agent/Message.pm  view on Meta::CPAN

#!/usr/bin/perl

##
# Messaging class to standardize agent communication across multiple
#  transport mediums.
# Steve Purkis, <spurkis@engsoc.carleton.ca>
# June 21, 1998
##

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

#$Debug = 1;

sub new {
	my ($class, %args) = @_;
	my $self = {};

	$self->{Body} = $args{Body};
	if ($args{Transport}) {
		${$self->{Transport}}{$args{Transport}} = [ $args{Address} ];
		if ($args{SendNow}) {
			bless $self, $class;
			return $self->send;
		}
	}
	bless $self, $class;
}

sub send {
	my $self = shift;
	my %args = @_;
	my %trans = %{$self->{Transport}};
	my @return;

	foreach $medium (keys(%trans)) {
		my @addrs = @{$trans{$medium}};
		print "Sending message in $medium.\n" if $Debug;
		foreach $address (@addrs) {
			push @return, &Agent::Transport::send(
				Medium  => $medium,
				Address => $address,
				Message => $self->{Body},
				%args
			);
		}
	}
	return @return;
}

sub add_dest {
	my $self = shift;
	my $medium = shift or return;
	push (@{${$self->{Transport}}{$medium}}, @_);
}

sub del_dest {
	my $self = shift;
	my $medium = shift or return;
	my %trans = %{$self->{Transport}};
	foreach my $addr (@_) {
		;	# can't be bothered at the moment.
	}
}

sub del_transport {
	my $self = shift;
	my %trans = %{$self->{Transport}};
	for (@_) {
		delete ${$self->{Transport}}{$_};
	}
}

sub body {
	my $self = shift;
	$self->{Body} = \@_ if @_;
	return @{$self->{Body}};
}

sub dump {
	my $self = shift;
	my %trans = %{$self->{Transport}};

	foreach $med (keys(%trans)) {
		print "Medium: $med\nAddress(es): ";
		my @addrs = @{$trans{$med}};
		for (@addrs) { print "$_; "; }



( run in 3.092 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )