Class: VirtualModule::FileIpcInterface
- Inherits:
-
BaseIpcInterface
- Object
- BaseIpcInterface
- VirtualModule::FileIpcInterface
- Defined in:
- lib/virtual_module.rb
Constant Summary collapse
- INPUT =
"vminput"
- OUTPUT =
"vmoutput"
- MAIN_LOOP =
"vmmain"
Constants inherited from BaseIpcInterface
Instance Attribute Summary
Attributes inherited from BaseIpcInterface
Instance Method Summary collapse
- #call(receiver, name, *args, **kwargs) ⇒ Object
-
#initialize(provider) ⇒ FileIpcInterface
constructor
A new instance of FileIpcInterface.
- #reset(source) ⇒ Object
- #serialize(object_lookup_id) ⇒ Object
Constructor Details
#initialize(provider) ⇒ FileIpcInterface
Returns a new instance of FileIpcInterface.
536 537 538 539 540 541 542 543 544 |
# File 'lib/virtual_module.rb', line 536 def initialize(provider) super File.mkfifo("#{@work_dir}/#{INPUT}") File.mkfifo("#{@work_dir}/#{OUTPUT}") at_exit do Process.kill(:KILL, @pid) if !@pid.nil? FileUtils.remove_entry @work_dir if File.directory?(@work_dir) end end |
Instance Method Details
#call(receiver, name, *args, **kwargs) ⇒ Object
546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 |
# File 'lib/virtual_module.rb', line 546 def call(receiver, name, *args, **kwargs) #require 'byebug' #byebug if Helper.is_installed?(@provider.lang) enqueue @provider.("#{@work_dir}/#{INPUT}", receiver, name, *args, **kwargs) elsif Helper.is_installed?(:docker) enqueue @provider.("/opt/#{INPUT}", receiver, name, *args, **kwargs) else raise Exception.new("Either #{@provider.lang} or docker command is required to run virtual_module") end response = dequeue case response[0..5] when "\xC1VMERR" then raise RuntimeException, "An error occurred while executing the command in #{@provider.lang} process: " + response[6..-1] when "\xC1VMOBJ" then raise StandardError.new(response) else begin MessagePack.unpack(response) rescue raise StandardError.new(response) end end end |
#reset(source) ⇒ Object
574 575 576 577 |
# File 'lib/virtual_module.rb', line 574 def reset(source) super restart_server_process end |
#serialize(object_lookup_id) ⇒ Object
569 570 571 572 |
# File 'lib/virtual_module.rb', line 569 def serialize(object_lookup_id) enqueue "\n#{object_lookup_id}" dequeue end |