|
|
| version 1.4, 2010/12/10 23:28:09 | version 1.5, 2010/12/13 05:54:50 |
|---|---|
| Line 39 my $EOL = "\015\012"; | Line 39 my $EOL = "\015\012"; |
| ## | ## |
| ## These will be moved in to a config file | ## These will be moved in to a config file |
| ## | ## |
| my $DISPLAY = ":0.0"; | my $DISPLAY = ":0.0"; |
| my $BBS_NAME = "Hell's Dominion BBS"; | my $BBS_NAME = "Hell's Dominion BBS"; |
| my $BBS_NODE = 0; | my $BBS_NODE = 0; |
| my $DBCONF = "/tmp/dosbox-__NODE__.conf"; | my $DBCONF = "/tmp/dosbox-__NODE__.conf"; |
| my $BBS_CMD = "DISPLAY=$DISPLAY /usr/bin/dosbox -conf "; | my $BBS_CMD = "DISPLAY=$DISPLAY /usr/bin/dosbox -conf "; |
| my $LOG = "/var/log/bbs.log"; | my $LOG = "/var/log/bbs.log"; |
| my $MAX_NODE = 1; | my $MAX_NODE = 1; |
| my $DOSBOXT = "dosbox.conf.template"; | my $DOSBOXT = "dosbox.conf.template"; |
| my $BASE_PORT = 5000; | my $BASE_PORT = 7000; |
| my $LOCK_PATH = "/tmp"; | |
| ## | ## |
| ## Check that we are 'root' | ## Check that we are 'root' |
| Line 98 while( 1 ) { sleep 1; } | Line 99 while( 1 ) { sleep 1; } |
| ############################################################################### | ############################################################################### |
| ############################################################################### | ############################################################################### |
| sub logmsg { print "$0 $$ ", scalar localtime, ":@_\n" } | sub logmsg { print STDOUT "$0 $$ ", scalar localtime, ":@_\n" } |
| ############################################################################### | ############################################################################### |
| ## startNetServer( ); | ## startNetServer( ); |
| Line 134 sub startNetServer | Line 135 sub startNetServer |
| ## Find the next available node | ## Find the next available node |
| ## | ## |
| my $node = 0; | my $node = 0; |
| my $lock_file = ""; | |
| foreach (1 .. $MAX_NODE) | foreach (1 .. $MAX_NODE) |
| { | { |
| next if ( $node ); | print "Searching for lock: " . $LOCK_PATH."/".$BBS_NAME."_node".$_.".lock\n"; |
| if ( ! $nodes[$_] ) | next if ( -f $LOCK_PATH."/".$BBS_NAME."_node".$_.".lock" ); |
| { | |
| $node = $BBS_NODE = $_; | |
| $nodes[$node]++; | |
| } | |
| } | |
| print STDOUT "Node Status: \n" . Dumper( @nodes ); | ## |
| ## Create node lock file | |
| ## | |
| $lock_file = $LOCK_PATH."/".$BBS_NAME."_node".$_.".lock"; | |
| open LOCK, ">$lock_file"; | |
| close( LOCK ); | |
| $node = $BBS_NODE = $_; | |
| } | |
| print "Using lock: " . $LOCK_PATH."/".$BBS_NAME."_node".$node.".lock\n"; | |
| ## | ## |
| ## Create our dosbox config | ## Create our dosbox config |
| Line 175 print STDOUT "Node Status: \n" . Dumper( | Line 180 print STDOUT "Node Status: \n" . Dumper( |
| } | } |
| defined( $childPID ) || die( "Cannot fork: $!\n" ); | defined( $childPID ) || die( "Cannot fork: $!\n" ); |
| select $hostConnection; | |
| ## | ## |
| ## Default file descriptor to the client and turn on autoflush | ## Default file descriptor to the client and turn on autoflush |
| ## | ## |
| $hostConnection->autoflush( 1 ); | $hostConnection->autoflush( 1 ); |
| print $hostConnection "Welcome to $BBS_NAME!" . $EOL; | print "Welcome to $BBS_NAME!" . $EOL; |
| ## | ## |
| if ( ! $BBS_NODE ) | if ( ! $lock_file ) |
| { | { |
| print $hostConnection "No available nodes. Try again later.".$EOL; | print "No available nodes. Try again later.".$EOL; |
| exit; | exit; |
| } | } |
| print $hostConnection "Starting BBS on node $BBS_NODE...$EOL"; | print "Starting BBS on node $BBS_NODE...$EOL"; |
| ## | ## |
| ## Launch BBS via dosbox | ## Launch BBS via dosbox |
| Line 197 print STDOUT "Node Status: \n" . Dumper( | Line 204 print STDOUT "Node Status: \n" . Dumper( |
| my $bbsPID = fork( ); | my $bbsPID = fork( ); |
| if ( $bbsPID ) | if ( $bbsPID ) |
| { | { |
| select STDOUT; | |
| my $cmd = $BBS_CMD . $DBCONF; | my $cmd = $BBS_CMD . $DBCONF; |
| exec( $cmd ); | system( $cmd ); |
| print "Shutting down node $BBS_NODE\n"; | |
| ## | |
| ## Remove Lock | |
| ## | |
| unlink( $lock_file ); | |
| unlink( $DBCONF ); | |
| exit; | exit; |
| } | } |
| Line 229 print STDOUT "Node Status: \n" . Dumper( | Line 243 print STDOUT "Node Status: \n" . Dumper( |
| print $hostConnection $byte; | print $hostConnection $byte; |
| } | } |
| $nodes[$BBS_NODE] = 0; | $nodes[$BBS_NODE] = 0; |
| print "Post-Disconnect Node Status: \n" . Dumper( @nodes ); | |
| kill( "TERM" => $kidpid ); | kill( "TERM" => $kidpid ); |
| } | } |
| else | else |
| Line 262 sub shutdown | Line 275 sub shutdown |
| { | { |
| my $signame = shift || 0; | my $signame = shift || 0; |
| select STDOUT; | |
| &logmsg( "$0: Shutdown (SIG$signame) received.\n" ) | &logmsg( "$0: Shutdown (SIG$signame) received.\n" ) |
| if( $signame ); | if( $signame ); |