Class: AcpcDealer::DealerRunner
- Inherits:
-
Object
- Object
- AcpcDealer::DealerRunner
- Defined in:
- lib/acpc_dealer/dealer_runner.rb
Defined Under Namespace
Classes: Arguments
Constant Summary collapse
- DEALER_COMMAND_FORMAT =
> array should correspond to those in the
dealer_arguments
of ::start.> (see ::start)
[ # @note The name of the match to start. :match_name, # @note The path of the game definition to use. :game_def_file_name, # @note The number of hands to play. :hands, # @note The random seed to use. :random_seed, # @note The names of the players in the game. Should be specified as a space delimited string of names. :player_names, # @note Should be specified as an option string that the dealer will understand. :options ]
Class Method Summary collapse
-
.command(dealer_arguments, port_numbers = nil) ⇒ String
> Defaults to the ACPC Dealer’s default.
-
.command_components(dealer_arguments, port_numbers = nil) ⇒ Array
> Defaults to the ACPC Dealer’s default.
-
.ports_for_players(number_of_players) ⇒ Array<Integer>
> so it’s possible that the ports will come into use between calling this method and => using them.
-
.start(dealer_arguments, log_directory = nil, port_numbers = nil, save_action_log = true) ⇒ Hash
> Defaults to <dealer_arguments>.logs.
Class Method Details
.command(dealer_arguments, port_numbers = nil) ⇒ String
> Defaults to the ACPC Dealer’s default.
43 44 45 |
# File 'lib/acpc_dealer/dealer_runner.rb', line 43 def self.command(dealer_arguments, port_numbers=nil) command_components(dealer_arguments, port_numbers).join(' ') end |
.command_components(dealer_arguments, port_numbers = nil) ⇒ Array
> Defaults to the ACPC Dealer’s default.
31 32 33 34 35 36 37 |
# File 'lib/acpc_dealer/dealer_runner.rb', line 31 def self.command_components(dealer_arguments, port_numbers=nil) dealer_start_command = DEALER_COMMAND_FORMAT.inject([AcpcDealer::DEALER_PATH]) do |command_, parameter| command_ += dealer_arguments[parameter].to_s.split end dealer_start_command << "-p" << "#{port_numbers.join(',')}" if port_numbers dealer_start_command end |
.ports_for_players(number_of_players) ⇒ Array<Integer>
> so it’s possible that the ports will come into use between calling this method and
> using them.
91 92 93 94 95 |
# File 'lib/acpc_dealer/dealer_runner.rb', line 91 def self.ports_for_players(number_of_players) number_of_players.times.inject([]) do |ports, i| ports << TCPServer.open('localhost', 0) { |s| s.addr[1] } end end |
.start(dealer_arguments, log_directory = nil, port_numbers = nil, save_action_log = true) ⇒ Hash
> Defaults to <dealer_arguments>.logs.
> Defaults to the ACPC’s default.
> use to connect to the new dealer instance (key :port_numbers
).
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/acpc_dealer/dealer_runner.rb', line 56 def self.start(dealer_arguments, log_directory=nil, port_numbers=nil, save_action_log=true) unless log_directory log_directory = File.("../#{dealer_arguments[:match_name]}.logs", __FILE__) end FileUtils.mkdir_p log_directory unless Dir.exist?(log_directory) IO.pipe do |read_io, write_io| pid = if save_action_log ProcessRunner.go( command_components(dealer_arguments, port_numbers), err: [ File.join(log_directory, "#{dealer_arguments[:match_name]}.actions.log"), File::CREAT|File::WRONLY ], out: write_io, chdir: log_directory ) else ProcessRunner.go( command_components(dealer_arguments, port_numbers), out: write_io, chdir: log_directory ) end {pid: pid, port_numbers: read_io.gets.split, log_directory: log_directory} end end |