rdkit 0.1.4 → 0.1.5
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/README.md +6 -0
- data/example/ioinject.rb +10 -0
- data/example/ioinject/core.rb +41 -0
- data/example/ioinject/resp_responder.rb +6 -0
- data/example/ioinject/server.rb +17 -0
- data/example/ioinject/version.rb +3 -0
- data/lib/rdkit/server.rb +9 -1
- data/lib/rdkit/version.rb +1 -1
- metadata +6 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88ca08b9ed9e2a240465d7d1a7c6c94bbe16e0cd
|
4
|
+
data.tar.gz: 700e931ec7471e9c9dee5f28e91a4510642df5bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d764b39f08556c73f39aa34f9a479a55945953bd8eba366ec299560246b0b80a2b0e836c780c14d43bbc2d2a3f2cf9495f9212c214b8617a8ff2cb92a83dfd55
|
7
|
+
data.tar.gz: f308794848e69d7f80cb1af00fbb9dd57ec1ee98f0925a948c65758f6b3a45fab4271f07497d1bd48a34ffea72533390ed34d596a8d69e4ebad343651cdc0bd6
|
data/README.md
CHANGED
@@ -417,6 +417,12 @@ $ redis-benchmark -p 3721 -n 10 nonblock
|
|
417
417
|
|
418
418
|
See the difference between blocking and non-blocking commands?
|
419
419
|
|
420
|
+
#### Implementing blocked commands
|
421
|
+
|
422
|
+
Since RDKit version 0.1.5, it allows injection of additional IO handlers into the main loop.
|
423
|
+
|
424
|
+
For examples, please refer to `examples/ioinject` for an injected UDP echo server.
|
425
|
+
|
420
426
|
### Implemented Redis Commands
|
421
427
|
|
422
428
|
| command | support | note |
|
data/example/ioinject.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'socket'
|
2
|
+
|
3
|
+
module IOInject
|
4
|
+
class Core < RDKit::Core
|
5
|
+
def initialize(server)
|
6
|
+
############ injection starts here ############
|
7
|
+
@injection_called = 0
|
8
|
+
|
9
|
+
udp_socket = UDPSocket.new
|
10
|
+
host, port = 'localhost', 8080
|
11
|
+
udp_socket.bind(host, port)
|
12
|
+
|
13
|
+
puts "UDP echo server injection code running at #{host}:#{port}"
|
14
|
+
|
15
|
+
server.inject_io_handler(udp_socket) do
|
16
|
+
begin
|
17
|
+
msg, sender_addrinfo, _, *controls = udp_socket.recvmsg_nonblock
|
18
|
+
|
19
|
+
p [msg, sender_addrinfo, _, *controls]
|
20
|
+
|
21
|
+
# echo back
|
22
|
+
udp_socket.send(msg, 0, sender_addrinfo)
|
23
|
+
|
24
|
+
@injection_called += 1
|
25
|
+
rescue IO::WaitReadable
|
26
|
+
# simply pass
|
27
|
+
end
|
28
|
+
end
|
29
|
+
############ injection ends here ############
|
30
|
+
end
|
31
|
+
|
32
|
+
def tick!; end
|
33
|
+
|
34
|
+
def introspection
|
35
|
+
{
|
36
|
+
ioinject_version: IOInject::VERSION,
|
37
|
+
injection_called: @injection_called
|
38
|
+
}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module IOInject
|
2
|
+
class Server < RDKit::Server
|
3
|
+
def initialize
|
4
|
+
super('0.0.0.0', 3721)
|
5
|
+
|
6
|
+
# @core is required by RDKit
|
7
|
+
@core = Core.new(self)
|
8
|
+
|
9
|
+
# @responder is also required by RDKit
|
10
|
+
@responder = RESPResponder.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def introspection
|
14
|
+
super.merge(ioinject: @core.introspection)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/rdkit/server.rb
CHANGED
@@ -51,6 +51,12 @@ module RDKit
|
|
51
51
|
reader, writer = create_pipe
|
52
52
|
@selfpipe = { :reader => reader, :writer => writer }
|
53
53
|
@signal_queue = []
|
54
|
+
|
55
|
+
@additional_io_handlers = {}
|
56
|
+
end
|
57
|
+
|
58
|
+
def inject_io_handler(another_io, &block)
|
59
|
+
@additional_io_handlers[another_io] = block
|
54
60
|
end
|
55
61
|
|
56
62
|
def start
|
@@ -313,7 +319,7 @@ module RDKit
|
|
313
319
|
end
|
314
320
|
|
315
321
|
def process_clients
|
316
|
-
readable, _ = IO.select([@server_socket, @selfpipe[:reader], @clients.keys].flatten, nil, nil, 1.0 / HZ)
|
322
|
+
readable, _ = IO.select([@server_socket, @selfpipe[:reader], @clients.keys, @additional_io_handlers.keys].flatten, nil, nil, 1.0 / HZ)
|
317
323
|
|
318
324
|
if readable
|
319
325
|
readable.each do |socket|
|
@@ -321,6 +327,8 @@ module RDKit
|
|
321
327
|
add_client
|
322
328
|
elsif socket == @selfpipe[:reader]
|
323
329
|
handle_signals
|
330
|
+
elsif block = @additional_io_handlers[socket]
|
331
|
+
block.call
|
324
332
|
else
|
325
333
|
process(socket)
|
326
334
|
end
|
data/lib/rdkit/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Forrest Ye
|
@@ -200,6 +200,11 @@ files:
|
|
200
200
|
- example/http/core.rb
|
201
201
|
- example/http/responder.rb
|
202
202
|
- example/http/server.rb
|
203
|
+
- example/ioinject.rb
|
204
|
+
- example/ioinject/core.rb
|
205
|
+
- example/ioinject/resp_responder.rb
|
206
|
+
- example/ioinject/server.rb
|
207
|
+
- example/ioinject/version.rb
|
203
208
|
- lib/rdkit.rb
|
204
209
|
- lib/rdkit/callbacks.rb
|
205
210
|
- lib/rdkit/client.rb
|