Module: AcpcTableManager::Opponents
- Extended by:
- SimpleLogging
- Defined in:
- lib/acpc_table_manager/opponents.rb
Class Method Summary collapse
-
.start(match) ⇒ Array<Integer>
PIDs of the opponents started.
Methods included from SimpleLogging
Class Method Details
.start(match) ⇒ Array<Integer>
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/acpc_table_manager/opponents.rb', line 14 def self.start(match) @logger ||= ::AcpcTableManager.new_log 'opponents.log' opponents = match.bots(AcpcTableManager.config.dealer_host) log __method__, num_opponents: opponents.length if opponents.empty? raise StandardError.new("No opponents found to start for \"#{match.name}\" (#{match.id.to_s})!") end opponents_log_dir = File.join(AcpcTableManager.config.log_directory, 'opponents') FileUtils.mkdir(opponents_log_dir) unless File.directory?(opponents_log_dir) bot_start_commands = opponents.map do |name, info| { args: [info[:runner], info[:host], info[:port]], log: File.join(opponents_log_dir, "#{match.name}.#{match.id}.#{name}.log") } end bot_start_commands.map do |bot_start_command| log( __method__, { bot_start_command_parameters: bot_start_command[:args], command_to_be_run: bot_start_command[:args].join(' ') } ) pid = Timeout::timeout(3) do ProcessRunner.go( bot_start_command[:args].map { |e| e.to_s }, { [:err, :out] => [bot_start_command[:log], File::CREAT|File::WRONLY] } ) end log( __method__, { bot_started?: true, pid: pid } ) pid end end |