rdkit 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|