Class: IRuby::Session
- Inherits:
-
Object
- Object
- IRuby::Session
- Includes:
- SessionSerialize
- Defined in:
- lib/iruby/session/rbczmq.rb,
lib/iruby/session/ffi_rzmq.rb
Constant Summary
Constants included from SessionSerialize
IRuby::SessionSerialize::DELIM
Instance Method Summary collapse
-
#initialize(config) ⇒ Session
constructor
A new instance of Session.
-
#recv(socket) ⇒ Object
Receive a message and decode it.
- #recv_input ⇒ Object
-
#send(socket, type, content) ⇒ Object
Build and send a message.
Constructor Details
#initialize(config) ⇒ Session
Returns a new instance of Session.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/iruby/session/rbczmq.rb', line 7 def initialize(config) c = ZMQ::Context.new connection = "#{config['transport']}://#{config['ip']}:%d" reply_socket = c.socket(:ROUTER) reply_socket.bind(connection % config['shell_port']) pub_socket = c.socket(:PUB) pub_socket.bind(connection % config['iopub_port']) stdin_socket = c.socket(:ROUTER) stdin_socket.bind(connection % config['stdin_port']) Thread.new do begin hb_socket = c.socket(:REP) hb_socket.bind(connection % config['hb_port']) ZMQ.proxy(hb_socket, hb_socket) rescue Exception => e IRuby.logger.fatal "Kernel heartbeat died: #{e.}\n#{e.backtrace.join("\n")}" end end @sockets = { publish: pub_socket, reply: reply_socket, stdin: stdin_socket } @session = SecureRandom.uuid unless config['key'].to_s.empty? || config['signature_scheme'].to_s.empty? raise 'Unknown signature scheme' unless config['signature_scheme'] =~ /\Ahmac-(.*)\Z/ @hmac = OpenSSL::HMAC.new(config['key'], OpenSSL::Digest.new($1)) end end |
Instance Method Details
#recv(socket) ⇒ Object
Receive a message and decode it
60 61 62 |
# File 'lib/iruby/session/rbczmq.rb', line 60 def recv(socket) @last_recvd_msg = unserialize(@sockets[socket].) end |
#recv_input ⇒ Object
64 65 66 |
# File 'lib/iruby/session/rbczmq.rb', line 64 def recv_input unserialize(@sockets[:stdin].)[:content]["value"] end |
#send(socket, type, content) ⇒ Object
Build and send a message
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/iruby/session/rbczmq.rb', line 42 def send(socket, type, content) idents = if socket == :reply && @last_recvd_msg @last_recvd_msg[:idents] else type == :stream ? "stream.#{content[:name]}" : type end header = { msg_type: type, msg_id: SecureRandom.uuid, username: 'kernel', session: @session, version: '5.0' } @sockets[socket].(ZMQ::Message(*serialize(idents, header, content))) end |