eventmachine 0.12.10-java → 1.0.0.beta.1-java
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.
- data/.gitignore +2 -0
- data/Gemfile +1 -0
- data/README +1 -2
- data/Rakefile +4 -76
- data/docs/DEFERRABLES +183 -70
- data/docs/KEYBOARD +15 -11
- data/docs/LIGHTWEIGHT_CONCURRENCY +84 -24
- data/docs/SMTP +3 -1
- data/docs/SPAWNED_PROCESSES +84 -25
- data/eventmachine.gemspec +19 -26
- data/examples/ex_tick_loop_array.rb +15 -0
- data/examples/ex_tick_loop_counter.rb +32 -0
- data/ext/binder.cpp +0 -1
- data/ext/cmain.cpp +36 -11
- data/ext/cplusplus.cpp +1 -1
- data/ext/ed.cpp +104 -113
- data/ext/ed.h +24 -30
- data/ext/em.cpp +347 -248
- data/ext/em.h +23 -16
- data/ext/eventmachine.h +5 -3
- data/ext/extconf.rb +5 -3
- data/ext/fastfilereader/extconf.rb +5 -3
- data/ext/fastfilereader/mapper.cpp +1 -1
- data/ext/kb.cpp +1 -3
- data/ext/pipe.cpp +9 -11
- data/ext/project.h +12 -4
- data/ext/rubymain.cpp +138 -89
- data/java/src/com/rubyeventmachine/EmReactor.java +1 -0
- data/lib/em/channel.rb +1 -1
- data/lib/em/connection.rb +6 -1
- data/lib/em/deferrable.rb +16 -2
- data/lib/em/iterator.rb +270 -0
- data/lib/em/protocols.rb +1 -1
- data/lib/em/protocols/httpclient.rb +5 -0
- data/lib/em/protocols/line_protocol.rb +28 -0
- data/lib/em/protocols/smtpserver.rb +101 -8
- data/lib/em/protocols/stomp.rb +1 -1
- data/lib/{pr_eventmachine.rb → em/pure_ruby.rb} +1 -11
- data/lib/em/queue.rb +1 -0
- data/lib/em/streamer.rb +1 -1
- data/lib/em/tick_loop.rb +85 -0
- data/lib/em/timers.rb +2 -1
- data/lib/em/version.rb +1 -1
- data/lib/eventmachine.rb +38 -84
- data/lib/jeventmachine.rb +1 -0
- data/tests/test_attach.rb +13 -3
- data/tests/test_basic.rb +60 -95
- data/tests/test_channel.rb +3 -2
- data/tests/test_defer.rb +14 -12
- data/tests/test_deferrable.rb +35 -0
- data/tests/test_file_watch.rb +1 -1
- data/tests/test_futures.rb +1 -1
- data/tests/test_hc.rb +40 -68
- data/tests/test_httpclient.rb +15 -6
- data/tests/test_httpclient2.rb +3 -2
- data/tests/test_inactivity_timeout.rb +3 -3
- data/tests/test_ltp.rb +13 -5
- data/tests/test_next_tick.rb +1 -1
- data/tests/test_pending_connect_timeout.rb +2 -2
- data/tests/test_process_watch.rb +36 -34
- data/tests/test_proxy_connection.rb +52 -0
- data/tests/test_pure.rb +10 -1
- data/tests/test_sasl.rb +1 -1
- data/tests/test_send_file.rb +16 -7
- data/tests/test_servers.rb +1 -1
- data/tests/test_tick_loop.rb +59 -0
- data/tests/test_timers.rb +13 -15
- metadata +45 -17
- data/web/whatis +0 -7
data/tests/test_process_watch.rb
CHANGED
|
@@ -2,47 +2,49 @@ $:.unshift "../lib"
|
|
|
2
2
|
require 'eventmachine'
|
|
3
3
|
require 'test/unit'
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
if EM.kqueue?
|
|
6
|
+
class TestProcessWatch < Test::Unit::TestCase
|
|
7
|
+
module ParentProcessWatcher
|
|
8
|
+
def process_forked
|
|
9
|
+
$forked = true
|
|
10
|
+
end
|
|
9
11
|
end
|
|
10
|
-
end
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
module ChildProcessWatcher
|
|
14
|
+
def process_exited
|
|
15
|
+
$exited = true
|
|
16
|
+
end
|
|
17
|
+
def unbind
|
|
18
|
+
$unbind = true
|
|
19
|
+
EM.stop
|
|
20
|
+
end
|
|
19
21
|
end
|
|
20
|
-
end
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
def setup
|
|
24
|
+
EM.kqueue = true
|
|
25
|
+
end
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
def teardown
|
|
28
|
+
EM.kqueue = false
|
|
29
|
+
end
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
def test_events
|
|
32
|
+
EM.run{
|
|
33
|
+
# watch ourselves for a fork notification
|
|
34
|
+
EM.watch_process(Process.pid, ParentProcessWatcher)
|
|
35
|
+
$fork_pid = fork{ sleep }
|
|
36
|
+
child = EM.watch_process($fork_pid, ChildProcessWatcher)
|
|
37
|
+
$pid = child.pid
|
|
37
38
|
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
EM.add_timer(0.2){
|
|
40
|
+
Process.kill('TERM', $fork_pid)
|
|
41
|
+
}
|
|
40
42
|
}
|
|
41
|
-
}
|
|
42
43
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
assert_equal($pid, $fork_pid)
|
|
45
|
+
assert($forked)
|
|
46
|
+
assert($exited)
|
|
47
|
+
assert($unbind)
|
|
48
|
+
end
|
|
47
49
|
end
|
|
48
|
-
end
|
|
50
|
+
end
|
|
@@ -29,6 +29,40 @@ class TestProxyConnection < Test::Unit::TestCase
|
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
+
module PartialProxyConnection
|
|
33
|
+
def initialize(client, request, length)
|
|
34
|
+
@client, @request, @length = client, request, length
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def post_init
|
|
38
|
+
EM::enable_proxy(self, @client, 0, @length)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def receive_data(data)
|
|
42
|
+
$unproxied_data = data
|
|
43
|
+
@client.send_data(data)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def connection_completed
|
|
47
|
+
EM.next_tick {
|
|
48
|
+
send_data @request
|
|
49
|
+
}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def proxy_target_unbound
|
|
53
|
+
$unbound_early = true
|
|
54
|
+
EM.stop
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def proxy_completed
|
|
58
|
+
$proxy_completed = true
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def unbind
|
|
62
|
+
@client.close_connection_after_writing
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
32
66
|
module Client
|
|
33
67
|
def connection_completed
|
|
34
68
|
send_data "EventMachine rocks!"
|
|
@@ -61,6 +95,12 @@ class TestProxyConnection < Test::Unit::TestCase
|
|
|
61
95
|
end
|
|
62
96
|
end
|
|
63
97
|
|
|
98
|
+
module PartialProxyServer
|
|
99
|
+
def receive_data(data)
|
|
100
|
+
EM.connect("127.0.0.1", 54321, PartialProxyConnection, self, data, 1)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
64
104
|
module EarlyClosingProxy
|
|
65
105
|
def receive_data(data)
|
|
66
106
|
EM.connect("127.0.0.1", 54321, ProxyConnection, self, data)
|
|
@@ -78,6 +118,18 @@ class TestProxyConnection < Test::Unit::TestCase
|
|
|
78
118
|
assert_equal("I know!", $client_data)
|
|
79
119
|
end
|
|
80
120
|
|
|
121
|
+
def test_partial_proxy_connection
|
|
122
|
+
EM.run {
|
|
123
|
+
EM.start_server("127.0.0.1", 54321, Server)
|
|
124
|
+
EM.start_server("127.0.0.1", 12345, PartialProxyServer)
|
|
125
|
+
EM.connect("127.0.0.1", 12345, Client)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
assert_equal("I know!", $client_data)
|
|
129
|
+
assert_equal(" know!", $unproxied_data)
|
|
130
|
+
assert($proxy_completed)
|
|
131
|
+
end
|
|
132
|
+
|
|
81
133
|
def test_early_close
|
|
82
134
|
$client_data = nil
|
|
83
135
|
EM.run {
|
data/tests/test_pure.rb
CHANGED
|
@@ -108,10 +108,19 @@ class TestPure < Test::Unit::TestCase
|
|
|
108
108
|
EM.run {
|
|
109
109
|
EM.start_server "0.0.0.0", 60002
|
|
110
110
|
EM.connect "0.0.0.0", 60002, TestConnaccepted
|
|
111
|
-
|
|
111
|
+
setup_timeout(1)
|
|
112
112
|
}
|
|
113
113
|
assert_equal( false, timeout )
|
|
114
114
|
end
|
|
115
|
+
|
|
116
|
+
def setup_timeout(timeout = 4)
|
|
117
|
+
EM.schedule {
|
|
118
|
+
start_time = EM.current_time
|
|
119
|
+
EM.add_periodic_timer(0.01) {
|
|
120
|
+
raise "timeout" if EM.current_time - start_time >= timeout
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
end
|
|
115
124
|
|
|
116
125
|
def test_reactor_running
|
|
117
126
|
a = false
|
data/tests/test_sasl.rb
CHANGED
data/tests/test_send_file.rb
CHANGED
|
@@ -63,6 +63,15 @@ class TestSendFile < Test::Unit::TestCase
|
|
|
63
63
|
File.unlink( TestFilename ) if File.exist?( TestFilename )
|
|
64
64
|
end
|
|
65
65
|
|
|
66
|
+
def setup_timeout(timeout = 4)
|
|
67
|
+
EM.schedule {
|
|
68
|
+
start_time = EM.current_time
|
|
69
|
+
EM.add_periodic_timer(0.01) {
|
|
70
|
+
raise "timeout" if EM.current_time - start_time >= timeout
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
end
|
|
74
|
+
|
|
66
75
|
def test_send_file
|
|
67
76
|
File.open( TestFilename, "w" ) {|f|
|
|
68
77
|
f << ("A" * 5000)
|
|
@@ -72,7 +81,7 @@ class TestSendFile < Test::Unit::TestCase
|
|
|
72
81
|
|
|
73
82
|
EM.run {
|
|
74
83
|
EM.start_server TestHost, TestPort, TestModule
|
|
75
|
-
|
|
84
|
+
setup_timeout
|
|
76
85
|
|
|
77
86
|
EM.connect TestHost, TestPort, TestClient do |c|
|
|
78
87
|
c.data_to { |d| data << d }
|
|
@@ -95,7 +104,7 @@ class TestSendFile < Test::Unit::TestCase
|
|
|
95
104
|
assert_raises( ex_class ) {
|
|
96
105
|
EM.run {
|
|
97
106
|
EM.start_server TestHost, TestPort, TestModule
|
|
98
|
-
|
|
107
|
+
setup_timeout
|
|
99
108
|
EM.connect TestHost, TestPort, TestClient do |c|
|
|
100
109
|
c.data_to { |d| data << d }
|
|
101
110
|
end
|
|
@@ -131,7 +140,7 @@ class TestSendFile < Test::Unit::TestCase
|
|
|
131
140
|
|
|
132
141
|
EM.run {
|
|
133
142
|
EM.start_server TestHost, TestPort, StreamTestModule
|
|
134
|
-
|
|
143
|
+
setup_timeout
|
|
135
144
|
EM.connect TestHost, TestPort, TestClient do |c|
|
|
136
145
|
c.data_to { |d| data << d }
|
|
137
146
|
end
|
|
@@ -151,7 +160,7 @@ class TestSendFile < Test::Unit::TestCase
|
|
|
151
160
|
|
|
152
161
|
EM.run {
|
|
153
162
|
EM.start_server TestHost, TestPort, ChunkStreamTestModule
|
|
154
|
-
|
|
163
|
+
setup_timeout
|
|
155
164
|
EM.connect TestHost, TestPort, TestClient do |c|
|
|
156
165
|
c.data_to { |d| data << d }
|
|
157
166
|
end
|
|
@@ -175,7 +184,7 @@ class TestSendFile < Test::Unit::TestCase
|
|
|
175
184
|
data = ''
|
|
176
185
|
EM.run {
|
|
177
186
|
EM.start_server TestHost, TestPort, BadFileTestModule
|
|
178
|
-
|
|
187
|
+
setup_timeout
|
|
179
188
|
EM.connect TestHost, TestPort, TestClient do |c|
|
|
180
189
|
c.data_to { |d| data << d }
|
|
181
190
|
end
|
|
@@ -198,7 +207,7 @@ class TestSendFile < Test::Unit::TestCase
|
|
|
198
207
|
|
|
199
208
|
EM.run {
|
|
200
209
|
EM.start_server TestHost, TestPort, StreamTestModule
|
|
201
|
-
|
|
210
|
+
setup_timeout
|
|
202
211
|
EM.connect TestHost, TestPort, TestClient do |c|
|
|
203
212
|
c.data_to { |d| data << d }
|
|
204
213
|
end
|
|
@@ -223,7 +232,7 @@ class TestSendFile < Test::Unit::TestCase
|
|
|
223
232
|
|
|
224
233
|
EM.run {
|
|
225
234
|
EM.start_server TestHost, TestPort, ChunkStreamTestModule
|
|
226
|
-
|
|
235
|
+
setup_timeout
|
|
227
236
|
EM.connect TestHost, TestPort, TestClient do |c|
|
|
228
237
|
c.data_to { |d| data << d }
|
|
229
238
|
end
|
data/tests/test_servers.rb
CHANGED
|
@@ -61,7 +61,7 @@ class TestServers < Test::Unit::TestCase
|
|
|
61
61
|
assert(grep_netstat(LocalTcpRexp).grep(%r(#{Port})).size >= 1, "Server didn't start")
|
|
62
62
|
EM.stop_server sig
|
|
63
63
|
# Give the server some time to shutdown.
|
|
64
|
-
EM.add_timer(0.
|
|
64
|
+
EM.add_timer(0.2) {
|
|
65
65
|
assert(grep_netstat(LocalTcpRexp).grep(%r(#{Port})).empty?, "Servers didn't stop")
|
|
66
66
|
EM.stop
|
|
67
67
|
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
require "test/unit"
|
|
2
|
+
require "eventmachine"
|
|
3
|
+
|
|
4
|
+
class TestEmTickLoop < Test::Unit::TestCase
|
|
5
|
+
def test_em_tick_loop
|
|
6
|
+
i = 0
|
|
7
|
+
EM.tick_loop { i += 1; EM.stop if i == 10 }
|
|
8
|
+
EM.run { EM.add_timer(1) { EM.stop } }
|
|
9
|
+
assert_equal i, 10
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_tick_loop_on_stop
|
|
13
|
+
t = nil
|
|
14
|
+
tick_loop = EM.tick_loop { :stop }
|
|
15
|
+
tick_loop.on_stop { t = true }
|
|
16
|
+
EM.run { EM.next_tick { EM.stop } }
|
|
17
|
+
assert t
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_start_twice
|
|
21
|
+
i = 0
|
|
22
|
+
s = 0
|
|
23
|
+
tick_loop = EM.tick_loop { i += 1; :stop }
|
|
24
|
+
tick_loop.on_stop { s += 1; EM.stop }
|
|
25
|
+
EM.run { EM.next_tick { EM.stop } }
|
|
26
|
+
assert_equal 1, i
|
|
27
|
+
assert_equal 1, s
|
|
28
|
+
tick_loop.start
|
|
29
|
+
EM.run { EM.next_tick { EM.stop } }
|
|
30
|
+
assert_equal 2, i
|
|
31
|
+
assert_equal 1, s # stop callbacks are only called once
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_stop
|
|
35
|
+
i, s = 0, 0
|
|
36
|
+
tick_loop = EM.tick_loop { i += 1 }
|
|
37
|
+
tick_loop.on_stop { s += 1 }
|
|
38
|
+
EM.run { EM.next_tick { tick_loop.stop; EM.next_tick { EM.stop } } }
|
|
39
|
+
assert tick_loop.stopped?
|
|
40
|
+
assert_equal 1, i
|
|
41
|
+
assert_equal 1, s
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_immediate_stops
|
|
45
|
+
s = 0
|
|
46
|
+
tick_loop = EM::TickLoop.new { }
|
|
47
|
+
tick_loop.on_stop { s += 1 }
|
|
48
|
+
tick_loop.on_stop { s += 1 }
|
|
49
|
+
assert_equal 2, s
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_stopped
|
|
53
|
+
tick_loop = EM::TickLoop.new { }
|
|
54
|
+
assert tick_loop.stopped?
|
|
55
|
+
tick_loop.start
|
|
56
|
+
assert !tick_loop.stopped?
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
data/tests/test_timers.rb
CHANGED
|
@@ -98,9 +98,9 @@ class TestTimers < Test::Unit::TestCase
|
|
|
98
98
|
def test_add_periodic_timer_cancel
|
|
99
99
|
x = 0
|
|
100
100
|
EventMachine.run {
|
|
101
|
-
pt = EM.add_periodic_timer(0.
|
|
101
|
+
pt = EM.add_periodic_timer(0.1) { x += 1 }
|
|
102
102
|
EM.cancel_timer(pt)
|
|
103
|
-
EM.add_timer(0.
|
|
103
|
+
EM.add_timer(0.2) { EM.stop }
|
|
104
104
|
}
|
|
105
105
|
assert( x == 0 )
|
|
106
106
|
end
|
|
@@ -124,21 +124,20 @@ class TestTimers < Test::Unit::TestCase
|
|
|
124
124
|
# Pure ruby and java versions have no built-in limit on the number of outstanding timers.
|
|
125
125
|
#
|
|
126
126
|
def test_timer_change_max_outstanding
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
}
|
|
127
|
+
defaults = EM.get_max_timers
|
|
128
|
+
EM.set_max_timers(100)
|
|
129
|
+
|
|
130
|
+
one_hundred_one_timers = proc { 101.times { EM.add_timer(5) {} } }
|
|
132
131
|
|
|
133
132
|
EM.run {
|
|
134
133
|
if EM.library_type == :pure_ruby
|
|
135
|
-
|
|
134
|
+
one_hundred_one_timers.call
|
|
136
135
|
elsif EM.library_type == :java
|
|
137
|
-
|
|
136
|
+
one_hundred_one_timers.call
|
|
138
137
|
else
|
|
139
138
|
begin
|
|
140
139
|
assert_raises( RuntimeError ) {
|
|
141
|
-
|
|
140
|
+
one_hundred_one_timers.call
|
|
142
141
|
}
|
|
143
142
|
rescue Object
|
|
144
143
|
p $!
|
|
@@ -148,15 +147,14 @@ class TestTimers < Test::Unit::TestCase
|
|
|
148
147
|
EM.stop
|
|
149
148
|
}
|
|
150
149
|
|
|
151
|
-
|
|
152
|
-
assert( EM.get_max_timers != 10001 )
|
|
153
|
-
EM.set_max_timers( 10001 )
|
|
154
|
-
assert( EM.get_max_timers == 10001 )
|
|
150
|
+
EM.set_max_timers( 101 )
|
|
155
151
|
|
|
156
152
|
EM.run {
|
|
157
|
-
|
|
153
|
+
one_hundred_one_timers.call
|
|
158
154
|
EM.stop
|
|
159
155
|
}
|
|
156
|
+
ensure
|
|
157
|
+
EM.set_max_timers(defaults)
|
|
160
158
|
end
|
|
161
159
|
|
|
162
160
|
end
|
metadata
CHANGED
|
@@ -1,19 +1,38 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: eventmachine
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
|
|
4
|
+
prerelease: true
|
|
5
|
+
segments:
|
|
6
|
+
- 1
|
|
7
|
+
- 0
|
|
8
|
+
- 0
|
|
9
|
+
- beta
|
|
10
|
+
- 1
|
|
11
|
+
version: 1.0.0.beta.1
|
|
5
12
|
platform: java
|
|
6
13
|
authors:
|
|
7
14
|
- Francis Cianfrocca
|
|
15
|
+
- Aman Gupta
|
|
8
16
|
autorequire:
|
|
9
17
|
bindir: bin
|
|
10
18
|
cert_chain: []
|
|
11
19
|
|
|
12
|
-
date:
|
|
20
|
+
date: 2010-11-13 00:00:00 -06:00
|
|
13
21
|
default_executable:
|
|
14
|
-
dependencies:
|
|
15
|
-
|
|
16
|
-
|
|
22
|
+
dependencies:
|
|
23
|
+
- !ruby/object:Gem::Dependency
|
|
24
|
+
name: rake-compiler
|
|
25
|
+
prerelease: false
|
|
26
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
|
27
|
+
requirements:
|
|
28
|
+
- - ">="
|
|
29
|
+
- !ruby/object:Gem::Version
|
|
30
|
+
segments:
|
|
31
|
+
- 0
|
|
32
|
+
version: "0"
|
|
33
|
+
type: :development
|
|
34
|
+
version_requirements: *id001
|
|
35
|
+
description: |-
|
|
17
36
|
EventMachine implements a fast, single-threaded engine for arbitrary network
|
|
18
37
|
communications. It's extremely easy to use in Ruby. EventMachine wraps all
|
|
19
38
|
interactions with IP sockets, allowing programs to concentrate on the
|
|
@@ -24,8 +43,9 @@ description: |
|
|
|
24
43
|
are provided with the package, primarily to serve as examples. The real goal
|
|
25
44
|
of EventMachine is to enable programs to easily interface with other programs
|
|
26
45
|
using TCP/IP, especially if custom protocols are required.
|
|
27
|
-
|
|
28
|
-
|
|
46
|
+
email:
|
|
47
|
+
- garbagecat10@gmail.com
|
|
48
|
+
- aman@tmm1.net
|
|
29
49
|
executables: []
|
|
30
50
|
|
|
31
51
|
extensions: []
|
|
@@ -34,6 +54,7 @@ extra_rdoc_files: []
|
|
|
34
54
|
|
|
35
55
|
files:
|
|
36
56
|
- .gitignore
|
|
57
|
+
- Gemfile
|
|
37
58
|
- README
|
|
38
59
|
- Rakefile
|
|
39
60
|
- docs/COPYING
|
|
@@ -53,6 +74,8 @@ files:
|
|
|
53
74
|
- eventmachine.gemspec
|
|
54
75
|
- examples/ex_channel.rb
|
|
55
76
|
- examples/ex_queue.rb
|
|
77
|
+
- examples/ex_tick_loop_array.rb
|
|
78
|
+
- examples/ex_tick_loop_counter.rb
|
|
56
79
|
- examples/helper.rb
|
|
57
80
|
- ext/binder.cpp
|
|
58
81
|
- ext/binder.h
|
|
@@ -111,6 +134,7 @@ files:
|
|
|
111
134
|
- lib/em/deferrable.rb
|
|
112
135
|
- lib/em/file_watch.rb
|
|
113
136
|
- lib/em/future.rb
|
|
137
|
+
- lib/em/iterator.rb
|
|
114
138
|
- lib/em/messages.rb
|
|
115
139
|
- lib/em/process_watch.rb
|
|
116
140
|
- lib/em/processes.rb
|
|
@@ -119,6 +143,7 @@ files:
|
|
|
119
143
|
- lib/em/protocols/httpclient.rb
|
|
120
144
|
- lib/em/protocols/httpclient2.rb
|
|
121
145
|
- lib/em/protocols/line_and_text.rb
|
|
146
|
+
- lib/em/protocols/line_protocol.rb
|
|
122
147
|
- lib/em/protocols/linetext2.rb
|
|
123
148
|
- lib/em/protocols/memcache.rb
|
|
124
149
|
- lib/em/protocols/object_protocol.rb
|
|
@@ -129,9 +154,11 @@ files:
|
|
|
129
154
|
- lib/em/protocols/socks4.rb
|
|
130
155
|
- lib/em/protocols/stomp.rb
|
|
131
156
|
- lib/em/protocols/tcptest.rb
|
|
157
|
+
- lib/em/pure_ruby.rb
|
|
132
158
|
- lib/em/queue.rb
|
|
133
159
|
- lib/em/spawnable.rb
|
|
134
160
|
- lib/em/streamer.rb
|
|
161
|
+
- lib/em/tick_loop.rb
|
|
135
162
|
- lib/em/timers.rb
|
|
136
163
|
- lib/em/version.rb
|
|
137
164
|
- lib/eventmachine.rb
|
|
@@ -142,7 +169,6 @@ files:
|
|
|
142
169
|
- lib/evma/protocol.rb
|
|
143
170
|
- lib/evma/reactor.rb
|
|
144
171
|
- lib/jeventmachine.rb
|
|
145
|
-
- lib/pr_eventmachine.rb
|
|
146
172
|
- setup.rb
|
|
147
173
|
- tasks/cpp.rake_example
|
|
148
174
|
- tests/client.crt
|
|
@@ -152,6 +178,7 @@ files:
|
|
|
152
178
|
- tests/test_channel.rb
|
|
153
179
|
- tests/test_connection_count.rb
|
|
154
180
|
- tests/test_defer.rb
|
|
181
|
+
- tests/test_deferrable.rb
|
|
155
182
|
- tests/test_epoll.rb
|
|
156
183
|
- tests/test_error_handler.rb
|
|
157
184
|
- tests/test_errors.rb
|
|
@@ -186,10 +213,10 @@ files:
|
|
|
186
213
|
- tests/test_ssl_args.rb
|
|
187
214
|
- tests/test_ssl_methods.rb
|
|
188
215
|
- tests/test_ssl_verify.rb
|
|
216
|
+
- tests/test_tick_loop.rb
|
|
189
217
|
- tests/test_timers.rb
|
|
190
218
|
- tests/test_ud.rb
|
|
191
219
|
- tests/testem.rb
|
|
192
|
-
- web/whatis
|
|
193
220
|
- lib/em_reactor.jar
|
|
194
221
|
has_rdoc: true
|
|
195
222
|
homepage: http://rubyeventmachine.com
|
|
@@ -201,7 +228,6 @@ rdoc_options:
|
|
|
201
228
|
- EventMachine
|
|
202
229
|
- --main
|
|
203
230
|
- README
|
|
204
|
-
- --line-numbers
|
|
205
231
|
- -x
|
|
206
232
|
- lib/em/version
|
|
207
233
|
- -x
|
|
@@ -209,8 +235,6 @@ rdoc_options:
|
|
|
209
235
|
- -x
|
|
210
236
|
- lib/evma/
|
|
211
237
|
- -x
|
|
212
|
-
- lib/pr_eventmachine
|
|
213
|
-
- -x
|
|
214
238
|
- lib/jeventmachine
|
|
215
239
|
require_paths:
|
|
216
240
|
- lib
|
|
@@ -218,18 +242,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
218
242
|
requirements:
|
|
219
243
|
- - ">="
|
|
220
244
|
- !ruby/object:Gem::Version
|
|
245
|
+
segments:
|
|
246
|
+
- 0
|
|
221
247
|
version: "0"
|
|
222
|
-
version:
|
|
223
248
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
224
249
|
requirements:
|
|
225
|
-
- - "
|
|
250
|
+
- - ">"
|
|
226
251
|
- !ruby/object:Gem::Version
|
|
227
|
-
|
|
228
|
-
|
|
252
|
+
segments:
|
|
253
|
+
- 1
|
|
254
|
+
- 3
|
|
255
|
+
- 1
|
|
256
|
+
version: 1.3.1
|
|
229
257
|
requirements: []
|
|
230
258
|
|
|
231
259
|
rubyforge_project: eventmachine
|
|
232
|
-
rubygems_version: 1.3.
|
|
260
|
+
rubygems_version: 1.3.6
|
|
233
261
|
signing_key:
|
|
234
262
|
specification_version: 3
|
|
235
263
|
summary: Ruby/EventMachine library
|