ffi-hiredis_vip-core 0.1.0.pre4 → 0.1.0.pre5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/ffi/hiredis_vip/core.rb +35 -1
- data/lib/ffi/hiredis_vip/core/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c17d4474aa30be236e4162762f77dfa70ec2705
|
4
|
+
data.tar.gz: f0e287223d98ecb2094c48a8dcca9f030834615a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e1c4480814a6faca36e99bf9caca3ca2a31682d722fc9bfb80bf22bea422c0246810f8f21addfd4f3c18c518b3781355f23f05f94dae83c6eed684f200d7d71
|
7
|
+
data.tar.gz: e3e356414bc3f70ea7fe22a003b8e2d18c7f935348921543689dc80a617c02125692103cf92e2e2f494cff3699c2c590a7bf08f15134a90c77110f5c61d64765
|
data/lib/ffi/hiredis_vip/core.rb
CHANGED
@@ -9,6 +9,8 @@ module FFI
|
|
9
9
|
extend ::FFI::Library
|
10
10
|
ffi_lib_flags :now, :global
|
11
11
|
|
12
|
+
class ConnectionError < RuntimeError; end
|
13
|
+
|
12
14
|
##
|
13
15
|
# ffi-rzmq-core for reference
|
14
16
|
#
|
@@ -50,11 +52,13 @@ module FFI
|
|
50
52
|
if HIREDIS_VIP_LIB_PATHS.any? {|path|
|
51
53
|
File.file? File.join(path, "libhiredis_vip.#{FFI::Platform::LIBSUFFIX}")}
|
52
54
|
warn "Unable to load this gem. The libhiredis_vip library exists, but cannot be loaded."
|
55
|
+
warn "Set HIREDIS_VIP_LIB_PATH if custom load path is desired"
|
53
56
|
warn "If this is Windows:"
|
54
57
|
warn "- Check that you have MSVC runtime installed or statically linked"
|
55
58
|
warn "- Check that your DLL is compiled for #{FFI::Platform::ADDRESS_SIZE} bit"
|
56
59
|
else
|
57
60
|
warn "Unable to load this gem. The libhiredis_vip library (or DLL) could not be found."
|
61
|
+
warn "Set HIREDIS_VIP_LIB_PATH if custom load path is desired"
|
58
62
|
warn "If this is a Windows platform, make sure libhiredis_vip.dll is on the PATH."
|
59
63
|
warn "If the DLL was built with mingw, make sure the other two dependent DLLs,"
|
60
64
|
warn "libgcc_s_sjlj-1.dll and libstdc++6.dll, are also on the PATH."
|
@@ -70,6 +74,9 @@ module FFI
|
|
70
74
|
:HIRCLUSTER_FLAG_ADD_OPENSLOT, 0x2000, #/* The flag to decide whether add open slot for master node. (10000000000000) */
|
71
75
|
:HIRCLUSTER_FLAG_ROUTE_USE_SLOTS, 0x4000 # /* The flag to decide whether add open slot for master node. (100000000000000) */
|
72
76
|
|
77
|
+
RedisConnectionType = enum :REDIS_CONN_TCP, 0,
|
78
|
+
:REDIS_CONN_UNIX, 1
|
79
|
+
|
73
80
|
RedisReplyType = enum :REDIS_REPLY_STRING, 1,
|
74
81
|
:REDIS_REPLY_ARRAY, 2,
|
75
82
|
:REDIS_REPLY_INTEGER, 3,
|
@@ -91,6 +98,28 @@ module FFI
|
|
91
98
|
:tv_usec, :long
|
92
99
|
end
|
93
100
|
|
101
|
+
class RedisTcpStruct < ::FFI::Struct
|
102
|
+
layout :host, :string,
|
103
|
+
:source_addr, :string,
|
104
|
+
:port, :int
|
105
|
+
end
|
106
|
+
|
107
|
+
class RedisUnixStruct < ::FFI::Struct
|
108
|
+
layout :path, :string
|
109
|
+
end
|
110
|
+
|
111
|
+
class RedisContext < ::FFI::Struct
|
112
|
+
layout :err, :int,
|
113
|
+
:errstr, [:char, 128],
|
114
|
+
:fd, :int,
|
115
|
+
:flags, :int,
|
116
|
+
:obuf, :string,
|
117
|
+
:connection_type, RedisConnectionType,
|
118
|
+
:timeval, :pointer,
|
119
|
+
:tcp, RedisTcpStruct,
|
120
|
+
:unix_sock, RedisUnixStruct
|
121
|
+
end
|
122
|
+
|
94
123
|
class RedisReply < ::FFI::Struct
|
95
124
|
layout :type, ::FFI::HiredisVip::Core::RedisReplyType,
|
96
125
|
:integer, :long_long,
|
@@ -121,7 +150,12 @@ module FFI
|
|
121
150
|
end
|
122
151
|
|
123
152
|
def self.connect(host, port)
|
124
|
-
::FFI::
|
153
|
+
redis_context = ::FFI::HiredisVip::Core.redisConnect(host, port)
|
154
|
+
redis_context_reply = ::FFI::HiredisVip::Core::RedisContext.new(redis_context)
|
155
|
+
|
156
|
+
raise ::FFI::HiredisVip::Core::ConnectionError, redis_context_reply[:errstr] unless redis_context_reply[:err] == 0
|
157
|
+
|
158
|
+
::FFI::AutoPointer.new(redis_context, ::FFI::HiredisVip::Core.method(:redisFree))
|
125
159
|
end
|
126
160
|
|
127
161
|
def self.cluster_command(cluster_context, command, *args)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ffi-hiredis_vip-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0.
|
4
|
+
version: 0.1.0.pre5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Dewitt
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|