allow to run multiple games at once

This commit is contained in:
ehouse 2005-09-14 05:12:07 +00:00
parent a3305e2ca9
commit aa1161cbaf

View file

@ -6,11 +6,12 @@ use strict;
my $xwdir = "../linux/linux";
my $cookie = "COOKIE";
my @cookies = ( "COOKIE" );
my $nPlayers = 2;
my $port = 10999;
my $dict = "~/personal/dicts/SOWPODS2to15.xwd";
my $quit = "";
my $gettingCookies = 0;
my @names = (
"Fred",
@ -23,7 +24,8 @@ while ( my $param = shift( @ARGV ) ) {
print STDERR "param $param\n";
if ( $param =~ m|-C| ) {
$cookie = shift( @ARGV );
$cookies[0] = shift( @ARGV );
$gettingCookies = 1;
next;
} elsif ( $param =~ m|-nplayers| ) {
$nPlayers = shift( @ARGV );
@ -33,36 +35,44 @@ while ( my $param = shift( @ARGV ) ) {
$port = shift( @ARGV );
} elsif ( $param =~ m|-quit| ) {
$quit = " -q ";
} elsif ( $gettingCookies ) {
push @cookies, $param;
next;
} else {
usage();
exit 1;
}
$gettingCookies = 0;
}
my $cmdBase = "cd $xwdir && ./xwords -d $dict -C $cookie $quit -p $port";
foreach my $cookie (@cookies) {
for ( my $p = 0; $p < $nPlayers; ++$p ) {
print STDERR "p = $p\n";
my $cmd = $cmdBase;
if ( $p == 0 ) { # server case
$cmd .= " -s ";
for ( my $i = 1; $i < $nPlayers; ++$i ) {
$cmd .= " -N ";
my $cmdBase = "cd $xwdir && ./xwords -d $dict -C $cookie $quit -p $port";
print "$cmdBase\n";
for ( my $p = 0; $p < $nPlayers; ++$p ) {
print STDERR "p = $p\n";
my $cmd = $cmdBase;
if ( $p == 0 ) { # server case
$cmd .= " -s ";
for ( my $i = 1; $i < $nPlayers; ++$i ) {
$cmd .= " -N ";
}
}
}
$cmd .= " -r $names[$p]";
$cmd .= " -r $names[$p]";
my $pid = fork;
print STDERR "fork => $pid.\n";
if ( $pid ) {
# parent; give child chance to get ahead
sleep 1;
} else {
exec "$cmd";
last;
}
}
my $pid = fork;
print STDERR "fork => $pid.\n";
if ( $pid ) {
# parent; give child chance to get ahead
# sleep 1;
} else {
exec "$cmd 2>/dev/null &";
last;
}
}
}
sub usage()
{