class Fibril::ForkedNonBlockingIOWrapper
Attributes
read[RW]
write[RW]
Public Class Methods
new(*, &block)
click to toggle source
# File lib/fibril/forked_non_blocking_io_wrapper.rb, line 7 def initialize(*, &block) read, write = IO.pipe self.read, self.write = read, write self.response_queue = [] self.fibrils = [] define_singleton_method(:loop, &block) end
Public Instance Methods
freceive(*args)
click to toggle source
# File lib/fibril/forked_non_blocking_io_wrapper.rb, line 44 def freceive(*args) if args.any? ingest(*args) else method(:ingest) end end
receive(*args)
click to toggle source
# File lib/fibril/forked_non_blocking_io_wrapper.rb, line 40 def receive(*args) self.write.puts URI.escape(Marshal.dump(args)) rescue nil end
start()
click to toggle source
# File lib/fibril/forked_non_blocking_io_wrapper.rb, line 15 def start freceive = method(:freceive) block = method(:loop) read, write = self.read, self.write fibril{ fork do read.close block[] exit(0) end write.close begin Fibril.current.tick while message = read.gets freceive[*Marshal.load(URI.unescape(message))] Fibril.current.tick end rescue Exception => e puts "Exception! : #{e}" puts e.backtrace end } end