close()
click to toggle source
def close
@io.close unless @io.closed?
self
rescue IOError
end
died(*additional)
click to toggle source
def died(*additional)
@status = :quit
@io.close
call_hook(:dead,*additional)
end
hook(id,&block)
click to toggle source
def hook(id,&block)
@hooks[id] ||= []
@hooks[id] << block
self
end
kill()
click to toggle source
def kill
Process.kill(:KILL, @pid)
rescue Errno::ESRCH
end
puts(*args)
click to toggle source
def puts(*args)
@io.puts(*args)
end
quit()
click to toggle source
def quit
return if @io.closed?
@quit_called = true
@io.puts "quit"
@io.close
end
read()
click to toggle source
def read
res = (@status == :quit) ? @io.read : @io.gets
res && res.chomp
end
run(task,type)
click to toggle source
def run(task,type)
@file = File.basename(task, ".rb")
@real_file = task
begin
puts "loadpath #{[Marshal.dump($:-@loadpath)].pack("m0")}"
@loadpath = $:.dup
puts "run #{task} #{type}"
@status = :prepare
rescue Errno::EPIPE
died
rescue IOError
raise unless ["stream closed","closed stream"].include? $!.message
died
end
end
to_s()
click to toggle source
def to_s
if @file
"#{@pid}=#{@file}"
else
"#{@pid}:#{@status.to_s.ljust(7)}"
end
end