#!/usr/bin/perl -w
# USAGE: fgfsscript [host [port]]
# $Id$
# Public Domain

use strict;
use IO::Socket;

my $host = (shift || 'localhost');
my $port = (shift || 5501);
my ($fgfs, $i);



# main()
{
	chdir;
	$fgfs = &connect($host, $port, 120) || die " can't open socket\n";
	&send("data");

	# wait for random altitude (0--3000 ft.) to be reached
	my $alt = int(rand(3000));
	print "disaster begins at $alt ft. AGL\n";
	while (1) {
		sleep(1);
		$i = &get("/position/altitude-agl-ft");
		print "\r" . int($i) . " ft.";
		print "\n" and last if $i > $alt;
	}

	print "start fuel dumping  :-)\n";
	for ($i = 0; $i < 4; $i++) {
		sleep(rand(60));
		&set("/consumables/fuel/tank[$i]/level-gal_us", 0);
		print "tank $i empty\n";
	}
	
	&send("quit");
	close $fgfs;
}




sub get()
{	
	&send("get " . shift);
	eof $fgfs and die "\nconnection closed by host";
	$_ = <$fgfs>;
	s/\015?\012$//;
	/^-ERR (.*)/ and die "\nfgfs error: $1\n";
	return $_;
}


sub set()
{	
	my $prop = shift;
	my $value = shift;
	&send("set $prop $value");
}


sub send()
{	
	print $fgfs shift, "\015\012";
}


sub connect()
{
	my $host = shift;
	my $port = shift;
	my $timeout = (shift || 120);
	my $socket;
	STDOUT->autoflush(1);
	print "connect ";
	while ($timeout--) {
		if ($socket = IO::Socket::INET->new(
				Proto => 'tcp',
				PeerAddr => $host,
				PeerPort => $port)) {
			print ".. done.\n";
			$socket->autoflush(1);
			sleep 1;
			return $socket;
		}	
		print ".";
		sleep(1);
	}
       	return 0;
}


# vi:ts=8:sw=8:noet:nowrap:cindent