Class: RDKit::Client

Inherits:
Object show all
Defined in:
lib/rdkit/client.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(socket, server) ⇒ Client

Returns a new instance of Client.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/rdkit/client.rb', line 11

def initialize(socket, server)
  @server = server
  @socket = socket
  @responder = server.responder
  @command_parser = server.parser_class.new
  @logger = server.logger
  @created_at = Time.now
  @last_interacted_at = Time.now

  @fiber = Fiber.new do
    with_error_handling(socket) do |io|
      loop { process; Fiber.yield }
    end
  end
end

Instance Attribute Details

#fdObject

Returns the value of attribute fd.



7
8
9
# File 'lib/rdkit/client.rb', line 7

def fd
  @fd
end

#idObject

Returns the value of attribute id.



5
6
7
# File 'lib/rdkit/client.rb', line 5

def id
  @id
end

#last_commandObject

Returns the value of attribute last_command.



8
9
10
# File 'lib/rdkit/client.rb', line 8

def last_command
  @last_command
end

#nameObject

Returns the value of attribute name.



6
7
8
# File 'lib/rdkit/client.rb', line 6

def name
  @name
end

#socketObject (readonly)

Returns the value of attribute socket.



9
10
11
# File 'lib/rdkit/client.rb', line 9

def socket
  @socket
end

Instance Method Details

#blocking(on_success = nil, &block) ⇒ Object



33
34
35
36
37
38
39
# File 'lib/rdkit/client.rb', line 33

def blocking(on_success=nil, &block)
  @blocked_at = Time.now

  @on_block_success = on_success

  @future = Thread.future(@server.pool) { block.call }
end

#finished?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/rdkit/client.rb', line 41

def finished?
  @future.delivered?
end

#infoObject



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/rdkit/client.rb', line 54

def info
  {
    id:   @id,
    addr: socket_addr,
    fd:   @socket.fileno,
    name: @name,
    age:  age,
    idle: idle,
    cmd:  @last_command
  }
end

#kill!Object



78
79
80
81
# File 'lib/rdkit/client.rb', line 78

def kill!
  @socket.close
  @server.delete(@socket)
end

#resumeObject



27
28
29
30
31
# File 'lib/rdkit/client.rb', line 27

def resume
  @last_interacted_at = Time.now

  @fiber.resume
end

#socket_addrObject



66
67
68
# File 'lib/rdkit/client.rb', line 66

def socket_addr
  @socket.remote_address.inspect_sockaddr
end

#unblock!Object



45
46
47
48
49
50
51
52
# File 'lib/rdkit/client.rb', line 45

def unblock!
  Introspection::Commandstats.record("bg_#{last_command}", ((Time.now - @blocked_at) * 1_000_000).to_i)

  @blocked_at = nil

  @server.client_block_resumed(self)
  @fiber.resume
end