Class: Hiredis::Ruby::Connection

Inherits:
Object
  • Object
show all
Defined in:
lib/midori-contrib/redic.rb

Overview

Meta-programming hiredis for redis async extension

Instance Method Summary collapse

Instance Method Details

#query(args) ⇒ Object

Do redis query

Parameters:

  • args (Array)

    equal to Hiredis write args



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/midori-contrib/redic.rb', line 21

def query(args)
  await(Promise.new do |resolve|
    read_flag = false
    data = pre_write(args)
    written = 0
    EventLoop.register(@sock, :rw) do |monitor|
      if read_flag && monitor.readable?
        # Reading
        _read(resolve, @sock)
      end
      if !read_flag && monitor.writable?
        # Writing
        written += @sock.write_nonblock(data[written..-1])
        read_flag = true if written == string_size(data)
      end
    end
  end)
end