Class: ScriptCore::MessageProcessor

Inherits:
Object
  • Object
show all
Defined in:
lib/script_core/message_processor.rb

Instance Method Summary collapse

Constructor Details

#initializeMessageProcessor



5
6
7
8
9
10
11
# File 'lib/script_core/message_processor.rb', line 5

def initialize
  @measurements = {}
  @stat = ScriptCore::Stat::Null
  @errors = []
  @output = nil
  @stdout = ""
end

Instance Method Details

#process_all(channel) ⇒ Object



13
14
15
16
17
18
19
20
21
22
# File 'lib/script_core/message_processor.rb', line 13

def process_all(channel)
  unpacker = ScriptCore::Protocol.packer_factory.unpacker(channel)
  begin
    unpacker.each do |raw_message|
      read(raw_message)
    end
  rescue EOFError
    signal_truncation
  end
end

#signal_abnormal_exit(code) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/script_core/message_processor.rb', line 43

def signal_abnormal_exit(code)
  error = case code
          when 8
            ScriptCore::ArithmeticOverflowError.new
          when 9
            ScriptCore::UnknownTypeError.new
          when 16
            ScriptCore::EngineMemoryQuotaError.new
          when 17
            ScriptCore::EngineInstructionQuotaError.new
          when 19
            ScriptCore::EngineTypeError.new
          else
            ScriptCore::EngineAbnormalExitError.new(code: code)
  end

  signal_error(error)
end

#signal_error(error) ⇒ Object



24
25
26
# File 'lib/script_core/message_processor.rb', line 24

def signal_error(error)
  @errors << error
end

#signal_signaled(signal) ⇒ Object



32
33
34
35
36
37
38
39
40
41
# File 'lib/script_core/message_processor.rb', line 32

def signal_signaled(signal)
  error = case signal
          when 31
            ScriptCore::EngineIllegalSyscallError.new
          else
            ScriptCore::EngineSignaledError.new(signal: signal)
  end

  signal_error(error)
end

#signal_truncationObject



28
29
30
# File 'lib/script_core/message_processor.rb', line 28

def signal_truncation
  signal_error(ScriptCore::EngineTruncationError.new)
end

#to_resultObject



62
63
64
65
66
67
68
69
70
# File 'lib/script_core/message_processor.rb', line 62

def to_result
  ScriptCore::Result.new(
    output: @output,
    stdout: @stdout,
    stat: @stat,
    errors: @errors,
    measurements: @measurements
  )
end