Class: VirtualModule::FileIpcInterface

Inherits:
BaseIpcInterface show all
Defined in:
lib/virtual_module.rb

Constant Summary collapse

INPUT =
"vminput"
OUTPUT =
"vmoutput"
MAIN_LOOP =
"vmmain"

Constants inherited from BaseIpcInterface

BaseIpcInterface::LIB_SCRIPT

Instance Attribute Summary

Attributes inherited from BaseIpcInterface

#work_dir

Instance Method Summary collapse

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.generate_message("#{@work_dir}/#{INPUT}", receiver, name, *args, **kwargs)
  elsif Helper.is_installed?(:docker)
    enqueue @provider.generate_message("/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