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