class VirtualModule::RpcIpcInterface

Public Class Methods

new(provider) click to toggle source
Calls superclass method VirtualModule::BaseIpcInterface::new
# File lib/virtual_module.rb, line 621
def initialize(provider)
  super
  init_connection
  @server = "127.0.0.1"
  @port = 8746
  @timeout = 10
end

Public Instance Methods

call(name, *args, **kwargs) click to toggle source
# File lib/virtual_module.rb, line 629
def call(name, *args, **kwargs)
  restart_server_process
  while `echo exit | telnet #{@server} #{@port} 2>&1`.chomp[-5,5]!="host." do
    sleep(0.05)
  end
  @client = MessagePack::RPC::Client.new(@server, @port) if @client.nil?
  @client.timeout = @timeout
  args.count>0 || kwargs.count>0 ? @client.call(name, *args, **kwargs) : @client.call(name)
end

Private Instance Methods

init_connection() click to toggle source
# File lib/virtual_module.rb, line 640
def init_connection
  @pid = nil
  @client.close if !@client.nil?
  @client = nil
  at_exit do
    @client.close if !@client.nil?
    Process.kill(:KILL, @pid) if !@pid.nil?
    FileUtils.remove_entry @work_dir if File.directory?(@work_dir)
  end
end
restart_server_process() click to toggle source
# File lib/virtual_module.rb, line 651
def restart_server_process
  Process.kill(:KILL, @pid) if !@pid.nil?
  `lsof -wni tcp:#{@port} | cut -f 4 -d ' ' | sed -ne '2,$p' | xargs kill -9`
  init_connection
  File.write("#{@work_dir}/#{LIB_SCRIPT}.#{@provider.class::EXT}", @provider.lib_script(:rpc))
  @pid = Process.spawn("julia --depwarn=no #{@work_dir}/#{LIB_SCRIPT}.#{@provider.class::EXT} #{@port}", :err => :out,:out => "/dev/null") #, :pgroup=>Process.pid)
  Process.detach @pid
end