Method: RunningScript#initialize

Defined in:
lib/openc3/utilities/running_script.rb

#initialize(script_status) ⇒ RunningScript

Returns a new instance of RunningScript.



518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
# File 'lib/openc3/utilities/running_script.rb', line 518

def initialize(script_status)
  @@instance = self
  @script_status = script_status
  @script_status.pid = Process.pid
  @user_input = ''
  @prompt_id = nil
  @line_offset = 0
  @output_io = StringIO.new('', 'r+')
  @output_io_mutex = Mutex.new
  @continue_after_error = true
  @debug_text = nil
  @debug_history = []
  @debug_code_completion = nil
  @output_time = Time.now.sys

  initialize_variables()
  update_running_script_store("init")
  redirect_io() # Redirect $stdout and $stderr
  mark_breakpoints(@script_status.filename)
  disconnect_script() if @script_status.disconnect

  @script_engine = nil
  if @script_status.script_engine
    klass = OpenC3.require_class(@script_status.script_engine)
    @script_engine = klass.new(self)
  end

  # Retrieve file
  @body = ::Script.body(@script_status.scope, @script_status.filename)
  raise "Script not found: #{@script_status.filename}" if @body.nil?
  breakpoints = @@breakpoints[@script_status.filename]&.filter { |_, present| present }&.map { |line_number, _| line_number - 1 } # -1 because frontend lines are 0-indexed
  breakpoints ||= []
  running_script_anycable_publish("running-script-channel:#{@script_status.id}", { type: :file, filename: @script_status.filename, scope: @script_status.scope, text: @body.to_utf8, breakpoints: breakpoints })
  if not @script_status.script_engine and @body =~ SUITE_REGEX
    # Process the suite file in this context so we can load it
    # TODO: Do we need to worry about success or failure of the suite processing?
    ::Script.process_suite(@script_status.filename, @body, new_process: false, scope: @script_status.scope)
    # Call load_utility to parse the suite and allow for individual methods to be executed
    load_utility(@script_status.filename)
  end
end