Class: RDKit::Client
Instance Attribute Summary collapse
-
#fd ⇒ Object
Returns the value of attribute fd.
-
#id ⇒ Object
Returns the value of attribute id.
-
#last_command ⇒ Object
Returns the value of attribute last_command.
-
#name ⇒ Object
Returns the value of attribute name.
-
#socket ⇒ Object
readonly
Returns the value of attribute socket.
Instance Method Summary collapse
- #blocking(on_success = nil, &block) ⇒ Object
- #finished? ⇒ Boolean
- #info ⇒ Object
-
#initialize(socket, server) ⇒ Client
constructor
A new instance of Client.
- #kill! ⇒ Object
- #resume ⇒ Object
- #socket_addr ⇒ Object
- #unblock! ⇒ Object
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
#fd ⇒ Object
Returns the value of attribute fd.
7 8 9 |
# File 'lib/rdkit/client.rb', line 7 def fd @fd end |
#id ⇒ Object
Returns the value of attribute id.
5 6 7 |
# File 'lib/rdkit/client.rb', line 5 def id @id end |
#last_command ⇒ Object
Returns the value of attribute last_command.
8 9 10 |
# File 'lib/rdkit/client.rb', line 8 def last_command @last_command end |
#name ⇒ Object
Returns the value of attribute name.
6 7 8 |
# File 'lib/rdkit/client.rb', line 6 def name @name end |
#socket ⇒ Object (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
41 42 43 |
# File 'lib/rdkit/client.rb', line 41 def finished? @future.delivered? end |
#info ⇒ Object
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 |
#resume ⇒ Object
27 28 29 30 31 |
# File 'lib/rdkit/client.rb', line 27 def resume @last_interacted_at = Time.now @fiber.resume end |
#socket_addr ⇒ Object
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 |