Class: Grumlin::Client
- Inherits:
-
Object
- Object
- Grumlin::Client
- Defined in:
- lib/grumlin/client.rb
Defined Under Namespace
Classes: PoolResource
Instance Method Summary collapse
-
#close(check_requests: true) ⇒ Object
Before calling close the user must ensure that: 1) There are no ongoing requests 2) There will be no new writes after.
- #connect ⇒ Object
- #connected? ⇒ Boolean
-
#initialize(url, parent: Async::Task.current, **client_options) ⇒ Client
constructor
Client is not reusable.
- #inspect ⇒ Object
- #to_s ⇒ Object
-
#write(query) ⇒ Object
TODO: support yielding.
Constructor Details
#initialize(url, parent: Async::Task.current, **client_options) ⇒ Client
Client is not reusable. Once closed should be recreated.
42 43 44 45 46 47 48 |
# File 'lib/grumlin/client.rb', line 42 def initialize(url, parent: Async::Task.current, **) @url = url @client_options = @parent = parent @request_dispatcher = nil @transport = nil end |
Instance Method Details
#close(check_requests: true) ⇒ Object
Before calling close the user must ensure that:
- There are no ongoing requests
- There will be no new writes after
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/grumlin/client.rb', line 69 def close(check_requests: true) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity return if @closed @closed = true @transport&.close @transport&.wait @response_task&.stop @response_task&.wait return if @request_dispatcher&.requests&.empty? @request_dispatcher.clear unless check_requests raise Grumlin::ResourceLeakError, "Request list is not empty: #{@request_dispatcher.requests}" if check_requests ensure Console.debug(self, "Closed") end |
#connect ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/grumlin/client.rb', line 50 def connect raise ClientClosedError if @closed @transport = build_transport response_channel = @transport.connect @request_dispatcher = Grumlin::RequestDispatcher.new @response_task = @parent.async do response_channel.each do |response| @request_dispatcher.add_response(response) end rescue Async::Stop, Async::TimeoutError, StandardError close(check_requests: false) end Console.debug(self, "Connected") end |
#connected? ⇒ Boolean
89 90 91 |
# File 'lib/grumlin/client.rb', line 89 def connected? @transport&.connected? || false end |
#inspect ⇒ Object
107 108 109 |
# File 'lib/grumlin/client.rb', line 107 def inspect "<#{self.class} url=#{@url} connected=#{connected?}>" end |
#to_s ⇒ Object
111 112 113 |
# File 'lib/grumlin/client.rb', line 111 def to_s inspect end |
#write(query) ⇒ Object
TODO: support yielding
94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/grumlin/client.rb', line 94 def write(query) raise NotConnectedError unless connected? channel = @request_dispatcher.add_request(query) begin @transport.write(query) channel.dequeue rescue Async::Stop, Async::TimeoutError close(check_requests: false) raise end end |