Agent

 view release on metacpan or  search on metacpan

Agent/Transport/TCP.pm  view on Meta::CPAN


	unless ($addr = $args{Address}) {
		warn "No valid transport address defined: $args{Address}!";
		return;
	}
	my @msg = @{$args{Message}};

	# open a new socket & send the data
	my $con = new IO::Socket::INET(
		Proto => 'tcp',
		Timeout => 1,
                PeerAddr => $addr,
                Reuse => 1
	) or return ();	# use IO::Socket's $!

	for( @msg ) { $con->send( $_ ) or return (); }

	# preserve connection?
	${$args{KeepAlive}}  = $con if (ref $args{KeepAlive} eq 'SCALAR');

	$con->close();

Agent/Transport/TCP.pm  view on Meta::CPAN

	my ($self, %args) =  @_;

	my $remote = $self->accept(%args) or return ();

	return $remote->getlines();
}

sub accept {
	my ($self, %args) =  @_;

	$self->{Server}->timeout($args{Timeout}) if $args{Timeout};
	my $remote = $self->{Server}->accept() or return;
	$remote->autoflush();
	my $from = $remote->peerhost . ':' . $remote->peerport;
	print "Connection from $from\n" if $Debug;

	# does the caller want to keep the 'from' variable?
	${$args{From}} = $from if (ref $args{From} eq 'SCALAR');
	return $remote;
}

examples/Loop.pa  view on Meta::CPAN

		print "Initiating loop...\n";
		$msg->add_dest( 'TCP', $self->{Tell} ) or die "Error: $!\n";
		unless ($msg->send) {
			print "Couldn't send message!\n";
			return;
		}
	}

	while (1) {	# loop till user/remote breaks
		my @incoming = $tcp->recv(
			Timeout => 120
		) or die "Error: $!\n";
		chop (my $remote = $incoming[0]);
		print "got message from $remote.\n" if $self->{verbose};
		$msg->add_dest( 'TCP', $remote) or die "Error: $!\n";
		unless ($msg->send) {
			print "Remote end stopped receiving\n";
			return;
		}
	}
}

examples/Static.pa  view on Meta::CPAN

	print "Shuting down Static agent.\n";
}


##
# getmsg - internal.  Waits for a incoming message, & returns it.

sub getmsg {
	my ($self, $trans) = @_;		# all agents & subs are oo
	my $rmt = 'hi there!';
	my ($from, @incoming) = $trans->recv( Timeout => 120, From => \$rmt) or return;
	chomp $from;
	unless (@incoming) {
		warn "No data in message from $rmt!\n";
		return;
	}
	my ($d, $addr, $med) = split(/\s+/, $from);

	my @t = localtime(time);
	my $time = "$t[2]\:$t[1]\:$t[0] $t[5]\-$t[4]\-$t[3]";
	print "Message recv'd from '$from' ($rmt) at $time\n" if $self->{verbose};

examples/dcalc.pl  view on Meta::CPAN

	# and send the agent:
	my $agent = new Agent(%args) or die "couldn't create agent! $!";
	$agent->run();
	print "\t$host calculating '$args{Eval}'\n" if $args{verbose};
}

my $i = 1;
WHILE: while (1) {
	print "Waiting for response #$i...\n";
	my $rmt;
	my @msg = $tcp->recv( Timeout => 120, From => \$rmt) or die "Timeout reached!\n";
	print "Connection from: $rmt\n"  if $args{verbose};
	unless (@msg) {
		warn "No data in message!\n";
		next;
	}
	$i++;
	($key, $val) = split (/=/, @msg[0]);  # result should be in 1st line
	print "setting $key => $val\n" if $args{verbose};
	$hosts{$key} = $val;
	foreach (keys(%hosts)) {

examples/keepalive.pl  view on Meta::CPAN

$addr = $tcp->address();
print "Got tcp address $addr.\n";

unless ($pid=fork()) {
	# child
	print "forked. parent is $$.\n";
	my $serv;
	sleep 1;	# give time for server to setup...
        my $con = new IO::Socket::INET(
                Proto => 'tcp',
                Timeout => 10,
                PeerAddr => $addr,
                Reuse => 1
        ) or die "C: Ack! $!";
	$con->autoflush();

	print "C: made it! ", ref( $con ), "\n";
	print $con "Hello There!\n";
	print "C: ", <$con>, "finished printing, exiting.\n";;
	exit 0;
}



( run in 0.256 second using v1.01-cache-2.11-cpan-a5abf4f5562 )