class Hiredis::Ruby::Connection
Meta-programming hiredis for redis async extension
Public Instance Methods
query(args)
click to toggle source
Do redis query @param [Array] args equal to Hiredis
write args
# 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
Private Instance Methods
_read(resolve, sock)
click to toggle source
# File lib/midori-contrib/redic.rb, line 54 def _read(resolve, sock) @reader.feed @sock.read_nonblock(1024) reply = @reader.gets if reply EventLoop.deregister(sock) resolve.call(reply) end end
pre_write(args)
click to toggle source
# File lib/midori-contrib/redic.rb, line 41 def pre_write(args) command = [] command << "*#{args.size}" args.each do |arg| arg = arg.to_s command << "$#{string_size arg}" command << arg end data = command.join(COMMAND_DELIMITER) + COMMAND_DELIMITER data.force_encoding('binary') if data.respond_to?(:force_encoding) data end