shogi-server source
Revisão | a801bce4cbe5494357c26261c4f14a8ac01ef56d (tree) |
---|---|
Hora | 2018-08-26 11:58:04 |
Autor | Daigo Moriwaki <daigo@debi...> |
Commiter | Daigo Moriwaki |
Merge remote-tracking branch 'origin/master' into wdoor-stable
@@ -35,6 +35,7 @@ require 'shogi_server/config' | ||
35 | 35 | require 'shogi_server/util' |
36 | 36 | require 'shogi_server/league/floodgate_thread.rb' |
37 | 37 | require 'pathname' |
38 | +require 'set' | |
38 | 39 | require 'tempfile' |
39 | 40 | |
40 | 41 | ################################################# |
@@ -435,6 +436,9 @@ def main | ||
435 | 436 | |
436 | 437 | $league.dir = $topdir |
437 | 438 | |
439 | + # Set of connected players | |
440 | + $players = Set.new | |
441 | + | |
438 | 442 | config = {} |
439 | 443 | config[:BindAddress] = "0.0.0.0" |
440 | 444 | config[:Port] = port |
@@ -462,8 +466,9 @@ def main | ||
462 | 466 | |
463 | 467 | srand |
464 | 468 | server = WEBrick::GenericServer.new(config) |
465 | - ["INT", "TERM"].each do |signal| | |
469 | + ["INT", "TERM"].each do |signal| | |
466 | 470 | trap(signal) do |
471 | + $players.each {|p| p.kill} | |
467 | 472 | server.shutdown |
468 | 473 | setup_floodgate.kill |
469 | 474 | end |
@@ -495,6 +500,14 @@ def main | ||
495 | 500 | log_message(sprintf("user %s login", player.name)) |
496 | 501 | login.process |
497 | 502 | player.setup_logger($options["player-log-dir"]) if $options["player-log-dir"] |
503 | + | |
504 | + $mutex.lock | |
505 | + begin | |
506 | + $players.add(player) | |
507 | + ensure | |
508 | + $mutex.unlock | |
509 | + end | |
510 | + | |
498 | 511 | player.run(login.csa_1st_str) # loop |
499 | 512 | $mutex.lock |
500 | 513 | begin |
@@ -504,6 +517,7 @@ def main | ||
504 | 517 | player.finish |
505 | 518 | $league.delete(player) |
506 | 519 | log_message(sprintf("user %s logout", player.name)) |
520 | + $players.delete(player) | |
507 | 521 | ensure |
508 | 522 | $mutex.unlock |
509 | 523 | end |