cztop-reactor 0.7.0 → 1.0.0
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
- checksums.yaml.gz.sig +0 -0
- data/History.md +33 -0
- data/Manifest.txt +0 -1
- data/README.md +5 -5
- data/Rakefile +14 -3
- data/lib/cztop/reactor/signal_handling.rb +15 -7
- data/lib/cztop/reactor/socket_monitoring.rb +64 -16
- data/lib/cztop/reactor.rb +39 -7
- data/spec/cztop/reactor/signal_handling_spec.rb +27 -6
- data/spec/cztop/reactor/socket_monitoring_spec.rb +1 -1
- data/spec/cztop/reactor_spec.rb +10 -0
- data.tar.gz.sig +0 -0
- metadata +66 -140
- metadata.gz.sig +0 -0
- data/ChangeLog +0 -223
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ad7473bbe7845c9a821e047efe656f695b97162f3412fd6beaf1c847c238c3e
|
4
|
+
data.tar.gz: 794025b550553a5b4ea94bd1960464b23ac0eb73502a26dd1914df340c51a61b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a6bdadd7d02f5627962b77d1d070afeb716a9d92f92fe80e7d32beffb40b617f951a76fbc4a8e96aebbb5ca71b846464b0af687cc31652baecd9bad5efc491f3
|
7
|
+
data.tar.gz: d04503ba29996ee6e8fffdcee28aa605bf65bdce210a5757944d6e5c10cfee2096b4b8d7f6b3ccdf8fb44fcb5f0cfc2fe255a8cf00a517c247f3d4cb83240e0e
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/History.md
CHANGED
@@ -1,3 +1,36 @@
|
|
1
|
+
# Release History for cztop-reactor
|
2
|
+
|
3
|
+
---
|
4
|
+
|
5
|
+
## v1.0.0 [2022-04-27] Mahlon E. Smith <mahlon@martini.nu>
|
6
|
+
|
7
|
+
- Bump cztop depdendency
|
8
|
+
- Use rake-deveiate instead of hoe for rake management
|
9
|
+
|
10
|
+
|
11
|
+
## v0.9.0 [2019-07-10] Michael Granger <ged@FaerieMUD.org>
|
12
|
+
|
13
|
+
Improvements
|
14
|
+
|
15
|
+
- Fix a bug in signal handling
|
16
|
+
- Work around CZTop's mapping of EINTR in a poller_wait to an Interrupt
|
17
|
+
|
18
|
+
|
19
|
+
## v0.8.0 [2019-05-22] Michael Granger <ged@FaerieMUD.org>
|
20
|
+
|
21
|
+
Bugfixes:
|
22
|
+
|
23
|
+
- Fix several issues with socket monitoring.
|
24
|
+
- Fix bug in signal-handler teardown
|
25
|
+
- Super from the socket monitoring mixin
|
26
|
+
|
27
|
+
Enhancements:
|
28
|
+
|
29
|
+
- Add a #sockets_description method to the Reactor.
|
30
|
+
- Turn on verbose on monitors if $VERBOSE is set
|
31
|
+
- Super to monitor event handler methods if possible
|
32
|
+
|
33
|
+
|
1
34
|
## v0.7.0 [2018-07-23] Michael Granger <ged@FaerieMUD.org>
|
2
35
|
|
3
36
|
Enhancements:
|
data/Manifest.txt
CHANGED
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# CZTop-Reactor
|
2
2
|
|
3
3
|
home
|
4
|
-
:
|
4
|
+
: https://hg.sr.ht/~ged/CZTop-Reactor
|
5
5
|
|
6
6
|
code
|
7
|
-
:
|
7
|
+
: https://hg.sr.ht/~ged/CZTop-Reactor/browse
|
8
8
|
|
9
9
|
github
|
10
10
|
: https://github.com/ged/cztop-reactor
|
@@ -44,7 +44,7 @@ this writing includes:
|
|
44
44
|
* Rubinius (HEAD)
|
45
45
|
* JRuby 9000 (HEAD)
|
46
46
|
|
47
|
-
I am also using it (and CZTop) under MRI 2.
|
47
|
+
I am also using it (and CZTop) under MRI 2.6.
|
48
48
|
|
49
49
|
|
50
50
|
## Installation
|
@@ -69,7 +69,7 @@ distribute it as a gem for two reasons:
|
|
69
69
|
## Contributing
|
70
70
|
|
71
71
|
You can check out the current development source with Mercurial via its
|
72
|
-
{project page}[
|
72
|
+
{project page}[https://hg.sr.ht/~ged/CZTop-Reactor]. Or if you prefer Git,
|
73
73
|
via {its Github mirror}[https://github.com/ged/cztop-reactor].
|
74
74
|
|
75
75
|
After checking out the source, run:
|
@@ -104,7 +104,7 @@ License](http://opensource.org/licenses/ISC):
|
|
104
104
|
|
105
105
|
Everything else is distributed under the same license but is:
|
106
106
|
|
107
|
-
Copyright (c) 2017, Michael Granger
|
107
|
+
Copyright (c) 2017-2019, Michael Granger
|
108
108
|
|
109
109
|
|
110
110
|
[POSA2]: http://www.cs.wustl.edu/~schmidt/POSA/POSA2/
|
data/Rakefile
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'rake/deveiate'
|
5
|
+
|
6
|
+
|
7
|
+
Rake::DevEiate.setup( 'cztop-reactor' )
|
8
|
+
|
9
|
+
|
10
|
+
__END__
|
11
|
+
|
1
12
|
#!/usr/bin/env rake
|
2
13
|
|
3
14
|
begin
|
@@ -20,8 +31,8 @@ hoespec = Hoe.spec 'cztop-reactor' do |spec|
|
|
20
31
|
self.history_file = 'History.md'
|
21
32
|
self.extra_rdoc_files = FileList[ '*.rdoc', '*.md' ]
|
22
33
|
self.urls = {
|
23
|
-
home: '
|
24
|
-
code: '
|
34
|
+
home: 'https://hg.sr.ht/~ged/CZTop-Reactor',
|
35
|
+
code: 'https://hg.sr.ht/~ged/CZTop-Reactor/browse',
|
25
36
|
docs: 'http://deveiate.org/code/cztop-reactor',
|
26
37
|
github: 'http://github.com/ged/cztop-reactor',
|
27
38
|
}
|
@@ -38,7 +49,7 @@ hoespec = Hoe.spec 'cztop-reactor' do |spec|
|
|
38
49
|
spec.dependency 'simplecov', '~> 0.13', :developer
|
39
50
|
spec.dependency 'rdoc-generator-fivefish', '~> 0.3', :developer
|
40
51
|
|
41
|
-
spec.require_ruby_version( '>=2.
|
52
|
+
spec.require_ruby_version( '>=2.4.0' )
|
42
53
|
spec.hg_sign_tags = true if spec.respond_to?( :hg_sign_tags= )
|
43
54
|
spec.check_history_on_release = true if spec.respond_to?( :check_history_on_release= )
|
44
55
|
|
@@ -64,7 +64,9 @@ module CZTop::Reactor::SignalHandling
|
|
64
64
|
return yield
|
65
65
|
|
66
66
|
ensure
|
67
|
+
self.log.debug "Going to reset signal traps..."
|
67
68
|
self.reset_signal_traps( *signals )
|
69
|
+
self.log.debug "Going to clean up signal handler..."
|
68
70
|
self.clean_up_signal_handling( reactor )
|
69
71
|
end
|
70
72
|
|
@@ -99,19 +101,25 @@ module CZTop::Reactor::SignalHandling
|
|
99
101
|
|
100
102
|
### Tear down the data structures for signal handling
|
101
103
|
def clean_up_signal_handling( reactor )
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
104
|
+
if @self_pipe
|
105
|
+
self.log.info "Cleaning up signal handler self-pipe."
|
106
|
+
reactor.unregister( @self_pipe[:reader] )
|
107
|
+
|
108
|
+
@self_pipe[:writer].options.linger = 0
|
109
|
+
@self_pipe[:writer].close
|
110
|
+
@self_pipe[:reader].options.linger = 0
|
111
|
+
@self_pipe[:reader].close
|
112
|
+
else
|
113
|
+
self.log.info "No self-pipe; skipping signal-handler cleanup."
|
114
|
+
end
|
108
115
|
|
109
116
|
Thread.main[ SIGNAL_QUEUE_KEY ].clear
|
110
117
|
end
|
111
118
|
|
112
119
|
|
113
120
|
### Look for any signals that arrived and handle them.
|
114
|
-
def handle_queued_signals(
|
121
|
+
def handle_queued_signals( event )
|
122
|
+
event.socket.wait
|
115
123
|
while sig = Thread.main[ SIGNAL_QUEUE_KEY ].shift
|
116
124
|
self.log.debug " got a queued signal: %p" % [ sig ]
|
117
125
|
self.handle_signal( sig )
|
@@ -16,6 +16,7 @@ module CZTop::Reactor::SocketMonitoring
|
|
16
16
|
|
17
17
|
### Set up a monitor instance variable on object creation.
|
18
18
|
def initialize( * ) # :notnew:
|
19
|
+
super if defined?( super )
|
19
20
|
@monitor = nil
|
20
21
|
end
|
21
22
|
|
@@ -26,7 +27,7 @@ module CZTop::Reactor::SocketMonitoring
|
|
26
27
|
|
27
28
|
### Run the block with monitoring for the specified +socket+.
|
28
29
|
def with_socket_monitor( reactor, socket, *events )
|
29
|
-
mon = self.set_up_socket_monitor( reactor, socket )
|
30
|
+
mon = self.set_up_socket_monitor( reactor, socket, *events )
|
30
31
|
|
31
32
|
return yield
|
32
33
|
ensure
|
@@ -43,6 +44,7 @@ module CZTop::Reactor::SocketMonitoring
|
|
43
44
|
### Tear down the monitor.
|
44
45
|
def clean_up_socket_monitor( mon )
|
45
46
|
mon.terminate if mon
|
47
|
+
self.log.debug "Monitor is: %p" % [ mon ]
|
46
48
|
end
|
47
49
|
|
48
50
|
|
@@ -67,63 +69,109 @@ module CZTop::Reactor::SocketMonitoring
|
|
67
69
|
protected
|
68
70
|
#########
|
69
71
|
|
72
|
+
|
70
73
|
### Monitor event callback for socket connection events
|
71
74
|
def on_connected( fd, endpoint )
|
72
75
|
self.log.debug "Client socket on FD %d connected" % [ fd ]
|
76
|
+
super if defined?( super )
|
73
77
|
end
|
74
78
|
|
75
79
|
|
76
80
|
### Monitor event callback for socket connection-delayed events
|
77
81
|
def on_connect_delayed( fd, endpoint )
|
78
82
|
self.log.debug "Client socket on FD %d connection delayed" % [ fd ]
|
83
|
+
super if defined?( super )
|
79
84
|
end
|
80
85
|
|
81
86
|
|
82
87
|
### Monitor event callback for socket retry events
|
83
88
|
def on_connect_retried( fd, endpoint )
|
84
89
|
self.log.debug "Retrying connection for socket on FD %d" % [ fd ]
|
90
|
+
super if defined?( super )
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
### Monitor event callback for listening events
|
95
|
+
def on_listening( fd, endpoint )
|
96
|
+
self.log.debug "Socket on FD %d is now listening for connections" % [ fd ]
|
97
|
+
super if defined?( super )
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
### Monitor event callback for bind failure events
|
102
|
+
def on_bind_failed( fd, endpoint )
|
103
|
+
self.log.debug "Socket on FD %d could not be bound" % [ fd ]
|
104
|
+
super if defined?( super )
|
85
105
|
end
|
86
106
|
|
87
107
|
|
88
108
|
### Monitor event callback for socket accepted events
|
89
109
|
def on_accepted( fd, endpoint )
|
90
110
|
self.log.debug "Client socket on FD %d accepted" % [ fd ]
|
111
|
+
super if defined?( super )
|
91
112
|
end
|
92
113
|
|
93
114
|
|
94
|
-
### Monitor event callback for
|
95
|
-
def
|
96
|
-
self.log.debug "Client socket on FD %d
|
115
|
+
### Monitor event callback for socket accept failed events
|
116
|
+
def on_accept_failed( fd, endpoint )
|
117
|
+
self.log.debug "Client socket on FD %d accept failed" % [ fd ]
|
118
|
+
super if defined?( super )
|
97
119
|
end
|
98
120
|
|
99
121
|
|
100
|
-
### Monitor event callback for
|
101
|
-
def
|
102
|
-
self.log.debug "Client socket on FD %d
|
122
|
+
### Monitor event callback for socket closed events
|
123
|
+
def on_closed( fd, endpoint )
|
124
|
+
self.log.debug "Client socket on FD %d closed" % [ fd ]
|
125
|
+
super if defined?( super )
|
126
|
+
end
|
127
|
+
|
128
|
+
|
129
|
+
### Monitor event callback for socket close failed events
|
130
|
+
def on_close_failed( fd, endpoint )
|
131
|
+
self.log.debug "Close failed for socket on FD %d" % [ fd ]
|
132
|
+
super if defined?( super )
|
133
|
+
end
|
134
|
+
|
135
|
+
|
136
|
+
### Monitor event callback for socket disconnection events
|
137
|
+
def on_disconnected( fd, endpoint )
|
138
|
+
self.log.debug "Client socket on FD %d disconnected" % [ fd ]
|
139
|
+
super if defined?( super )
|
140
|
+
end
|
141
|
+
|
142
|
+
|
143
|
+
### Monitor event callback for monitor stopped events.
|
144
|
+
def on_monitor_stopped( fd, endpoint )
|
145
|
+
self.log.debug "Monitor for socket on FD %d stopped." % [ fd ]
|
146
|
+
super if defined?( super )
|
147
|
+
end
|
148
|
+
|
149
|
+
|
150
|
+
### Monitor event callback for successful auth events.
|
151
|
+
def on_handshake_succeeded( fd, endpoint )
|
152
|
+
self.log.debug "Client socket on FD %d handshake succeeded" % [ fd ]
|
153
|
+
super if defined?( super )
|
103
154
|
end
|
104
155
|
|
105
156
|
|
106
157
|
### Monitor event callback for failed handshake events.
|
107
158
|
def on_handshake_failed_no_detail( fd, endpoint )
|
108
159
|
self.log.debug "Client socket on FD %d handshake failed; no further details are known" % [ fd ]
|
160
|
+
super if defined?( super )
|
109
161
|
end
|
110
162
|
|
111
163
|
|
112
164
|
### Monitor event callback for failed handshake events.
|
113
165
|
def on_handshake_failed_protocol( fd, endpoint )
|
114
166
|
self.log.debug "Client socket on FD %d handshake failed: protocol error" % [ fd ]
|
167
|
+
super if defined?( super )
|
115
168
|
end
|
116
169
|
|
117
170
|
|
118
|
-
### Monitor event callback for
|
119
|
-
def
|
120
|
-
self.log.debug "Client socket on FD %d
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
### Monitor event callback for socket disconnection events
|
125
|
-
def on_disconnected( fd, endpoint )
|
126
|
-
self.log.debug "Client socket on FD %d disconnected" % [ fd ]
|
171
|
+
### Monitor event callback for failed auth events.
|
172
|
+
def on_handshake_failed_auth( fd, endpoint )
|
173
|
+
self.log.debug "Client socket on FD %d handshake failed: authentication failure" % [ fd ]
|
174
|
+
super if defined?( super )
|
127
175
|
end
|
128
176
|
|
129
177
|
end # module CZTop::Reactor::SocketMonitoring
|
data/lib/cztop/reactor.rb
CHANGED
@@ -24,7 +24,7 @@ class CZTop::Reactor
|
|
24
24
|
include MonitorMixin
|
25
25
|
|
26
26
|
# The version of this library
|
27
|
-
VERSION = '0.
|
27
|
+
VERSION = '1.0.0'
|
28
28
|
|
29
29
|
# The maximum number of seconds to wait for events when there are no timers
|
30
30
|
# registered.
|
@@ -36,6 +36,14 @@ class CZTop::Reactor
|
|
36
36
|
write: CZTop::Poller::ZMQ::POLLOUT,
|
37
37
|
}.freeze
|
38
38
|
|
39
|
+
# Errors encountered during the poll that should retry instead of raising
|
40
|
+
POLLER_RETRY_ERRORS = [
|
41
|
+
Errno::EINTR::Errno, # CZTop maps this to Interrupt, but it can be *any*
|
42
|
+
# signal, not just SIGINT
|
43
|
+
Errno::EAGAIN::Errno,
|
44
|
+
Errno::ETIMEDOUT::Errno,
|
45
|
+
]
|
46
|
+
|
39
47
|
|
40
48
|
autoload :Event, 'cztop/reactor/event'
|
41
49
|
|
@@ -282,16 +290,18 @@ class CZTop::Reactor
|
|
282
290
|
### registered with the reactor for the `:read` event with the specified +callback+,
|
283
291
|
### then returned.
|
284
292
|
def register_monitor( socket, *events, &callback )
|
285
|
-
if !events.empty? &&
|
293
|
+
if !events.empty? && events.last.respond_to?( :handle_monitor_event )
|
286
294
|
handler = events.pop
|
287
295
|
callback = handler.method( :handle_monitor_event )
|
288
296
|
end
|
289
297
|
|
298
|
+
events.map!( &:to_s )
|
290
299
|
events.push( 'ALL' ) if events.empty?
|
291
300
|
|
292
301
|
monitor = CZTop::Monitor.new( socket )
|
293
302
|
monitor.listen( *events )
|
294
303
|
monitor.start
|
304
|
+
monitor.verbose! if $VERBOSE
|
295
305
|
|
296
306
|
self.register( monitor.actor, :read, &callback )
|
297
307
|
|
@@ -327,15 +337,19 @@ class CZTop::Reactor
|
|
327
337
|
|
328
338
|
self.log.debug "Got event %p" % [ event ]
|
329
339
|
if event
|
330
|
-
|
331
|
-
|
332
|
-
|
340
|
+
if event.socket
|
341
|
+
handler = self.sockets[ event.socket ][ :handler ]
|
342
|
+
handler.call( event )
|
343
|
+
else
|
344
|
+
self.log.warn "Got an event for an unregistered socket: racing to shut down?"
|
345
|
+
end
|
333
346
|
else
|
334
347
|
self.log.debug "Expired: firing timers."
|
335
348
|
self.timers.fire
|
336
349
|
end
|
337
350
|
|
338
|
-
self.log.debug "%d sockets after polling: %
|
351
|
+
# self.log.debug "%d sockets after polling: %s" %
|
352
|
+
# [ self.sockets.length, self.sockets_description ]
|
339
353
|
rescue Interrupt
|
340
354
|
raise unless ignore_interrupts
|
341
355
|
self.log.debug "Interrupted."
|
@@ -362,6 +376,21 @@ class CZTop::Reactor
|
|
362
376
|
end
|
363
377
|
|
364
378
|
|
379
|
+
### Return a description of the sockets registered with the reactor.
|
380
|
+
def sockets_description
|
381
|
+
return self.sockets.map do |sock, _|
|
382
|
+
case sock
|
383
|
+
when CZTop::Socket
|
384
|
+
"%s {%s}" % [ sock.class.name.sub(/.*::/, ''), sock.last_endpoint || 'not connected' ]
|
385
|
+
when CZTop::Actor
|
386
|
+
"Actor %#x" % [ sock.object_id * 2 ]
|
387
|
+
else
|
388
|
+
"??? %p ???" % [ sock.class ]
|
389
|
+
end
|
390
|
+
end.join( ', ' )
|
391
|
+
end
|
392
|
+
|
393
|
+
|
365
394
|
#########
|
366
395
|
protected
|
367
396
|
#########
|
@@ -372,7 +401,10 @@ class CZTop::Reactor
|
|
372
401
|
def wait( timeout=-1 )
|
373
402
|
rc = CZTop::Poller::ZMQ.poller_wait( @poller_ptr, @event_ptr, timeout )
|
374
403
|
if rc == -1
|
375
|
-
|
404
|
+
case CZMQ::FFI::Errors.errno
|
405
|
+
when *POLLER_RETRY_ERRORS
|
406
|
+
# Retry if the error means we should
|
407
|
+
else
|
376
408
|
CZTop::HasFFIDelegate.raise_zmq_err
|
377
409
|
end
|
378
410
|
return nil
|
@@ -7,8 +7,8 @@ require 'cztop/reactor/signal_handling'
|
|
7
7
|
|
8
8
|
describe CZTop::Reactor::SignalHandling do
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
let( :including_class ) do
|
11
|
+
class_instance = Class.new do
|
12
12
|
|
13
13
|
def initialize
|
14
14
|
@signals = []
|
@@ -21,9 +21,12 @@ describe CZTop::Reactor::SignalHandling do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
end
|
24
|
+
class_instance.include( described_class )
|
25
|
+
return class_instance
|
26
|
+
end
|
24
27
|
|
25
|
-
including_class.include( described_class )
|
26
28
|
|
29
|
+
it "can add a signal handler setup to a reactor for a block" do
|
27
30
|
obj = including_class.new
|
28
31
|
reactor = CZTop::Reactor.new
|
29
32
|
|
@@ -38,10 +41,10 @@ describe CZTop::Reactor::SignalHandling do
|
|
38
41
|
|
39
42
|
|
40
43
|
it "raises if the including class doesn't provide a #handle_signal method" do
|
41
|
-
|
42
|
-
|
44
|
+
test_class = Class.new
|
45
|
+
test_class.include( described_class )
|
43
46
|
|
44
|
-
obj =
|
47
|
+
obj = test_class.new
|
45
48
|
reactor = CZTop::Reactor.new
|
46
49
|
|
47
50
|
expect {
|
@@ -53,5 +56,23 @@ describe CZTop::Reactor::SignalHandling do
|
|
53
56
|
}.to raise_error( NotImplementedError, /unhandled signal USR1/i )
|
54
57
|
end
|
55
58
|
|
59
|
+
|
60
|
+
it "doesn't try to tear down signal handling if it didn't get set up" do
|
61
|
+
error_class = Class.new( StandardError )
|
62
|
+
allow( CZTop::Socket::PAIR ).to receive( :new ).
|
63
|
+
and_raise( error_class.new("something bad happened") )
|
64
|
+
|
65
|
+
obj = including_class.new
|
66
|
+
reactor = CZTop::Reactor.new
|
67
|
+
|
68
|
+
begin
|
69
|
+
obj.with_signal_handler( reactor, :USR1 ) do
|
70
|
+
fail "we shouldn't get here"
|
71
|
+
end
|
72
|
+
rescue error_class => err
|
73
|
+
expect( err.message ).to eq( "something bad happened" )
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
56
77
|
end
|
57
78
|
|
@@ -29,7 +29,7 @@ describe CZTop::Reactor::SocketMonitoring do
|
|
29
29
|
listener = CZTop::Socket::SERVER.new( '@tcp://127.0.0.1:*' )
|
30
30
|
socket = CZTop::Socket::CLIENT.new
|
31
31
|
|
32
|
-
obj.with_socket_monitor( reactor, socket
|
32
|
+
obj.with_socket_monitor( reactor, socket ) do
|
33
33
|
socket.connect( listener.last_endpoint )
|
34
34
|
reactor.poll_once
|
35
35
|
end
|
data/spec/cztop/reactor_spec.rb
CHANGED
@@ -364,6 +364,16 @@ describe CZTop::Reactor do
|
|
364
364
|
end
|
365
365
|
|
366
366
|
|
367
|
+
it "ignores EINTR by default" do
|
368
|
+
expect( CZTop::Poller::ZMQ ).to receive( :poller_wait ).
|
369
|
+
and_return( -1 )
|
370
|
+
expect( CZMQ::FFI::Errors ).to receive( :errno ).
|
371
|
+
and_return( Errno::EINTR::Errno )
|
372
|
+
|
373
|
+
expect( reactor.poll_once ).to be_nil
|
374
|
+
end
|
375
|
+
|
376
|
+
|
367
377
|
it "has an option to propagate EGAIN/EWOULDBLOCK" do
|
368
378
|
expect( CZTop::Poller::ZMQ ).to receive( :poller_wait ).
|
369
379
|
and_raise( Errno::EAGAIN.new )
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,215 +1,139 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cztop-reactor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
8
|
-
|
8
|
+
- Mahlon E. Smith
|
9
|
+
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain:
|
11
12
|
- |
|
12
13
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
+
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
X0qdrKi+2aZZ0NGuFj9AItBsVmAvkBGIpX4TEKQp5haEbPpmaqO5nIIhV26PXmyT
|
36
|
-
OMKv6pWsoS81vw5KAGBmfX8nht/Py90DQrbRvakATGI=
|
14
|
+
MIID+DCCAmCgAwIBAgIBBDANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdnZWQv
|
15
|
+
REM9RmFlcmllTVVEL0RDPW9yZzAeFw0yMjAxMDcyMzU4MTRaFw0yMzAxMDcyMzU4
|
16
|
+
MTRaMCIxIDAeBgNVBAMMF2dlZC9EQz1GYWVyaWVNVUQvREM9b3JnMIIBojANBgkq
|
17
|
+
hkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAvyVhkRzvlEs0fe7145BYLfN6njX9ih5H
|
18
|
+
L60U0p0euIurpv84op9CNKF9tx+1WKwyQvQP7qFGuZxkSUuWcP/sFhDXL1lWUuIl
|
19
|
+
M4uHbGCRmOshDrF4dgnBeOvkHr1fIhPlJm5FO+Vew8tSQmlDsosxLUx+VB7DrVFO
|
20
|
+
5PU2AEbf04GGSrmqADGWXeaslaoRdb1fu/0M5qfPTRn5V39sWD9umuDAF9qqil/x
|
21
|
+
Sl6phTvgBrG8GExHbNZpLARd3xrBYLEFsX7RvBn2UPfgsrtvpdXjsHGfpT3IPN+B
|
22
|
+
vQ66lts4alKC69TE5cuKasWBm+16A4aEe3XdZBRNmtOu/g81gvwA7fkJHKllJuaI
|
23
|
+
dXzdHqq+zbGZVSQ7pRYHYomD0IiDe1DbIouFnPWmagaBnGHwXkDT2bKKP+s2v21m
|
24
|
+
ozilJg4aar2okb/RA6VS87o+d7g6LpDDMMQjH4G9OPnJENLdhu8KnPw/ivSVvQw7
|
25
|
+
N2I4L/ZOIe2DIVuYH7aLHfjZDQv/mNgpAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYD
|
26
|
+
VR0PBAQDAgSwMB0GA1UdDgQWBBRyjf55EbrHagiRLqt5YAd3yb8k4DANBgkqhkiG
|
27
|
+
9w0BAQsFAAOCAYEASrm1AbEoxACZ9WXJH3R5axV3U0CA4xaETlL2YT+2nOfVBMQ9
|
28
|
+
0ZlkPx6j4ghKJgAIi1TMfDM2JyPJsppQh8tiNccDjWc62UZRY/dq26cMqf/lcI+a
|
29
|
+
6YBuEYvzZfearwVs8tHnXtwYV3WSCoCOQaB+nq2lA1O+nkKNl41WOsVbNama5jx3
|
30
|
+
8cQtVSEEmZy6jIDJ8c5TmBJ7BQUDEUEWA/A3V42Xyctoj7DvUXWE0lP+X6ypAVSr
|
31
|
+
lFh3TS64D7NTvxkmg7natUoCvobl6kGl4yMaqE4YRTlfuzhpf91TSOntClqrAOsS
|
32
|
+
K1s56WndQj3IoBocdY9mQhDZLtLHofSkymoP8btBlj5SsN24TiF0VMSZlctSCYZg
|
33
|
+
GKyHim/MMlIfGOWsgfioq5jzwmql7W4CDubbb8Lkg70v+hN2E/MnNVAcNE3gyaGc
|
34
|
+
P5YP5BAbNW+gvd3QHRiWTTuhgHrdDnGdXg93N2M5KHn1ug8BtPLQwlcFwEpKnlLn
|
35
|
+
btEP+7EplFuoiMfd
|
37
36
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
37
|
+
date: 2022-04-27 00:00:00.000000000 Z
|
39
38
|
dependencies:
|
40
|
-
- !ruby/object:Gem::Dependency
|
41
|
-
name: loggability
|
42
|
-
requirement: !ruby/object:Gem::Requirement
|
43
|
-
requirements:
|
44
|
-
- - "~>"
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '0.14'
|
47
|
-
type: :runtime
|
48
|
-
prerelease: false
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - "~>"
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0.14'
|
54
39
|
- !ruby/object:Gem::Dependency
|
55
40
|
name: cztop
|
56
41
|
requirement: !ruby/object:Gem::Requirement
|
57
42
|
requirements:
|
58
43
|
- - "~>"
|
59
44
|
- !ruby/object:Gem::Version
|
60
|
-
version: '0
|
45
|
+
version: '1.0'
|
61
46
|
type: :runtime
|
62
47
|
prerelease: false
|
63
48
|
version_requirements: !ruby/object:Gem::Requirement
|
64
49
|
requirements:
|
65
50
|
- - "~>"
|
66
51
|
- !ruby/object:Gem::Version
|
67
|
-
version: '0
|
52
|
+
version: '1.0'
|
68
53
|
- !ruby/object:Gem::Dependency
|
69
|
-
name:
|
54
|
+
name: loggability
|
70
55
|
requirement: !ruby/object:Gem::Requirement
|
71
56
|
requirements:
|
72
57
|
- - "~>"
|
73
58
|
- !ruby/object:Gem::Version
|
74
|
-
version: '
|
59
|
+
version: '0.18'
|
75
60
|
type: :runtime
|
76
61
|
prerelease: false
|
77
62
|
version_requirements: !ruby/object:Gem::Requirement
|
78
63
|
requirements:
|
79
64
|
- - "~>"
|
80
65
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
82
|
-
- !ruby/object:Gem::Dependency
|
83
|
-
name: hoe-mercurial
|
84
|
-
requirement: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
86
|
-
- - "~>"
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: '1.4'
|
89
|
-
type: :development
|
90
|
-
prerelease: false
|
91
|
-
version_requirements: !ruby/object:Gem::Requirement
|
92
|
-
requirements:
|
93
|
-
- - "~>"
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: '1.4'
|
66
|
+
version: '0.18'
|
96
67
|
- !ruby/object:Gem::Dependency
|
97
|
-
name:
|
68
|
+
name: rdoc-generator-fivefish
|
98
69
|
requirement: !ruby/object:Gem::Requirement
|
99
70
|
requirements:
|
100
71
|
- - "~>"
|
101
72
|
- !ruby/object:Gem::Version
|
102
|
-
version: '0.
|
103
|
-
type: :
|
73
|
+
version: '0.4'
|
74
|
+
type: :runtime
|
104
75
|
prerelease: false
|
105
76
|
version_requirements: !ruby/object:Gem::Requirement
|
106
77
|
requirements:
|
107
78
|
- - "~>"
|
108
79
|
- !ruby/object:Gem::Version
|
109
|
-
version: '0.
|
80
|
+
version: '0.4'
|
110
81
|
- !ruby/object:Gem::Dependency
|
111
|
-
name:
|
82
|
+
name: timers
|
112
83
|
requirement: !ruby/object:Gem::Requirement
|
113
84
|
requirements:
|
114
85
|
- - "~>"
|
115
86
|
- !ruby/object:Gem::Version
|
116
|
-
version: '
|
117
|
-
type: :
|
87
|
+
version: '4.3'
|
88
|
+
type: :runtime
|
118
89
|
prerelease: false
|
119
90
|
version_requirements: !ruby/object:Gem::Requirement
|
120
91
|
requirements:
|
121
92
|
- - "~>"
|
122
93
|
- !ruby/object:Gem::Version
|
123
|
-
version: '
|
94
|
+
version: '4.3'
|
124
95
|
- !ruby/object:Gem::Dependency
|
125
|
-
name:
|
96
|
+
name: rake-deveiate
|
126
97
|
requirement: !ruby/object:Gem::Requirement
|
127
98
|
requirements:
|
128
99
|
- - "~>"
|
129
100
|
- !ruby/object:Gem::Version
|
130
|
-
version: '0.
|
101
|
+
version: '0.19'
|
131
102
|
type: :development
|
132
103
|
prerelease: false
|
133
104
|
version_requirements: !ruby/object:Gem::Requirement
|
134
105
|
requirements:
|
135
106
|
- - "~>"
|
136
107
|
- !ruby/object:Gem::Version
|
137
|
-
version: '0.
|
108
|
+
version: '0.19'
|
138
109
|
- !ruby/object:Gem::Dependency
|
139
110
|
name: rdoc-generator-fivefish
|
140
111
|
requirement: !ruby/object:Gem::Requirement
|
141
112
|
requirements:
|
142
113
|
- - "~>"
|
143
114
|
- !ruby/object:Gem::Version
|
144
|
-
version: '0.
|
115
|
+
version: '0.4'
|
145
116
|
type: :development
|
146
117
|
prerelease: false
|
147
118
|
version_requirements: !ruby/object:Gem::Requirement
|
148
119
|
requirements:
|
149
120
|
- - "~>"
|
150
121
|
- !ruby/object:Gem::Version
|
151
|
-
version: '0.
|
152
|
-
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
- - "~>"
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
version: '4.0'
|
159
|
-
type: :development
|
160
|
-
prerelease: false
|
161
|
-
version_requirements: !ruby/object:Gem::Requirement
|
162
|
-
requirements:
|
163
|
-
- - "~>"
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
version: '4.0'
|
166
|
-
- !ruby/object:Gem::Dependency
|
167
|
-
name: hoe
|
168
|
-
requirement: !ruby/object:Gem::Requirement
|
169
|
-
requirements:
|
170
|
-
- - "~>"
|
171
|
-
- !ruby/object:Gem::Version
|
172
|
-
version: '3.16'
|
173
|
-
type: :development
|
174
|
-
prerelease: false
|
175
|
-
version_requirements: !ruby/object:Gem::Requirement
|
176
|
-
requirements:
|
177
|
-
- - "~>"
|
178
|
-
- !ruby/object:Gem::Version
|
179
|
-
version: '3.16'
|
180
|
-
description: |-
|
181
|
-
This is an implementation of the Reactor pattern described in [Pattern-Oriented
|
182
|
-
Software Architecture (Volume 2)][POSA2]. It allows an asynchronous application
|
183
|
-
to be described as one or more "reactions" to events, in this case either I/O
|
184
|
-
conditions on a ZMQ socket or a timer expiring.
|
185
|
-
|
186
|
-
A simple example:
|
187
|
-
|
188
|
-
# Start a SERVER socket, and print out any messages sent to it
|
189
|
-
reactor = CZTop::Reactor.new
|
190
|
-
socket = CZTop::Socket::SERVER.new
|
191
|
-
socket.bind( 'tcp://0.0.0.0:8' )
|
192
|
-
reactor.register( socket, :read ) do |event|
|
193
|
-
if event.readable?
|
194
|
-
message = event.socket.receive
|
195
|
-
puts "Read: %p" % [ message.to_a ]
|
196
|
-
end
|
197
|
-
end
|
198
|
-
reactor.start_polling
|
122
|
+
version: '0.4'
|
123
|
+
description: This is an implementation of the Reactor pattern described in Pattern-Oriented
|
124
|
+
Software Architecture (Volume 2). It allows an asynchronous application to be described
|
125
|
+
as one or more “reactions” to events, in this case either I/O conditions on a ZMQ
|
126
|
+
socket or a timer expiring.
|
199
127
|
email:
|
200
|
-
- ged@
|
128
|
+
- ged@faeriemud.org
|
129
|
+
- mahlon@martini.nu
|
201
130
|
executables: []
|
202
131
|
extensions: []
|
203
|
-
extra_rdoc_files:
|
204
|
-
- History.md
|
205
|
-
- LICENSE.txt
|
206
|
-
- Manifest.txt
|
207
|
-
- README.md
|
132
|
+
extra_rdoc_files: []
|
208
133
|
files:
|
209
134
|
- ".document"
|
210
135
|
- ".rdoc_options"
|
211
136
|
- ".simplecov"
|
212
|
-
- ChangeLog
|
213
137
|
- History.md
|
214
138
|
- LICENSE.txt
|
215
139
|
- Manifest.txt
|
@@ -224,31 +148,33 @@ files:
|
|
224
148
|
- spec/cztop/reactor/socket_monitoring_spec.rb
|
225
149
|
- spec/cztop/reactor_spec.rb
|
226
150
|
- spec/spec_helper.rb
|
227
|
-
homepage:
|
151
|
+
homepage: https://hg.sr.ht/~ged/CZTop-Reactor
|
228
152
|
licenses:
|
229
|
-
-
|
230
|
-
metadata:
|
231
|
-
|
232
|
-
|
233
|
-
-
|
234
|
-
|
153
|
+
- BSD-3-Clause
|
154
|
+
metadata:
|
155
|
+
homepage_uri: https://hg.sr.ht/~ged/CZTop-Reactor
|
156
|
+
documentation_uri: http://deveiate.org/code/cztop-reactor
|
157
|
+
changelog_uri: http://deveiate.org/code/cztop-reactor/History_md.html
|
158
|
+
source_uri: https://hg.sr.ht/~ged/CZTop-Reactor/browse
|
159
|
+
bug_tracker_uri: https://todo.sr.ht/~ged/CZTop-Reactor/browse
|
160
|
+
post_install_message:
|
161
|
+
rdoc_options: []
|
235
162
|
require_paths:
|
236
163
|
- lib
|
237
164
|
required_ruby_version: !ruby/object:Gem::Requirement
|
238
165
|
requirements:
|
239
166
|
- - ">="
|
240
167
|
- !ruby/object:Gem::Version
|
241
|
-
version:
|
168
|
+
version: '0'
|
242
169
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
243
170
|
requirements:
|
244
171
|
- - ">="
|
245
172
|
- !ruby/object:Gem::Version
|
246
173
|
version: '0'
|
247
174
|
requirements: []
|
248
|
-
|
249
|
-
|
250
|
-
signing_key:
|
175
|
+
rubygems_version: 3.1.6
|
176
|
+
signing_key:
|
251
177
|
specification_version: 4
|
252
|
-
summary: This is an implementation of the Reactor pattern described in
|
253
|
-
Software Architecture (Volume 2)
|
178
|
+
summary: This is an implementation of the Reactor pattern described in Pattern-Oriented
|
179
|
+
Software Architecture (Volume 2).
|
254
180
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|
data/ChangeLog
DELETED
@@ -1,223 +0,0 @@
|
|
1
|
-
2018-07-23 Michael Granger <ged@FaerieMUD.org>
|
2
|
-
|
3
|
-
* lib/cztop/reactor/socket_monitoring.rb:
|
4
|
-
Add socket monitoring methods for delayed and retried connections
|
5
|
-
[418d608db892] [tip]
|
6
|
-
|
7
|
-
* .hgtags:
|
8
|
-
Added tag v0.6.0 for changeset f97428feb0e2
|
9
|
-
[489876542fea]
|
10
|
-
|
11
|
-
* .hgsigs:
|
12
|
-
Added signature for changeset aea0b1dd1107
|
13
|
-
[f97428feb0e2] [v0.6.0]
|
14
|
-
|
15
|
-
* History.md, cztop-reactor.gemspec, lib/cztop/reactor.rb:
|
16
|
-
Bump the minor version, update history.
|
17
|
-
[aea0b1dd1107]
|
18
|
-
|
19
|
-
* lib/cztop/reactor/socket_monitoring.rb,
|
20
|
-
spec/cztop/reactor/socket_monitoring_spec.rb:
|
21
|
-
Fix unfinished socket monitor spec
|
22
|
-
[39358fbf9896]
|
23
|
-
|
24
|
-
2018-07-21 Michael Granger <ged@FaerieMUD.org>
|
25
|
-
|
26
|
-
* Manifest.txt, lib/cztop/reactor/socket_monitoring.rb,
|
27
|
-
spec/cztop/reactor/socket_monitoring_spec.rb:
|
28
|
-
Add a socket monitor mixin
|
29
|
-
[e65cdcbe5f89]
|
30
|
-
|
31
|
-
2018-07-11 Michael Granger <ged@FaerieMUD.org>
|
32
|
-
|
33
|
-
* .hgtags:
|
34
|
-
Added tag v0.5.0 for changeset c82d889b3d2e
|
35
|
-
[0338a8ab0f8b] [github/master]
|
36
|
-
|
37
|
-
* .hgsigs:
|
38
|
-
Added signature for changeset c6276b15f479
|
39
|
-
[c82d889b3d2e] [v0.5.0]
|
40
|
-
|
41
|
-
* History.md, Rakefile, cztop-reactor.gemspec, lib/cztop/reactor.rb:
|
42
|
-
Bump the minor version, cztop dep, and update History.
|
43
|
-
[c6276b15f479]
|
44
|
-
|
45
|
-
* cztop-reactor.gemspec, lib/cztop/reactor.rb,
|
46
|
-
spec/cztop/reactor_spec.rb:
|
47
|
-
Added methods to pause/resume all timers.
|
48
|
-
[67cfabefffd2]
|
49
|
-
|
50
|
-
2018-06-27 Michael Granger <ged@FaerieMUD.org>
|
51
|
-
|
52
|
-
* .hgtags:
|
53
|
-
Added tag v0.4.0 for changeset 36b814356934
|
54
|
-
[9e371cd81152]
|
55
|
-
|
56
|
-
* .hgsigs:
|
57
|
-
Added signature for changeset 4fa4ea9f2a91
|
58
|
-
[36b814356934] [v0.4.0]
|
59
|
-
|
60
|
-
* History.md, lib/cztop/reactor.rb:
|
61
|
-
Bump the minor version, update history.
|
62
|
-
[4fa4ea9f2a91]
|
63
|
-
|
64
|
-
* .ruby-version, lib/cztop/reactor.rb:
|
65
|
-
Make the reactor threadsafe
|
66
|
-
[c0beb742a2a2]
|
67
|
-
|
68
|
-
2018-06-06 Michael Granger <ged@FaerieMUD.org>
|
69
|
-
|
70
|
-
* Merged with 33bf1ec41017
|
71
|
-
[9ca502f040d3]
|
72
|
-
|
73
|
-
2017-11-07 Michael Granger <ged@FaerieMUD.org>
|
74
|
-
|
75
|
-
* .ruby-version:
|
76
|
-
Update to Ruby 2.4
|
77
|
-
[33bf1ec41017]
|
78
|
-
|
79
|
-
2018-06-06 Michael Granger <ged@FaerieMUD.org>
|
80
|
-
|
81
|
-
* lib/cztop/reactor/signal_handling.rb:
|
82
|
-
Fix docs and logging in signal handling mixin
|
83
|
-
[0adc6861a172]
|
84
|
-
|
85
|
-
* lib/cztop/reactor.rb:
|
86
|
-
Guard against events with no sockets
|
87
|
-
[749f5de1d5fe]
|
88
|
-
|
89
|
-
* certs/ged.pem:
|
90
|
-
Update my gem-signing cert
|
91
|
-
[26089589e937]
|
92
|
-
|
93
|
-
2017-05-19 Michael Granger <ged@FaerieMUD.org>
|
94
|
-
|
95
|
-
* Rakefile, cztop-reactor.gemspec:
|
96
|
-
Fix the rules for the gemspec.
|
97
|
-
[469956f9635b]
|
98
|
-
|
99
|
-
2017-05-16 Michael Granger <ged@FaerieMUD.org>
|
100
|
-
|
101
|
-
* .hgtags:
|
102
|
-
Added tag v0.3.0 for changeset 93726ed1d11c
|
103
|
-
[4a5ff1ab5370]
|
104
|
-
|
105
|
-
* .hgsigs:
|
106
|
-
Added signature for changeset b27d8748d922
|
107
|
-
[93726ed1d11c] [v0.3.0]
|
108
|
-
|
109
|
-
* History.md, lib/cztop/reactor.rb:
|
110
|
-
Bumped the minor version, updated history.
|
111
|
-
[b27d8748d922]
|
112
|
-
|
113
|
-
2017-05-15 Michael Granger <ged@FaerieMUD.org>
|
114
|
-
|
115
|
-
* .hgignore, Manifest.txt, lib/cztop/reactor/signal_handling.rb,
|
116
|
-
spec/cztop/reactor/signal_handling_spec.rb:
|
117
|
-
Add a mixin for signal handling.
|
118
|
-
[970a2eb110fb]
|
119
|
-
|
120
|
-
2017-04-30 Michael Granger <ged@FaerieMUD.org>
|
121
|
-
|
122
|
-
* .hgignore:
|
123
|
-
Ignore pkg directory
|
124
|
-
[1c8f915143cf]
|
125
|
-
|
126
|
-
2017-04-29 Michael Granger <ged@FaerieMUD.org>
|
127
|
-
|
128
|
-
* .hgtags:
|
129
|
-
Added tag v0.2.0 for changeset 05892f4b1e67
|
130
|
-
[188620133448]
|
131
|
-
|
132
|
-
* .hgsigs:
|
133
|
-
Added signature for changeset 94faa8741253
|
134
|
-
[05892f4b1e67] [v0.2.0]
|
135
|
-
|
136
|
-
* History.md, lib/cztop/reactor.rb:
|
137
|
-
Bump the minor version, update history.
|
138
|
-
[94faa8741253]
|
139
|
-
|
140
|
-
* lib/cztop/reactor.rb, spec/cztop/reactor_spec.rb:
|
141
|
-
Allow timers to be resumed after they're removed.
|
142
|
-
[2318715be614]
|
143
|
-
|
144
|
-
2017-04-19 Michael Granger <ged@FaerieMUD.org>
|
145
|
-
|
146
|
-
* Rakefile, cztop-reactor.gemspec:
|
147
|
-
Remove Rakefile guard against public release.
|
148
|
-
[bb56a75ae424]
|
149
|
-
|
150
|
-
2017-04-12 Michael Granger <ged@FaerieMUD.org>
|
151
|
-
|
152
|
-
* .hgtags:
|
153
|
-
Added tag v0.1.0 for changeset 436507f28e4d
|
154
|
-
[293cb9597072]
|
155
|
-
|
156
|
-
* .hgsigs:
|
157
|
-
Added signature for changeset 5f4e1c27760a
|
158
|
-
[436507f28e4d] [v0.1.0]
|
159
|
-
|
160
|
-
* History.md, lib/cztop/reactor.rb:
|
161
|
-
Set the minor version, update history file.
|
162
|
-
[5f4e1c27760a]
|
163
|
-
|
164
|
-
2017-03-27 Michael Granger <ged@FaerieMUD.org>
|
165
|
-
|
166
|
-
* .hgsigs:
|
167
|
-
Added signature for changeset 8616ee222428
|
168
|
-
[10a0b983e907]
|
169
|
-
|
170
|
-
* .hgtags:
|
171
|
-
Added tag v0.1.0.pre20170323172345 for changeset 77db55f567df
|
172
|
-
[8616ee222428]
|
173
|
-
|
174
|
-
* cztop-reactor.gemspec, lib/cztop/reactor.rb,
|
175
|
-
spec/cztop/reactor_spec.rb:
|
176
|
-
Add options for ignoring interrupts and blocking errors
|
177
|
-
[77db55f567df] [v0.1.0.pre20170323172345]
|
178
|
-
|
179
|
-
* .gems:
|
180
|
-
Fix fivefish gem name in gemset
|
181
|
-
[27fcb613383f]
|
182
|
-
|
183
|
-
2017-03-22 Michael Granger <ged@FaerieMUD.org>
|
184
|
-
|
185
|
-
* .hoerc, cztop-reactor.gemspec, lib/cztop/reactor.rb,
|
186
|
-
spec/cztop/reactor_spec.rb:
|
187
|
-
Allow a handler object instead of a block.
|
188
|
-
[10904c471caa]
|
189
|
-
|
190
|
-
2017-03-16 Michael Granger <ged@FaerieMUD.org>
|
191
|
-
|
192
|
-
* Rakefile, cztop-reactor.gemspec:
|
193
|
-
Add missing dependency on timers.
|
194
|
-
[962f88d917bf]
|
195
|
-
|
196
|
-
* .hgignore:
|
197
|
-
Ignore built gems
|
198
|
-
[594168b03b71]
|
199
|
-
|
200
|
-
* README.md:
|
201
|
-
Fix link in the README
|
202
|
-
[0391133d132d]
|
203
|
-
|
204
|
-
* .hgignore:
|
205
|
-
Ignore generated docs directory
|
206
|
-
[ad4092564786]
|
207
|
-
|
208
|
-
* README.md:
|
209
|
-
Tabs -> spaces in the README
|
210
|
-
[41ec0ff65005]
|
211
|
-
|
212
|
-
* cztop-reactor.gemspec:
|
213
|
-
Add generated gemspec
|
214
|
-
[b3fcff597575]
|
215
|
-
|
216
|
-
* .document, .editorconfig, .gems, .hgignore, .hoerc, .pryrc,
|
217
|
-
.rdoc_options, .ruby-gemset, .ruby-version, .simplecov, Gemfile,
|
218
|
-
History.md, LICENSE.txt, Manifest.txt, README.md, Rakefile,
|
219
|
-
certs/ged.pem, lib/cztop/reactor.rb, lib/cztop/reactor/event.rb,
|
220
|
-
spec/cztop/reactor/event_spec.rb, spec/cztop/reactor_spec.rb,
|
221
|
-
spec/spec_helper.rb:
|
222
|
-
Initial commit.
|
223
|
-
[5e3f2358036b]
|