Sha256: 716d4495f45347f9f0294595874265c469501e218aa38496344dd307fbc72c88
Contents?: true
Size: 1.67 KB
Versions: 3
Compression:
Stored size: 1.67 KB
Contents
## # Meta-programming hiredis for redis async extension module Hiredis require 'hiredis/connection' # Overwrite with ruby implementation to hook IO require 'hiredis/ruby/connection' require 'hiredis/ruby/reader' # Redis Connection Connection = Ruby::Connection # Redis Result Reader Reader = Ruby::Reader ## # Meta-programming hiredis for redis async extension module Ruby ## # Meta-programming hiredis for redis async extension class Connection # write message directly # @param [IO] _sock raw socket # @param [String] data generated string data # @param [Float] _timeout operation timeout def _write(_sock, data, _timeout) await(Promise.new do |resolve| data.force_encoding('binary') if data.respond_to?(:force_encoding) written = 0 EventLoop.register(@sock, :w) do written += @sock.write_nonblock(data[written..-1]) if written == string_size(data) EventLoop.deregister(@sock) resolve.call end end end) end # read from redis socket # @return [String] reply def read raise 'not connected' unless connected? await(Promise.new do |resolve| EventLoop.register(@sock, :r) do @reader.feed @sock.read_nonblock(1024) reply = @reader.gets if reply EventLoop.deregister(@sock) resolve.call(reply) end end end) rescue ::EOFError # :nocov: # Error Handler Copied from HiRedis driver itself raise Errno::ECONNRESET # :nocov: end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
em-midori-0.2.3 | lib/midori/extension/hiredis.rb |
em-midori-0.2.2 | lib/midori/extension/hiredis.rb |
em-midori-0.2.1 | lib/midori/extension/hiredis.rb |