eventmachine 1.0.0.beta.3 → 1.0.0.beta.4
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 +5 -0
- data/.yardopts +5 -1
- data/{docs/GNU → GNU} +0 -0
- data/Gemfile +1 -0
- data/{docs/COPYING → LICENSE} +0 -0
- data/README.md +109 -0
- data/Rakefile +8 -0
- data/docs/DocumentationGuidesIndex.md +27 -0
- data/docs/GettingStarted.md +521 -0
- data/docs/{ChangeLog → old/ChangeLog} +0 -0
- data/docs/{DEFERRABLES → old/DEFERRABLES} +0 -0
- data/docs/{EPOLL → old/EPOLL} +0 -0
- data/docs/{INSTALL → old/INSTALL} +0 -0
- data/docs/{KEYBOARD → old/KEYBOARD} +0 -0
- data/docs/{LEGAL → old/LEGAL} +0 -0
- data/docs/{LIGHTWEIGHT_CONCURRENCY → old/LIGHTWEIGHT_CONCURRENCY} +0 -0
- data/docs/{PURE_RUBY → old/PURE_RUBY} +0 -0
- data/docs/{RELEASE_NOTES → old/RELEASE_NOTES} +0 -0
- data/docs/{SMTP → old/SMTP} +0 -0
- data/docs/{SPAWNED_PROCESSES → old/SPAWNED_PROCESSES} +0 -0
- data/docs/{TODO → old/TODO} +0 -0
- data/eventmachine.gemspec +4 -1
- data/examples/guides/getting_started/01_eventmachine_echo_server.rb +18 -0
- data/examples/guides/getting_started/02_eventmachine_echo_server_that_recognizes_exit_command.rb +22 -0
- data/examples/guides/getting_started/03_simple_chat_server.rb +149 -0
- data/examples/guides/getting_started/04_simple_chat_server_step_one.rb +27 -0
- data/examples/guides/getting_started/05_simple_chat_server_step_two.rb +43 -0
- data/examples/guides/getting_started/06_simple_chat_server_step_three.rb +98 -0
- data/examples/guides/getting_started/07_simple_chat_server_step_four.rb +121 -0
- data/examples/guides/getting_started/08_simple_chat_server_step_five.rb +141 -0
- data/examples/{ex_channel.rb → old/ex_channel.rb} +3 -3
- data/examples/{ex_queue.rb → old/ex_queue.rb} +0 -0
- data/examples/{ex_tick_loop_array.rb → old/ex_tick_loop_array.rb} +0 -0
- data/examples/{ex_tick_loop_counter.rb → old/ex_tick_loop_counter.rb} +0 -0
- data/examples/{helper.rb → old/helper.rb} +0 -0
- data/ext/cmain.cpp +3 -3
- data/ext/ed.cpp +90 -15
- data/ext/ed.h +5 -5
- data/ext/em.cpp +47 -55
- data/ext/em.h +12 -2
- data/ext/pipe.cpp +2 -2
- data/ext/project.h +1 -1
- data/ext/rubymain.cpp +48 -3
- data/ext/ssl.cpp +5 -0
- data/java/src/com/rubyeventmachine/EmReactor.java +2 -2
- data/lib/em/buftok.rb +35 -63
- data/lib/em/callback.rb +43 -11
- data/lib/em/channel.rb +21 -14
- data/lib/em/completion.rb +304 -0
- data/lib/em/connection.rb +339 -209
- data/lib/em/deferrable.rb +4 -0
- data/lib/em/deferrable/pool.rb +2 -0
- data/lib/em/file_watch.rb +37 -18
- data/lib/em/iterator.rb +42 -42
- data/lib/em/pool.rb +146 -0
- data/lib/em/process_watch.rb +5 -4
- data/lib/em/processes.rb +8 -4
- data/lib/em/protocols/httpclient.rb +22 -11
- data/lib/em/protocols/httpclient2.rb +15 -5
- data/lib/em/protocols/line_protocol.rb +2 -1
- data/lib/em/protocols/memcache.rb +17 -9
- data/lib/em/protocols/object_protocol.rb +2 -1
- data/lib/em/protocols/postgres3.rb +8 -9
- data/lib/em/protocols/smtpclient.rb +19 -11
- data/lib/em/protocols/smtpserver.rb +1 -1
- data/lib/em/protocols/stomp.rb +8 -6
- data/lib/em/protocols/tcptest.rb +3 -2
- data/lib/em/pure_ruby.rb +212 -208
- data/lib/em/queue.rb +22 -13
- data/lib/em/resolver.rb +70 -64
- data/lib/em/spawnable.rb +6 -3
- data/lib/em/streamer.rb +33 -45
- data/lib/em/threaded_resource.rb +90 -0
- data/lib/em/timers.rb +6 -2
- data/lib/em/version.rb +1 -1
- data/lib/eventmachine.rb +538 -602
- data/lib/jeventmachine.rb +22 -1
- data/tasks/package.rake +12 -2
- data/tasks/test.rake +1 -0
- data/tests/em_test_helper.rb +12 -3
- data/tests/test_completion.rb +177 -0
- data/tests/test_epoll.rb +2 -2
- data/tests/test_httpclient.rb +9 -9
- data/tests/test_httpclient2.rb +11 -9
- data/tests/test_ltp.rb +2 -10
- data/tests/test_pool.rb +128 -0
- data/tests/test_processes.rb +20 -2
- data/tests/test_queue.rb +8 -0
- data/tests/test_resolver.rb +1 -1
- data/tests/test_set_sock_opt.rb +37 -0
- data/tests/test_shutdown_hooks.rb +23 -0
- data/tests/test_threaded_resource.rb +53 -0
- data/tests/test_unbind_reason.rb +31 -0
- metadata +262 -192
- data/README +0 -81
- data/tasks/doc.rake +0 -30
data/tests/test_ltp.rb
CHANGED
@@ -87,12 +87,8 @@ class TestLineAndTextProtocol < Test::Unit::TestCase
|
|
87
87
|
|
88
88
|
def test_lines_and_text
|
89
89
|
output = ''
|
90
|
-
lines_received = []
|
91
|
-
text_received = []
|
92
90
|
EM.run {
|
93
|
-
EM.start_server( "127.0.0.1", @port, LineAndTextTest )
|
94
|
-
conn.instance_eval "@lines = lines_received; @text = text_received"
|
95
|
-
end
|
91
|
+
EM.start_server( "127.0.0.1", @port, LineAndTextTest )
|
96
92
|
setup_timeout
|
97
93
|
|
98
94
|
EM.connect "127.0.0.1", @port, StopClient do |c|
|
@@ -125,12 +121,8 @@ class TestLineAndTextProtocol < Test::Unit::TestCase
|
|
125
121
|
|
126
122
|
def test_binary_text
|
127
123
|
output = ''
|
128
|
-
lines_received = []
|
129
|
-
text_received = []
|
130
124
|
EM.run {
|
131
|
-
EM.start_server( "127.0.0.1", @port, BinaryTextTest )
|
132
|
-
conn.instance_eval "@lines = lines_received; @text = text_received"
|
133
|
-
end
|
125
|
+
EM.start_server( "127.0.0.1", @port, BinaryTextTest )
|
134
126
|
setup_timeout
|
135
127
|
|
136
128
|
EM.connect "127.0.0.1", @port, StopClient do |c|
|
data/tests/test_pool.rb
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
class TestPool < Test::Unit::TestCase
|
2
|
+
def pool
|
3
|
+
@pool ||= EM::Pool.new
|
4
|
+
end
|
5
|
+
|
6
|
+
def go
|
7
|
+
EM.run { yield }
|
8
|
+
end
|
9
|
+
|
10
|
+
def stop
|
11
|
+
EM.stop
|
12
|
+
end
|
13
|
+
|
14
|
+
def deferrable
|
15
|
+
@deferrable ||= EM::DefaultDeferrable.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_supports_more_work_than_resources
|
19
|
+
ran = false
|
20
|
+
go do
|
21
|
+
pool.perform do
|
22
|
+
ran = true
|
23
|
+
deferrable
|
24
|
+
end
|
25
|
+
stop
|
26
|
+
end
|
27
|
+
assert_equal false, ran
|
28
|
+
go do
|
29
|
+
pool.add :resource
|
30
|
+
stop
|
31
|
+
end
|
32
|
+
assert_equal true, ran
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_reques_resources_on_error
|
36
|
+
pooled_res, pooled_res2 = nil
|
37
|
+
pool.add :res
|
38
|
+
go do
|
39
|
+
pool.perform do |res|
|
40
|
+
pooled_res = res
|
41
|
+
deferrable
|
42
|
+
end
|
43
|
+
stop
|
44
|
+
end
|
45
|
+
deferrable.fail
|
46
|
+
go do
|
47
|
+
pool.perform do |res|
|
48
|
+
pooled_res2 = res
|
49
|
+
deferrable
|
50
|
+
end
|
51
|
+
stop
|
52
|
+
end
|
53
|
+
assert_equal :res, pooled_res
|
54
|
+
assert_equal pooled_res, pooled_res2
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_supports_custom_error_handler
|
58
|
+
eres = nil
|
59
|
+
pool.on_error do |res|
|
60
|
+
eres = res
|
61
|
+
end
|
62
|
+
performs = []
|
63
|
+
pool.add :res
|
64
|
+
go do
|
65
|
+
pool.perform do |res|
|
66
|
+
performs << res
|
67
|
+
deferrable
|
68
|
+
end
|
69
|
+
pool.perform do |res|
|
70
|
+
performs << res
|
71
|
+
deferrable
|
72
|
+
end
|
73
|
+
deferrable.fail
|
74
|
+
stop
|
75
|
+
end
|
76
|
+
assert_equal :res, eres
|
77
|
+
# manual requeues required when error handler is installed:
|
78
|
+
assert_equal 1, performs.size
|
79
|
+
assert_equal :res, performs.first
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_catches_successful_deferrables
|
83
|
+
performs = []
|
84
|
+
pool.add :res
|
85
|
+
go do
|
86
|
+
pool.perform { |res| performs << res; deferrable }
|
87
|
+
pool.perform { |res| performs << res; deferrable }
|
88
|
+
stop
|
89
|
+
end
|
90
|
+
assert_equal [:res], performs
|
91
|
+
deferrable.succeed
|
92
|
+
go { stop }
|
93
|
+
assert_equal [:res, :res], performs
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_prunes_locked_and_removed_resources
|
97
|
+
performs = []
|
98
|
+
pool.add :res
|
99
|
+
deferrable.succeed
|
100
|
+
go do
|
101
|
+
pool.perform { |res| performs << res; pool.remove res; deferrable }
|
102
|
+
pool.perform { |res| performs << res; pool.remove res; deferrable }
|
103
|
+
stop
|
104
|
+
end
|
105
|
+
assert_equal [:res], performs
|
106
|
+
end
|
107
|
+
|
108
|
+
# Contents is only to be used for inspection of the pool!
|
109
|
+
def test_contents
|
110
|
+
pool.add :res
|
111
|
+
assert_equal [:res], pool.contents
|
112
|
+
# Assert that modifying the contents list does not affect the pools
|
113
|
+
# contents.
|
114
|
+
pool.contents.delete(:res)
|
115
|
+
assert_equal [:res], pool.contents
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_num_waiting
|
119
|
+
pool.add :res
|
120
|
+
assert_equal 0, pool.num_waiting
|
121
|
+
pool.perform { |r| EM::DefaultDeferrable.new }
|
122
|
+
assert_equal 0, pool.num_waiting
|
123
|
+
10.times { pool.perform { |r| EM::DefaultDeferrable.new } }
|
124
|
+
EM.run { EM.next_tick { EM.stop } }
|
125
|
+
assert_equal 10, pool.num_waiting
|
126
|
+
end
|
127
|
+
|
128
|
+
end
|
data/tests/test_processes.rb
CHANGED
@@ -78,7 +78,7 @@ class TestProcesses < Test::Unit::TestCase
|
|
78
78
|
|
79
79
|
def test_em_system_cmd_arguments
|
80
80
|
EM.run{
|
81
|
-
EM.system('
|
81
|
+
EM.system('echo', '1', '2', 'version', proc{ |process|
|
82
82
|
}, proc{ |out,status|
|
83
83
|
$out = out
|
84
84
|
$status = status
|
@@ -86,7 +86,7 @@ class TestProcesses < Test::Unit::TestCase
|
|
86
86
|
})
|
87
87
|
}
|
88
88
|
|
89
|
-
assert_match(/version/i, $out)
|
89
|
+
assert_match(/1 2 version/i, $out)
|
90
90
|
end
|
91
91
|
|
92
92
|
def test_em_system_spaced_arguments
|
@@ -99,6 +99,24 @@ class TestProcesses < Test::Unit::TestCase
|
|
99
99
|
|
100
100
|
assert_equal("hello\n", $out)
|
101
101
|
end
|
102
|
+
|
103
|
+
def test_em_popen_pause_resume
|
104
|
+
c_rx = 0
|
105
|
+
|
106
|
+
test_client = Module.new do
|
107
|
+
define_method :receive_data do |data|
|
108
|
+
c_rx += 1
|
109
|
+
pause
|
110
|
+
EM.add_timer(0.5) { EM.stop }
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
EM.run{
|
115
|
+
EM.popen('cat /dev/random', test_client)
|
116
|
+
}
|
117
|
+
|
118
|
+
assert_equal 1, c_rx
|
119
|
+
end
|
102
120
|
else
|
103
121
|
warn "EM.popen not implemented, skipping tests in #{__FILE__}"
|
104
122
|
|
data/tests/test_queue.rb
CHANGED
@@ -39,4 +39,12 @@ class TestEMQueue < Test::Unit::TestCase
|
|
39
39
|
EM.run { EM.next_tick { EM.stop } }
|
40
40
|
assert_equal 1, x
|
41
41
|
end
|
42
|
+
|
43
|
+
def test_num_waiting
|
44
|
+
q = EM::Queue.new
|
45
|
+
many = 3
|
46
|
+
many.times { q.pop {} }
|
47
|
+
EM.run { EM.next_tick { EM.stop } }
|
48
|
+
assert_equal many, q.num_waiting
|
49
|
+
end
|
42
50
|
end
|
data/tests/test_resolver.rb
CHANGED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'em_test_helper'
|
2
|
+
require 'socket'
|
3
|
+
|
4
|
+
class TestSetSockOpt < Test::Unit::TestCase
|
5
|
+
|
6
|
+
if EM.respond_to? :set_sock_opt
|
7
|
+
def setup
|
8
|
+
assert(!EM.reactor_running?)
|
9
|
+
end
|
10
|
+
|
11
|
+
def teardown
|
12
|
+
assert(!EM.reactor_running?)
|
13
|
+
end
|
14
|
+
|
15
|
+
#-------------------------------------
|
16
|
+
|
17
|
+
def test_set_sock_opt
|
18
|
+
test = self
|
19
|
+
EM.run do
|
20
|
+
EM.connect 'google.com', 80, Module.new {
|
21
|
+
define_method :post_init do
|
22
|
+
val = set_sock_opt Socket::SOL_SOCKET, Socket::SO_DEBUG, true
|
23
|
+
test.assert_equal 0, val
|
24
|
+
EM.stop
|
25
|
+
end
|
26
|
+
}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
else
|
30
|
+
warn "EM.set_sock_opt not implemented, skipping tests in #{__FILE__}"
|
31
|
+
|
32
|
+
# Because some rubies will complain if a TestCase class has no tests
|
33
|
+
def test_em_set_sock_opt_unsupported
|
34
|
+
assert true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'em_test_helper'
|
2
|
+
|
3
|
+
class TestShutdownHooks < Test::Unit::TestCase
|
4
|
+
def test_shutdown_hooks
|
5
|
+
r = false
|
6
|
+
EM.run {
|
7
|
+
EM.add_shutdown_hook { r = true }
|
8
|
+
EM.stop
|
9
|
+
}
|
10
|
+
assert_equal( true, r )
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_hook_order
|
14
|
+
r = []
|
15
|
+
EM.run {
|
16
|
+
EM.add_shutdown_hook { r << 2 }
|
17
|
+
EM.add_shutdown_hook { r << 1 }
|
18
|
+
EM.stop
|
19
|
+
}
|
20
|
+
assert_equal( [1, 2], r )
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
class TestThreadedResource < Test::Unit::TestCase
|
2
|
+
def object
|
3
|
+
@object ||= {}
|
4
|
+
end
|
5
|
+
|
6
|
+
def resource
|
7
|
+
@resource = EM::ThreadedResource.new do
|
8
|
+
object
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
resource.shutdown
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_dispatch_completion
|
17
|
+
EM.run do
|
18
|
+
completion = resource.dispatch do |o|
|
19
|
+
o[:foo] = :bar
|
20
|
+
:foo
|
21
|
+
end
|
22
|
+
completion.callback do |result|
|
23
|
+
assert_equal :foo, result
|
24
|
+
EM.stop
|
25
|
+
end
|
26
|
+
end
|
27
|
+
assert_equal :bar, object[:foo]
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_dispatch_failure
|
31
|
+
completion = resource.dispatch do |o|
|
32
|
+
raise 'boom'
|
33
|
+
end
|
34
|
+
completion.errback do |error|
|
35
|
+
assert_kind_of RuntimeError, error
|
36
|
+
assert_equal 'boom', error.message
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_dispatch_threading
|
41
|
+
main = Thread.current
|
42
|
+
resource.dispatch do |o|
|
43
|
+
o[:dispatch_thread] = Thread.current
|
44
|
+
end
|
45
|
+
assert_not_equal main, object[:dispatch_thread]
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_shutdown
|
49
|
+
# This test should get improved sometime. The method returning thread is
|
50
|
+
# NOT an api that will be maintained.
|
51
|
+
assert !resource.shutdown.alive?
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'em_test_helper'
|
2
|
+
require 'socket'
|
3
|
+
|
4
|
+
class TestUnbindReason < Test::Unit::TestCase
|
5
|
+
def test_connect_timeout
|
6
|
+
error = nil
|
7
|
+
EM.run {
|
8
|
+
conn = EM.connect 'google.com', 81, Module.new{ |m|
|
9
|
+
m.send(:define_method, :unbind) do |reason|
|
10
|
+
error = reason
|
11
|
+
EM.stop
|
12
|
+
end
|
13
|
+
}
|
14
|
+
conn.pending_connect_timeout = 0.1
|
15
|
+
}
|
16
|
+
assert_equal error, Errno::ETIMEDOUT
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_connect_refused
|
20
|
+
error = nil
|
21
|
+
EM.run {
|
22
|
+
EM.connect '127.0.0.1', 12388, Module.new{ |m|
|
23
|
+
m.send(:define_method, :unbind) do |reason|
|
24
|
+
error = reason
|
25
|
+
EM.stop
|
26
|
+
end
|
27
|
+
}
|
28
|
+
}
|
29
|
+
assert_equal error, Errno::ECONNREFUSED
|
30
|
+
end
|
31
|
+
end
|
metadata
CHANGED
@@ -1,39 +1,72 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eventmachine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 62196363
|
5
|
+
prerelease: 6
|
5
6
|
segments:
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
version: 1.0.0.beta.
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
- beta
|
11
|
+
- 4
|
12
|
+
version: 1.0.0.beta.4
|
12
13
|
platform: ruby
|
13
14
|
authors:
|
14
|
-
|
15
|
-
|
15
|
+
- Francis Cianfrocca
|
16
|
+
- Aman Gupta
|
16
17
|
autorequire:
|
17
18
|
bindir: bin
|
18
19
|
cert_chain: []
|
19
20
|
|
20
|
-
date: 2011-
|
21
|
+
date: 2011-09-09 00:00:00 -07:00
|
21
22
|
default_executable:
|
22
23
|
dependencies:
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
24
|
+
- !ruby/object:Gem::Dependency
|
25
|
+
name: rake-compiler
|
26
|
+
prerelease: false
|
27
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - "="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
hash: 15
|
33
|
+
segments:
|
34
|
+
- 0
|
35
|
+
- 7
|
36
|
+
- 6
|
37
|
+
version: 0.7.6
|
38
|
+
type: :development
|
39
|
+
version_requirements: *id001
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: yard
|
42
|
+
prerelease: false
|
43
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
hash: 7
|
49
|
+
segments:
|
50
|
+
- 0
|
51
|
+
- 7
|
52
|
+
- 2
|
53
|
+
version: 0.7.2
|
54
|
+
type: :development
|
55
|
+
version_requirements: *id002
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: bluecloth
|
58
|
+
prerelease: false
|
59
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
hash: 3
|
65
|
+
segments:
|
66
|
+
- 0
|
67
|
+
version: "0"
|
68
|
+
type: :development
|
69
|
+
version_requirements: *id003
|
37
70
|
description: |-
|
38
71
|
EventMachine implements a fast, single-threaded engine for arbitrary network
|
39
72
|
communications. It's extremely easy to use in Ruby. EventMachine wraps all
|
@@ -46,192 +79,229 @@ description: |-
|
|
46
79
|
of EventMachine is to enable programs to easily interface with other programs
|
47
80
|
using TCP/IP, especially if custom protocols are required.
|
48
81
|
email:
|
49
|
-
|
50
|
-
|
82
|
+
- garbagecat10@gmail.com
|
83
|
+
- aman@tmm1.net
|
51
84
|
executables: []
|
52
85
|
|
53
86
|
extensions:
|
54
|
-
|
55
|
-
|
56
|
-
extra_rdoc_files:
|
57
|
-
|
87
|
+
- ext/extconf.rb
|
88
|
+
- ext/fastfilereader/extconf.rb
|
89
|
+
extra_rdoc_files:
|
90
|
+
- README.md
|
91
|
+
- docs/DocumentationGuidesIndex.md
|
92
|
+
- docs/GettingStarted.md
|
93
|
+
- docs/old/ChangeLog
|
94
|
+
- docs/old/DEFERRABLES
|
95
|
+
- docs/old/EPOLL
|
96
|
+
- docs/old/INSTALL
|
97
|
+
- docs/old/KEYBOARD
|
98
|
+
- docs/old/LEGAL
|
99
|
+
- docs/old/LIGHTWEIGHT_CONCURRENCY
|
100
|
+
- docs/old/PURE_RUBY
|
101
|
+
- docs/old/RELEASE_NOTES
|
102
|
+
- docs/old/SMTP
|
103
|
+
- docs/old/SPAWNED_PROCESSES
|
104
|
+
- docs/old/TODO
|
58
105
|
files:
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
106
|
+
- .gitignore
|
107
|
+
- .yardopts
|
108
|
+
- GNU
|
109
|
+
- Gemfile
|
110
|
+
- LICENSE
|
111
|
+
- README.md
|
112
|
+
- Rakefile
|
113
|
+
- docs/DocumentationGuidesIndex.md
|
114
|
+
- docs/GettingStarted.md
|
115
|
+
- docs/old/ChangeLog
|
116
|
+
- docs/old/DEFERRABLES
|
117
|
+
- docs/old/EPOLL
|
118
|
+
- docs/old/INSTALL
|
119
|
+
- docs/old/KEYBOARD
|
120
|
+
- docs/old/LEGAL
|
121
|
+
- docs/old/LIGHTWEIGHT_CONCURRENCY
|
122
|
+
- docs/old/PURE_RUBY
|
123
|
+
- docs/old/RELEASE_NOTES
|
124
|
+
- docs/old/SMTP
|
125
|
+
- docs/old/SPAWNED_PROCESSES
|
126
|
+
- docs/old/TODO
|
127
|
+
- eventmachine.gemspec
|
128
|
+
- examples/guides/getting_started/01_eventmachine_echo_server.rb
|
129
|
+
- examples/guides/getting_started/02_eventmachine_echo_server_that_recognizes_exit_command.rb
|
130
|
+
- examples/guides/getting_started/03_simple_chat_server.rb
|
131
|
+
- examples/guides/getting_started/04_simple_chat_server_step_one.rb
|
132
|
+
- examples/guides/getting_started/05_simple_chat_server_step_two.rb
|
133
|
+
- examples/guides/getting_started/06_simple_chat_server_step_three.rb
|
134
|
+
- examples/guides/getting_started/07_simple_chat_server_step_four.rb
|
135
|
+
- examples/guides/getting_started/08_simple_chat_server_step_five.rb
|
136
|
+
- examples/old/ex_channel.rb
|
137
|
+
- examples/old/ex_queue.rb
|
138
|
+
- examples/old/ex_tick_loop_array.rb
|
139
|
+
- examples/old/ex_tick_loop_counter.rb
|
140
|
+
- examples/old/helper.rb
|
141
|
+
- ext/binder.cpp
|
142
|
+
- ext/binder.h
|
143
|
+
- ext/cmain.cpp
|
144
|
+
- ext/ed.cpp
|
145
|
+
- ext/ed.h
|
146
|
+
- ext/em.cpp
|
147
|
+
- ext/em.h
|
148
|
+
- ext/eventmachine.h
|
149
|
+
- ext/extconf.rb
|
150
|
+
- ext/fastfilereader/extconf.rb
|
151
|
+
- ext/fastfilereader/mapper.cpp
|
152
|
+
- ext/fastfilereader/mapper.h
|
153
|
+
- ext/fastfilereader/rubymain.cpp
|
154
|
+
- ext/kb.cpp
|
155
|
+
- ext/page.cpp
|
156
|
+
- ext/page.h
|
157
|
+
- ext/pipe.cpp
|
158
|
+
- ext/project.h
|
159
|
+
- ext/rubymain.cpp
|
160
|
+
- ext/ssl.cpp
|
161
|
+
- ext/ssl.h
|
162
|
+
- java/.classpath
|
163
|
+
- java/.project
|
164
|
+
- java/src/com/rubyeventmachine/EmReactor.java
|
165
|
+
- java/src/com/rubyeventmachine/EmReactorException.java
|
166
|
+
- java/src/com/rubyeventmachine/EventableChannel.java
|
167
|
+
- java/src/com/rubyeventmachine/EventableDatagramChannel.java
|
168
|
+
- java/src/com/rubyeventmachine/EventableSocketChannel.java
|
169
|
+
- lib/em/buftok.rb
|
170
|
+
- lib/em/callback.rb
|
171
|
+
- lib/em/channel.rb
|
172
|
+
- lib/em/completion.rb
|
173
|
+
- lib/em/connection.rb
|
174
|
+
- lib/em/deferrable.rb
|
175
|
+
- lib/em/deferrable/pool.rb
|
176
|
+
- lib/em/file_watch.rb
|
177
|
+
- lib/em/future.rb
|
178
|
+
- lib/em/iterator.rb
|
179
|
+
- lib/em/messages.rb
|
180
|
+
- lib/em/pool.rb
|
181
|
+
- lib/em/process_watch.rb
|
182
|
+
- lib/em/processes.rb
|
183
|
+
- lib/em/protocols.rb
|
184
|
+
- lib/em/protocols/header_and_content.rb
|
185
|
+
- lib/em/protocols/httpclient.rb
|
186
|
+
- lib/em/protocols/httpclient2.rb
|
187
|
+
- lib/em/protocols/line_and_text.rb
|
188
|
+
- lib/em/protocols/line_protocol.rb
|
189
|
+
- lib/em/protocols/linetext2.rb
|
190
|
+
- lib/em/protocols/memcache.rb
|
191
|
+
- lib/em/protocols/object_protocol.rb
|
192
|
+
- lib/em/protocols/postgres3.rb
|
193
|
+
- lib/em/protocols/saslauth.rb
|
194
|
+
- lib/em/protocols/smtpclient.rb
|
195
|
+
- lib/em/protocols/smtpserver.rb
|
196
|
+
- lib/em/protocols/socks4.rb
|
197
|
+
- lib/em/protocols/stomp.rb
|
198
|
+
- lib/em/protocols/tcptest.rb
|
199
|
+
- lib/em/pure_ruby.rb
|
200
|
+
- lib/em/queue.rb
|
201
|
+
- lib/em/resolver.rb
|
202
|
+
- lib/em/spawnable.rb
|
203
|
+
- lib/em/streamer.rb
|
204
|
+
- lib/em/threaded_resource.rb
|
205
|
+
- lib/em/tick_loop.rb
|
206
|
+
- lib/em/timers.rb
|
207
|
+
- lib/em/version.rb
|
208
|
+
- lib/eventmachine.rb
|
209
|
+
- lib/jeventmachine.rb
|
210
|
+
- tasks/cpp.rake_example
|
211
|
+
- tasks/package.rake
|
212
|
+
- tasks/test.rake
|
213
|
+
- tests/client.crt
|
214
|
+
- tests/client.key
|
215
|
+
- tests/em_test_helper.rb
|
216
|
+
- tests/test_attach.rb
|
217
|
+
- tests/test_basic.rb
|
218
|
+
- tests/test_channel.rb
|
219
|
+
- tests/test_completion.rb
|
220
|
+
- tests/test_connection_count.rb
|
221
|
+
- tests/test_defer.rb
|
222
|
+
- tests/test_deferrable.rb
|
223
|
+
- tests/test_epoll.rb
|
224
|
+
- tests/test_error_handler.rb
|
225
|
+
- tests/test_exc.rb
|
226
|
+
- tests/test_file_watch.rb
|
227
|
+
- tests/test_futures.rb
|
228
|
+
- tests/test_get_sock_opt.rb
|
229
|
+
- tests/test_handler_check.rb
|
230
|
+
- tests/test_hc.rb
|
231
|
+
- tests/test_httpclient.rb
|
232
|
+
- tests/test_httpclient2.rb
|
233
|
+
- tests/test_inactivity_timeout.rb
|
234
|
+
- tests/test_kb.rb
|
235
|
+
- tests/test_ltp.rb
|
236
|
+
- tests/test_ltp2.rb
|
237
|
+
- tests/test_next_tick.rb
|
238
|
+
- tests/test_object_protocol.rb
|
239
|
+
- tests/test_pause.rb
|
240
|
+
- tests/test_pending_connect_timeout.rb
|
241
|
+
- tests/test_pool.rb
|
242
|
+
- tests/test_process_watch.rb
|
243
|
+
- tests/test_processes.rb
|
244
|
+
- tests/test_proxy_connection.rb
|
245
|
+
- tests/test_pure.rb
|
246
|
+
- tests/test_queue.rb
|
247
|
+
- tests/test_resolver.rb
|
248
|
+
- tests/test_running.rb
|
249
|
+
- tests/test_sasl.rb
|
250
|
+
- tests/test_send_file.rb
|
251
|
+
- tests/test_servers.rb
|
252
|
+
- tests/test_set_sock_opt.rb
|
253
|
+
- tests/test_shutdown_hooks.rb
|
254
|
+
- tests/test_smtpclient.rb
|
255
|
+
- tests/test_smtpserver.rb
|
256
|
+
- tests/test_spawn.rb
|
257
|
+
- tests/test_ssl_args.rb
|
258
|
+
- tests/test_ssl_methods.rb
|
259
|
+
- tests/test_ssl_verify.rb
|
260
|
+
- tests/test_threaded_resource.rb
|
261
|
+
- tests/test_tick_loop.rb
|
262
|
+
- tests/test_timers.rb
|
263
|
+
- tests/test_ud.rb
|
264
|
+
- tests/test_unbind_reason.rb
|
199
265
|
has_rdoc: true
|
200
266
|
homepage: http://rubyeventmachine.com
|
201
267
|
licenses: []
|
202
268
|
|
203
269
|
post_install_message:
|
204
270
|
rdoc_options:
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
271
|
+
- --title
|
272
|
+
- EventMachine
|
273
|
+
- --main
|
274
|
+
- README.md
|
275
|
+
- -x
|
276
|
+
- lib/em/version
|
277
|
+
- -x
|
278
|
+
- lib/jeventmachine
|
213
279
|
require_paths:
|
214
|
-
|
280
|
+
- lib
|
215
281
|
required_ruby_version: !ruby/object:Gem::Requirement
|
282
|
+
none: false
|
216
283
|
requirements:
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
284
|
+
- - ">="
|
285
|
+
- !ruby/object:Gem::Version
|
286
|
+
hash: 3
|
287
|
+
segments:
|
288
|
+
- 0
|
289
|
+
version: "0"
|
222
290
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
291
|
+
none: false
|
223
292
|
requirements:
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
293
|
+
- - ">"
|
294
|
+
- !ruby/object:Gem::Version
|
295
|
+
hash: 25
|
296
|
+
segments:
|
297
|
+
- 1
|
298
|
+
- 3
|
299
|
+
- 1
|
300
|
+
version: 1.3.1
|
231
301
|
requirements: []
|
232
302
|
|
233
303
|
rubyforge_project: eventmachine
|
234
|
-
rubygems_version: 1.
|
304
|
+
rubygems_version: 1.6.2
|
235
305
|
signing_key:
|
236
306
|
specification_version: 3
|
237
307
|
summary: Ruby/EventMachine library
|