Class: IRuby::Session

Inherits:
Object
  • Object
show all
Defined in:
lib/iruby/session.rb

Constant Summary collapse

DELIM =
'<IDS|MSG>'

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ Session

Returns a new instance of Session.



5
6
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
# File 'lib/iruby/session.rb', line 5

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'])

  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.message}\n#{e.backtrace.join("\n")}"
    end
  end

  @sockets = { publish: pub_socket, reply: reply_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



52
53
54
# File 'lib/iruby/session.rb', line 52

def recv(socket)
  @last_recvd_msg = unserialize(@sockets[socket].recv_message)
end

#send(socket, type, content) ⇒ Object

Build and send a message



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/iruby/session.rb', line 34

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].send_message(serialize(idents, header, content))
end