#!/usr/bin/perl -w
#


BEGIN {
	push(@INC, "../CTPort/");
};

use CTPort;
use POSIX;
use IO::Handle;

sub slave_loop();
sub logger($);
sub procargs(@);
sub daemonize($);
sub do_pickup_thing();
sub do_ring_thing();


my $port=1208;
my $testcount=0;
my $daemon=0;
my $ctport;
my $event_source;
my $suscount=0;

procargs(@ARGV);
my $logfile="log/$port-slave.log";
open (LOGFILE,">>$logfile");
autoflush LOGFILE 1;
daemonize($daemon);

logger("STARTUP: Connecting to CTServer on port $port.");
$ctport = new Telephony::CTPort($port);
$hold_party = "";

slave_loop();

exit;


sub slave_loop(){
	$ctport->off_hook();
	$ctport->clear();
	$success=0;
	$foo=0;
	while($foo<10){
		$beans{$foo}=0;
		$foo++;
	}
	while(1) {
		$dig="+";
		$dig = $ctport->collect(1,20);
		logger("slave: Got digit [$dig]");
		$beans{$dig}=1;
		if ($dig eq "9"){
			# test for completeness
			$foo=0;
			$completeness=0;
			while($foo<10){
				$completeness+=$beans{$foo};
				$beans{$foo}=0;
				$foo++;
			}
			if ($completeness == 10){
				$success++;
				logger("slave: Completed [$success]");
			}
			else {
				logger("slave: failed [$completeness/10]");
			}
		}
	}
}

 

sub logger($){
	my $foo = strftime("%Y/%m/%d-%H:%M:%S",localtime(time));
	#print STDERR "$foo [$port] $_[0]\n";
	print LOGFILE "$foo [$port] $_[0]\n";
}

sub procargs(@){
	while($bit = shift @ARGV){
		if ($bit =~ /-d/){
			$daemon=1;
		}
		elsif($bit =~ /-p/){
			$port = 1200 + shift @ARGV;
		}
	}
}

sub daemonize($){
	if ($_[0] == 1){
		# make a daemon
		defined(my $pid = fork) or die "Can't fork: $!";
		exit if $pid;
#		setsid or die "Can't start a new session: $!";
		chdir '/' or die "Can't chdir to /: $!";
		umask 0;
		open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
		open STDOUT, '/dev/null' or die "Can't write to /dev/null: $!";
	}
	return(1);
}

