Module: Expedite::Protocol
- Defined in:
- lib/expedite/protocol.rb
Instance Method Summary collapse
- #recv_object(env) ⇒ Object
-
#recv_setup(env) ⇒ Object
Receive setup sockets.
-
#send_exception(e, env) ⇒ Object
Result is an exception.
- #send_object(object, env) ⇒ Object
-
#send_return(obj, env) ⇒ Object
Result is a normal return value.
-
#send_setup(child_socket, env) ⇒ Object
Send sockets for setup.
Instance Method Details
#recv_object(env) ⇒ Object
33 34 35 36 37 38 39 40 |
# File 'lib/expedite/protocol.rb', line 33 def recv_object(env) len = self.gets.to_i data = self.read(len) e = self.read(1) env.log "recv_object len=#{len} data=... e=#{e}" raise "Unexpected end #{e}" if e != "$" Marshal.load(data) end |
#recv_setup(env) ⇒ Object
Receive setup sockets. Returns the child_socket
59 60 61 62 63 64 |
# File 'lib/expedite/protocol.rb', line 59 def recv_setup(env) streams = 5.times.map { self.recv_io } [STDOUT, STDERR, STDIN].zip(streams[0..2]).each { |a, b| a.reopen(b) } env.log_file = streams[3] return streams end |
#send_exception(e, env) ⇒ Object
Result is an exception
17 18 19 20 21 22 23 24 |
# File 'lib/expedite/protocol.rb', line 17 def send_exception(e, env) if !e.is_a?(Expedite::Error) ie = Expedite::InvokeError.new("#{e.class}: #{e.}") ie.set_backtrace(e.backtrace) e = ie end self.send_object({"exception" => e}, env) end |
#send_object(object, env) ⇒ Object
5 6 7 8 9 10 11 12 |
# File 'lib/expedite/protocol.rb', line 5 def send_object(object, env) env.log "send_object #{object.inspect}" data = Marshal.dump(object) self.puts data.bytesize.to_i self.write data self.write "$" end |
#send_return(obj, env) ⇒ Object
Result is a normal return value
29 30 31 |
# File 'lib/expedite/protocol.rb', line 29 def send_return(obj, env) self.send_object({"return" => obj}, env) end |
#send_setup(child_socket, env) ⇒ Object
Send sockets for setup. Linux seems to require all fds to be sent first
47 48 49 50 51 52 53 |
# File 'lib/expedite/protocol.rb', line 47 def send_setup(child_socket, env) self.send_io STDOUT self.send_io STDERR self.send_io STDIN self.send_io env.log_file self.send_io child_socket end |