class U3d::Runner
Launches Unity with given arguments
Public Class Methods
find_arg_in_args(arg_to_find, args)
click to toggle source
# File lib/u3d/unity_runner.rb, line 91 def find_arg_in_args(arg_to_find, args) raise 'Only arguments of type array supported right now' unless args.is_a?(Array) args.each_with_index do |arg, index| return args[index + 1] if arg == arg_to_find && index < args.count - 1 end nil end
find_logFile_in_args(args)
click to toggle source
rubocop:disable MethodName
# File lib/u3d/unity_runner.rb, line 82 def find_logFile_in_args(args) # rubocop:enable MethodName find_arg_in_args('-logFile', args) end
find_projectpath_in_args(args)
click to toggle source
# File lib/u3d/unity_runner.rb, line 87 def find_projectpath_in_args(args) find_arg_in_args('-projectPath', args) end
Public Instance Methods
find_and_prepare_logfile(installation, args)
click to toggle source
# File lib/u3d/unity_runner.rb, line 64 def find_and_prepare_logfile(installation, args) log_file = Runner.find_logFile_in_args(args) return nil if log_file == '/dev/stdout' if log_file # we wouldn't want to do that for the default log file. File.delete(log_file) if File.file?(log_file) # We only delete real files else log_file = installation.default_log_file end Utils.ensure_dir File.dirname(log_file) FileUtils.touch(log_file) unless File.exist? log_file log_file end
run(installation, args, raw_logs: false)
click to toggle source
# File lib/u3d/unity_runner.rb, line 31 def run(installation, args, raw_logs: false) log_file = find_and_prepare_logfile(installation, args) if raw_logs output_callback = proc do |line| UI.command_output(line.rstrip) end else analyzer = LogAnalyzer.new output_callback = proc do |line| analyzer.parse_line(line) end end if log_file tail_thread = start_tail_thread(log_file, output_callback) return unless tail_thread.status tail_thread.run end begin args.unshift(installation.exe_path) args.map!(&:argescape) U3dCore::CommandExecutor.execute_command(command: args, output_callback: output_callback) ensure if tail_thread sleep 1 Thread.kill(tail_thread) end end end
Private Instance Methods
pipe(file) { |l| ... }
click to toggle source
# File lib/u3d/unity_runner.rb, line 117 def pipe(file) File.open(file, 'r') do |f| f.extend File::Tail f.interval = 0.1 f.max_interval = 0.4 f.backward 0 Thread.stop f.tail { |l| yield l } end end
start_tail_thread(log_file, output_callback)
click to toggle source
# File lib/u3d/unity_runner.rb, line 102 def start_tail_thread(log_file, output_callback) tail_thread = Thread.new do begin pipe(log_file) { |line| output_callback.call(line) } rescue StandardError => e UI.error "Failure while trying to pipe #{log_file}: #{e.message}" e.backtrace.each { |l| UI.error " #{l}" } end end # Wait for tail_thread setup to be complete sleep 0.5 while tail_thread.status == 'run' tail_thread end