eventmachine 0.12.6-java → 0.12.8-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/{docs/README → README} +21 -13
- data/Rakefile +5 -3
- data/docs/DEFERRABLES +0 -5
- data/docs/INSTALL +2 -4
- data/docs/LEGAL +1 -1
- data/docs/LIGHTWEIGHT_CONCURRENCY +0 -2
- data/docs/PURE_RUBY +0 -2
- data/docs/RELEASE_NOTES +0 -2
- data/docs/SMTP +0 -7
- data/docs/SPAWNED_PROCESSES +0 -4
- data/docs/TODO +0 -2
- data/eventmachine.gemspec +17 -8
- data/examples/ex_channel.rb +43 -0
- data/examples/ex_queue.rb +2 -0
- data/examples/helper.rb +2 -0
- data/ext/cmain.cpp +119 -20
- data/ext/cplusplus.cpp +15 -6
- data/ext/ed.cpp +303 -93
- data/ext/ed.h +49 -22
- data/ext/em.cpp +368 -42
- data/ext/em.h +43 -6
- data/ext/eventmachine.h +21 -8
- data/ext/eventmachine_cpp.h +1 -0
- data/ext/extconf.rb +4 -0
- data/ext/kb.cpp +1 -2
- data/ext/pipe.cpp +1 -3
- data/ext/project.h +21 -0
- data/ext/rubymain.cpp +232 -32
- data/ext/ssl.cpp +38 -1
- data/ext/ssl.h +5 -1
- data/java/src/com/rubyeventmachine/Application.java +7 -3
- data/java/src/com/rubyeventmachine/EmReactor.java +16 -1
- data/java/src/com/rubyeventmachine/tests/ConnectTest.java +25 -3
- data/lib/{protocols → em}/buftok.rb +16 -5
- data/lib/em/callback.rb +26 -0
- data/lib/em/channel.rb +57 -0
- data/lib/em/connection.rb +505 -0
- data/lib/em/deferrable.rb +144 -165
- data/lib/em/file_watch.rb +54 -0
- data/lib/em/future.rb +24 -25
- data/lib/em/messages.rb +1 -1
- data/lib/em/process_watch.rb +44 -0
- data/lib/em/processes.rb +58 -52
- data/lib/em/protocols.rb +35 -0
- data/lib/em/protocols/header_and_content.rb +138 -0
- data/lib/em/protocols/httpclient.rb +263 -0
- data/lib/em/protocols/httpclient2.rb +582 -0
- data/lib/{protocols → em/protocols}/line_and_text.rb +2 -2
- data/lib/em/protocols/linetext2.rb +160 -0
- data/lib/{protocols → em/protocols}/memcache.rb +37 -7
- data/lib/em/protocols/object_protocol.rb +39 -0
- data/lib/em/protocols/postgres3.rb +247 -0
- data/lib/em/protocols/saslauth.rb +175 -0
- data/lib/em/protocols/smtpclient.rb +331 -0
- data/lib/em/protocols/smtpserver.rb +547 -0
- data/lib/em/protocols/stomp.rb +200 -0
- data/lib/{protocols → em/protocols}/tcptest.rb +21 -25
- data/lib/em/queue.rb +61 -0
- data/lib/em/spawnable.rb +53 -56
- data/lib/em/streamer.rb +92 -74
- data/lib/em/timers.rb +55 -0
- data/lib/em/version.rb +3 -0
- data/lib/eventmachine.rb +1008 -1298
- data/lib/evma.rb +1 -1
- data/lib/jeventmachine.rb +106 -101
- data/lib/pr_eventmachine.rb +47 -36
- data/tasks/project.rake +2 -1
- data/tests/client.crt +31 -0
- data/tests/client.key +51 -0
- data/tests/test_attach.rb +18 -0
- data/tests/test_basic.rb +108 -54
- data/tests/test_channel.rb +63 -0
- data/tests/test_connection_count.rb +2 -2
- data/tests/test_epoll.rb +109 -110
- data/tests/test_errors.rb +36 -36
- data/tests/test_exc.rb +22 -25
- data/tests/test_file_watch.rb +49 -0
- data/tests/test_futures.rb +77 -93
- data/tests/test_hc.rb +2 -2
- data/tests/test_httpclient.rb +55 -52
- data/tests/test_httpclient2.rb +110 -112
- data/tests/test_inactivity_timeout.rb +30 -0
- data/tests/test_kb.rb +8 -9
- data/tests/test_ltp2.rb +274 -277
- data/tests/test_next_tick.rb +91 -65
- data/tests/test_object_protocol.rb +37 -0
- data/tests/test_process_watch.rb +48 -0
- data/tests/test_processes.rb +56 -23
- data/tests/test_proxy_connection.rb +92 -0
- data/tests/test_pure.rb +1 -5
- data/tests/test_queue.rb +44 -0
- data/tests/test_running.rb +9 -14
- data/tests/test_sasl.rb +32 -34
- data/tests/test_send_file.rb +175 -176
- data/tests/test_servers.rb +37 -41
- data/tests/test_smtpserver.rb +47 -55
- data/tests/test_spawn.rb +284 -291
- data/tests/test_ssl_args.rb +1 -1
- data/tests/test_ssl_methods.rb +1 -1
- data/tests/test_ssl_verify.rb +82 -0
- data/tests/test_timers.rb +81 -88
- data/tests/test_ud.rb +0 -7
- data/tests/testem.rb +1 -1
- metadata +52 -36
- data/lib/em/eventable.rb +0 -39
- data/lib/eventmachine_version.rb +0 -31
- data/lib/protocols/header_and_content.rb +0 -129
- data/lib/protocols/httpcli2.rb +0 -803
- data/lib/protocols/httpclient.rb +0 -270
- data/lib/protocols/linetext2.rb +0 -161
- data/lib/protocols/postgres.rb +0 -261
- data/lib/protocols/saslauth.rb +0 -179
- data/lib/protocols/smtpclient.rb +0 -308
- data/lib/protocols/smtpserver.rb +0 -556
- data/lib/protocols/stomp.rb +0 -153
- data/tests/test_eventables.rb +0 -77
data/{docs/README → README}
RENAMED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
$Id$
|
|
2
|
-
|
|
3
1
|
= RUBY/EventMachine
|
|
4
2
|
|
|
5
3
|
Homepage:: http://rubyeventmachine.com
|
|
4
|
+
Rubyforge Page:: http://rubyforge.org/projects/eventmachine
|
|
5
|
+
Google Group:: http://groups.google.com/group/eventmachine
|
|
6
|
+
Mailing List:: http://rubyforge.org/pipermail/eventmachine-talk
|
|
7
|
+
RDoc:: http://eventmachine.rubyforge.org
|
|
8
|
+
IRC:: ##eventmachine on irc.freenode.net
|
|
6
9
|
Copyright:: (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
|
7
10
|
Email:: gmail address: garbagecat10
|
|
8
11
|
|
|
@@ -57,18 +60,23 @@ improved.
|
|
|
57
60
|
|
|
58
61
|
Here's a fully-functional echo server written with EventMachine:
|
|
59
62
|
|
|
60
|
-
|
|
61
|
-
require 'eventmachine'
|
|
63
|
+
require 'eventmachine'
|
|
62
64
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
end
|
|
68
|
-
end
|
|
65
|
+
module EchoServer
|
|
66
|
+
def post_init
|
|
67
|
+
puts "-- someone connected to the echo server!"
|
|
68
|
+
end
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
70
|
+
def receive_data data
|
|
71
|
+
send_data ">>>you sent: #{data}"
|
|
72
|
+
close_connection if data =~ /quit/i
|
|
73
|
+
end
|
|
73
74
|
|
|
75
|
+
def unbind
|
|
76
|
+
puts "-- someone disconnected from the echo server!"
|
|
77
|
+
end
|
|
78
|
+
end
|
|
74
79
|
|
|
80
|
+
EventMachine::run {
|
|
81
|
+
EventMachine::start_server "127.0.0.1", 8081, EchoServer
|
|
82
|
+
}
|
data/Rakefile
CHANGED
|
@@ -87,8 +87,8 @@ Spec = Gem::Specification.new do |s|
|
|
|
87
87
|
s.platform = Gem::Platform::RUBY
|
|
88
88
|
|
|
89
89
|
s.has_rdoc = true
|
|
90
|
-
s.rdoc_options = %w(--title EventMachine --main
|
|
91
|
-
s.extra_rdoc_files = Dir['docs/*']
|
|
90
|
+
s.rdoc_options = %w(--title EventMachine --main README --line-numbers -x lib/em/version -x lib/emva -x lib/evma/ -x lib/pr_eventmachine -x lib/jeventmachine)
|
|
91
|
+
s.extra_rdoc_files = Dir['README,docs/*']
|
|
92
92
|
|
|
93
93
|
s.files = `git ls-files`.split("\n")
|
|
94
94
|
|
|
@@ -124,7 +124,7 @@ of EventMachine is to enable programs to easily interface with other programs
|
|
|
124
124
|
using TCP/IP, especially if custom protocols are required.
|
|
125
125
|
EOD
|
|
126
126
|
|
|
127
|
-
require 'lib/
|
|
127
|
+
require 'lib/em/version'
|
|
128
128
|
s.version = EventMachine::VERSION
|
|
129
129
|
end
|
|
130
130
|
|
|
@@ -185,6 +185,7 @@ namespace :win32 do
|
|
|
185
185
|
end
|
|
186
186
|
end
|
|
187
187
|
|
|
188
|
+
desc "build binary win32 gem"
|
|
188
189
|
task :gem => :build_openssl do
|
|
189
190
|
Rake::Task['build'].invoke
|
|
190
191
|
Rake::Task['gem'].invoke
|
|
@@ -249,6 +250,7 @@ namespace :java do
|
|
|
249
250
|
end
|
|
250
251
|
end
|
|
251
252
|
|
|
253
|
+
desc "build a java binary gem"
|
|
252
254
|
task :gem => :build do
|
|
253
255
|
Rake::Task['gem'].invoke
|
|
254
256
|
end
|
data/docs/DEFERRABLES
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
$Id$
|
|
2
|
-
|
|
3
|
-
[DOCUMENT UNDER CONSTRUCTION]
|
|
4
|
-
|
|
5
1
|
EventMachine (EM) adds two different formalisms for lightweight concurrency to the Ruby programmer's toolbox: spawned processes and deferrables. This note will show you how to use deferrables. For more information, see the separate document LIGHTWEIGHT_CONCURRENCY.
|
|
6
2
|
|
|
7
|
-
|
|
8
3
|
=== What are Deferrables?
|
|
9
4
|
|
|
10
5
|
EventMachine's Deferrable borrows heavily from the "deferred" object in Python's "Twisted" event-handling framework. Here's a minimal example that illustrates Deferrable:
|
data/docs/INSTALL
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
$Id$
|
|
2
|
-
|
|
3
1
|
If you have obtained an EventMachine source-tarball (.tar.gz):
|
|
4
2
|
unzip and untar the tarball, and enter the directory that is
|
|
5
3
|
created. In that directory, say:
|
|
@@ -7,8 +5,8 @@ ruby setup.rb
|
|
|
7
5
|
(You may need to be root to execute this command.)
|
|
8
6
|
|
|
9
7
|
To create documentation for EventMachine, simply type:
|
|
10
|
-
rdoc
|
|
11
|
-
in the distro directory. Rdocs will be created in subdirectory
|
|
8
|
+
rake rdoc
|
|
9
|
+
in the distro directory. Rdocs will be created in subdirectory rdoc.
|
|
12
10
|
|
|
13
11
|
If you have obtained a gem version of EventMachine, install it in the
|
|
14
12
|
usual way (gem install eventmachine). You may need superuser privileges
|
data/docs/LEGAL
CHANGED
data/docs/PURE_RUBY
CHANGED
data/docs/RELEASE_NOTES
CHANGED
data/docs/SMTP
CHANGED
data/docs/SPAWNED_PROCESSES
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
$Id$
|
|
2
|
-
|
|
3
|
-
[DOCUMENT UNDER CONSTRUCTION]
|
|
4
|
-
|
|
5
1
|
EventMachine (EM) adds two different formalisms for lightweight concurrency to the Ruby programmer's toolbox: spawned processes and deferrables. This note will show you how to use spawned processes. For more information, see the separate document LIGHTWEIGHT_CONCURRENCY.
|
|
6
2
|
|
|
7
3
|
|
data/docs/TODO
CHANGED
data/eventmachine.gemspec
CHANGED
|
@@ -2,27 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = %q{eventmachine}
|
|
5
|
-
s.version = "0.12.
|
|
5
|
+
s.version = "0.12.8"
|
|
6
6
|
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
8
8
|
s.authors = ["Francis Cianfrocca"]
|
|
9
|
-
s.date = %q{2009-
|
|
10
|
-
s.description = %q{EventMachine implements a fast, single-threaded engine for arbitrary network
|
|
9
|
+
s.date = %q{2009-05-22}
|
|
10
|
+
s.description = %q{EventMachine implements a fast, single-threaded engine for arbitrary network
|
|
11
|
+
communications. It's extremely easy to use in Ruby. EventMachine wraps all
|
|
12
|
+
interactions with IP sockets, allowing programs to concentrate on the
|
|
13
|
+
implementation of network protocols. It can be used to create both network
|
|
14
|
+
servers and clients. To create a server or client, a Ruby program only needs
|
|
15
|
+
to specify the IP address and port, and provide a Module that implements the
|
|
16
|
+
communications protocol. Implementations of several standard network protocols
|
|
17
|
+
are provided with the package, primarily to serve as examples. The real goal
|
|
18
|
+
of EventMachine is to enable programs to easily interface with other programs
|
|
19
|
+
using TCP/IP, especially if custom protocols are required.
|
|
20
|
+
}
|
|
11
21
|
s.email = %q{garbagecat10@gmail.com}
|
|
12
22
|
s.extensions = ["ext/extconf.rb", "ext/fastfilereader/extconf.rb"]
|
|
13
|
-
s.extra_rdoc_files = ["docs/ChangeLog", "docs/COPYING", "docs/DEFERRABLES", "docs/EPOLL", "docs/GNU", "docs/INSTALL", "docs/KEYBOARD", "docs/LEGAL", "docs/LIGHTWEIGHT_CONCURRENCY", "docs/PURE_RUBY", "docs/README", "docs/RELEASE_NOTES", "docs/SMTP", "docs/SPAWNED_PROCESSES", "docs/TODO"]
|
|
14
|
-
s.files = [".gitignore", "Rakefile", "docs/COPYING", "docs/ChangeLog", "docs/DEFERRABLES", "docs/EPOLL", "docs/GNU", "docs/INSTALL", "docs/KEYBOARD", "docs/LEGAL", "docs/LIGHTWEIGHT_CONCURRENCY", "docs/PURE_RUBY", "docs/README", "docs/RELEASE_NOTES", "docs/SMTP", "docs/SPAWNED_PROCESSES", "docs/TODO", "eventmachine.gemspec", "ext/binder.cpp", "ext/binder.h", "ext/cmain.cpp", "ext/cplusplus.cpp", "ext/ed.cpp", "ext/ed.h", "ext/em.cpp", "ext/em.h", "ext/emwin.cpp", "ext/emwin.h", "ext/epoll.cpp", "ext/epoll.h", "ext/eventmachine.h", "ext/eventmachine_cpp.h", "ext/extconf.rb", "ext/fastfilereader/extconf.rb", "ext/fastfilereader/mapper.cpp", "ext/fastfilereader/mapper.h", "ext/fastfilereader/rubymain.cpp", "ext/files.cpp", "ext/files.h", "ext/kb.cpp", "ext/page.cpp", "ext/page.h", "ext/pipe.cpp", "ext/project.h", "ext/rubymain.cpp", "ext/sigs.cpp", "ext/sigs.h", "ext/ssl.cpp", "ext/ssl.h", "java/.classpath", "java/.project", "java/src/com/rubyeventmachine/Application.java", "java/src/com/rubyeventmachine/Connection.java", "java/src/com/rubyeventmachine/ConnectionFactory.java", "java/src/com/rubyeventmachine/DefaultConnectionFactory.java", "java/src/com/rubyeventmachine/EmReactor.java", "java/src/com/rubyeventmachine/EmReactorException.java", "java/src/com/rubyeventmachine/EventableChannel.java", "java/src/com/rubyeventmachine/EventableDatagramChannel.java", "java/src/com/rubyeventmachine/EventableSocketChannel.java", "java/src/com/rubyeventmachine/PeriodicTimer.java", "java/src/com/rubyeventmachine/Timer.java", "java/src/com/rubyeventmachine/tests/ApplicationTest.java", "java/src/com/rubyeventmachine/tests/ConnectTest.java", "java/src/com/rubyeventmachine/tests/EMTest.java", "java/src/com/rubyeventmachine/tests/TestDatagrams.java", "java/src/com/rubyeventmachine/tests/TestServers.java", "java/src/com/rubyeventmachine/tests/TestTimers.java", "lib/em/deferrable.rb", "lib/em/eventable.rb", "lib/em/future.rb", "lib/em/messages.rb", "lib/em/processes.rb", "lib/em/spawnable.rb", "lib/em/streamer.rb", "lib/eventmachine.rb", "lib/eventmachine_version.rb", "lib/evma.rb", "lib/evma/callback.rb", "lib/evma/container.rb", "lib/evma/factory.rb", "lib/evma/protocol.rb", "lib/evma/reactor.rb", "lib/jeventmachine.rb", "lib/pr_eventmachine.rb", "lib/protocols/buftok.rb", "lib/protocols/header_and_content.rb", "lib/protocols/httpcli2.rb", "lib/protocols/httpclient.rb", "lib/protocols/line_and_text.rb", "lib/protocols/linetext2.rb", "lib/protocols/memcache.rb", "lib/protocols/postgres.rb", "lib/protocols/saslauth.rb", "lib/protocols/smtpclient.rb", "lib/protocols/smtpserver.rb", "lib/protocols/stomp.rb", "lib/protocols/tcptest.rb", "setup.rb", "tasks/cpp.rake", "tasks/project.rake", "tasks/tests.rake", "tests/test_attach.rb", "tests/test_basic.rb", "tests/test_connection_count.rb", "tests/test_defer.rb", "tests/test_epoll.rb", "tests/test_error_handler.rb", "tests/test_errors.rb", "tests/test_eventables.rb", "tests/test_exc.rb", "tests/test_futures.rb", "tests/test_handler_check.rb", "tests/test_hc.rb", "tests/test_httpclient.rb", "tests/test_httpclient2.rb", "tests/test_kb.rb", "tests/test_ltp.rb", "tests/test_ltp2.rb", "tests/test_next_tick.rb", "tests/test_processes.rb", "tests/test_pure.rb", "tests/test_running.rb", "tests/test_sasl.rb", "tests/test_send_file.rb", "tests/test_servers.rb", "tests/test_smtpclient.rb", "tests/test_smtpserver.rb", "tests/test_spawn.rb", "tests/test_ssl_args.rb", "tests/test_ssl_methods.rb", "tests/test_timers.rb", "tests/test_ud.rb", "tests/testem.rb", "web/whatis"]
|
|
15
23
|
s.has_rdoc = true
|
|
24
|
+
s.files = [".gitignore", "README", "Rakefile", "docs/COPYING", "docs/ChangeLog", "docs/DEFERRABLES", "docs/EPOLL", "docs/GNU", "docs/INSTALL", "docs/KEYBOARD", "docs/LEGAL", "docs/LIGHTWEIGHT_CONCURRENCY", "docs/PURE_RUBY", "docs/RELEASE_NOTES", "docs/SMTP", "docs/SPAWNED_PROCESSES", "docs/TODO", "eventmachine.gemspec", "examples/ex_channel.rb", "examples/ex_queue.rb", "examples/helper.rb", "ext/binder.cpp", "ext/binder.h", "ext/cmain.cpp", "ext/cplusplus.cpp", "ext/ed.cpp", "ext/ed.h", "ext/em.cpp", "ext/em.h", "ext/emwin.cpp", "ext/emwin.h", "ext/epoll.cpp", "ext/epoll.h", "ext/eventmachine.h", "ext/eventmachine_cpp.h", "ext/extconf.rb", "ext/fastfilereader/extconf.rb", "ext/fastfilereader/mapper.cpp", "ext/fastfilereader/mapper.h", "ext/fastfilereader/rubymain.cpp", "ext/files.cpp", "ext/files.h", "ext/kb.cpp", "ext/page.cpp", "ext/page.h", "ext/pipe.cpp", "ext/project.h", "ext/rubymain.cpp", "ext/sigs.cpp", "ext/sigs.h", "ext/ssl.cpp", "ext/ssl.h", "java/.classpath", "java/.project", "java/src/com/rubyeventmachine/Application.java", "java/src/com/rubyeventmachine/Connection.java", "java/src/com/rubyeventmachine/ConnectionFactory.java", "java/src/com/rubyeventmachine/DefaultConnectionFactory.java", "java/src/com/rubyeventmachine/EmReactor.java", "java/src/com/rubyeventmachine/EmReactorException.java", "java/src/com/rubyeventmachine/EventableChannel.java", "java/src/com/rubyeventmachine/EventableDatagramChannel.java", "java/src/com/rubyeventmachine/EventableSocketChannel.java", "java/src/com/rubyeventmachine/PeriodicTimer.java", "java/src/com/rubyeventmachine/Timer.java", "java/src/com/rubyeventmachine/tests/ApplicationTest.java", "java/src/com/rubyeventmachine/tests/ConnectTest.java", "java/src/com/rubyeventmachine/tests/EMTest.java", "java/src/com/rubyeventmachine/tests/TestDatagrams.java", "java/src/com/rubyeventmachine/tests/TestServers.java", "java/src/com/rubyeventmachine/tests/TestTimers.java", "lib/em/buftok.rb", "lib/em/callback.rb", "lib/em/channel.rb", "lib/em/connection.rb", "lib/em/deferrable.rb", "lib/em/file_watch.rb", "lib/em/future.rb", "lib/em/messages.rb", "lib/em/process_watch.rb", "lib/em/processes.rb", "lib/em/protocols.rb", "lib/em/protocols/header_and_content.rb", "lib/em/protocols/httpclient.rb", "lib/em/protocols/httpclient2.rb", "lib/em/protocols/line_and_text.rb", "lib/em/protocols/linetext2.rb", "lib/em/protocols/memcache.rb", "lib/em/protocols/object_protocol.rb", "lib/em/protocols/postgres3.rb", "lib/em/protocols/saslauth.rb", "lib/em/protocols/smtpclient.rb", "lib/em/protocols/smtpserver.rb", "lib/em/protocols/stomp.rb", "lib/em/protocols/tcptest.rb", "lib/em/queue.rb", "lib/em/spawnable.rb", "lib/em/streamer.rb", "lib/em/timers.rb", "lib/em/version.rb", "lib/eventmachine.rb", "lib/evma.rb", "lib/evma/callback.rb", "lib/evma/container.rb", "lib/evma/factory.rb", "lib/evma/protocol.rb", "lib/evma/reactor.rb", "lib/jeventmachine.rb", "lib/pr_eventmachine.rb", "setup.rb", "tasks/cpp.rake", "tasks/project.rake", "tasks/tests.rake", "tests/client.crt", "tests/client.key", "tests/test_attach.rb", "tests/test_basic.rb", "tests/test_channel.rb", "tests/test_connection_count.rb", "tests/test_defer.rb", "tests/test_epoll.rb", "tests/test_error_handler.rb", "tests/test_errors.rb", "tests/test_exc.rb", "tests/test_file_watch.rb", "tests/test_futures.rb", "tests/test_handler_check.rb", "tests/test_hc.rb", "tests/test_httpclient.rb", "tests/test_httpclient2.rb", "tests/test_inactivity_timeout.rb", "tests/test_kb.rb", "tests/test_ltp.rb", "tests/test_ltp2.rb", "tests/test_next_tick.rb", "tests/test_object_protocol.rb", "tests/test_process_watch.rb", "tests/test_processes.rb", "tests/test_proxy_connection.rb", "tests/test_pure.rb", "tests/test_queue.rb", "tests/test_running.rb", "tests/test_sasl.rb", "tests/test_send_file.rb", "tests/test_servers.rb", "tests/test_smtpclient.rb", "tests/test_smtpserver.rb", "tests/test_spawn.rb", "tests/test_ssl_args.rb", "tests/test_ssl_methods.rb", "tests/test_ssl_verify.rb", "tests/test_timers.rb", "tests/test_ud.rb", "tests/testem.rb", "web/whatis"]
|
|
16
25
|
s.homepage = %q{http://rubyeventmachine.com}
|
|
17
|
-
s.rdoc_options = ["--title", "EventMachine", "--main", "
|
|
26
|
+
s.rdoc_options = ["--title", "EventMachine", "--main", "README", "--line-numbers", "-x", "lib/em/version", "-x", "lib/emva", "-x", "lib/evma/", "-x", "lib/pr_eventmachine", "-x", "lib/jeventmachine"]
|
|
18
27
|
s.require_paths = ["lib"]
|
|
19
28
|
s.rubyforge_project = %q{eventmachine}
|
|
20
|
-
s.rubygems_version = %q{1.3.
|
|
29
|
+
s.rubygems_version = %q{1.3.3}
|
|
21
30
|
s.summary = %q{Ruby/EventMachine library}
|
|
22
31
|
|
|
23
32
|
if s.respond_to? :specification_version then
|
|
24
33
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
|
25
|
-
s.specification_version =
|
|
34
|
+
s.specification_version = 3
|
|
26
35
|
|
|
27
36
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
|
28
37
|
else
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/helper'
|
|
2
|
+
|
|
3
|
+
EM.run do
|
|
4
|
+
|
|
5
|
+
# Create a channel to push data to, this could be stocks...
|
|
6
|
+
RandChannel = EM::Channel.new
|
|
7
|
+
|
|
8
|
+
# The server simply subscribes client connections to the channel on connect,
|
|
9
|
+
# and unsubscribes them on disconnect.
|
|
10
|
+
class Server < EM::Connection
|
|
11
|
+
def self.start(host = '127.0.0.1', port = 8000)
|
|
12
|
+
EM.start_server(host, port, self)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def post_init
|
|
16
|
+
@sid = RandChannel.subscribe { |m| send_data "#{m.inspect}\n" }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def unbind
|
|
20
|
+
RandChannel.unsubscribe @sid
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
Server.start
|
|
24
|
+
|
|
25
|
+
# Two client connections, that just print what they receive.
|
|
26
|
+
2.times do
|
|
27
|
+
EM.connect('127.0.0.1', 8000) do |c|
|
|
28
|
+
c.extend EM::P::LineText2
|
|
29
|
+
def c.receive_line(line)
|
|
30
|
+
puts "Subscriber: #{signature} got #{line}"
|
|
31
|
+
end
|
|
32
|
+
EM.add_timer(2) { c.close_connection }
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# This part of the example is more fake, but imagine sleep was in fact a
|
|
37
|
+
# long running calculation to achieve the value.
|
|
38
|
+
40.times do
|
|
39
|
+
EM.defer lambda { v = sleep(rand * 2); RandChannel << [Time.now, v] }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
EM.add_timer(5) { EM.stop }
|
|
43
|
+
end
|
data/examples/helper.rb
ADDED
data/ext/cmain.cpp
CHANGED
|
@@ -99,10 +99,10 @@ extern "C" const char *evma_install_oneshot_timer (int seconds)
|
|
|
99
99
|
evma_connect_to_server
|
|
100
100
|
**********************/
|
|
101
101
|
|
|
102
|
-
extern "C" const char *evma_connect_to_server (const char *server, int port)
|
|
102
|
+
extern "C" const char *evma_connect_to_server (const char *bind_addr, int bind_port, const char *server, int port)
|
|
103
103
|
{
|
|
104
104
|
ensure_eventmachine("evma_connect_to_server");
|
|
105
|
-
return EventMachine->ConnectToServer (server, port);
|
|
105
|
+
return EventMachine->ConnectToServer (bind_addr, bind_port, server, port);
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
/***************************
|
|
@@ -183,7 +183,45 @@ extern "C" const char *evma_open_keyboard()
|
|
|
183
183
|
return EventMachine->OpenKeyboard();
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
+
/*******************
|
|
187
|
+
evma_watch_filename
|
|
188
|
+
*******************/
|
|
186
189
|
|
|
190
|
+
extern "C" const char *evma_watch_filename (const char *fname)
|
|
191
|
+
{
|
|
192
|
+
ensure_eventmachine("evma_watch_filename");
|
|
193
|
+
return EventMachine->WatchFile(fname);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/*********************
|
|
197
|
+
evma_unwatch_filename
|
|
198
|
+
*********************/
|
|
199
|
+
|
|
200
|
+
extern "C" void evma_unwatch_filename (const char *sig)
|
|
201
|
+
{
|
|
202
|
+
ensure_eventmachine("evma_unwatch_file");
|
|
203
|
+
EventMachine->UnwatchFile(sig);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**************
|
|
207
|
+
evma_watch_pid
|
|
208
|
+
**************/
|
|
209
|
+
|
|
210
|
+
extern "C" const char *evma_watch_pid (int pid)
|
|
211
|
+
{
|
|
212
|
+
ensure_eventmachine("evma_watch_pid");
|
|
213
|
+
return EventMachine->WatchPid(pid);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/****************
|
|
217
|
+
evma_unwatch_pid
|
|
218
|
+
****************/
|
|
219
|
+
|
|
220
|
+
extern "C" void evma_unwatch_pid (const char *sig)
|
|
221
|
+
{
|
|
222
|
+
ensure_eventmachine("evma_unwatch_pid");
|
|
223
|
+
EventMachine->UnwatchPid(sig);
|
|
224
|
+
}
|
|
187
225
|
|
|
188
226
|
/****************************
|
|
189
227
|
evma_send_data_to_connection
|
|
@@ -264,17 +302,17 @@ extern "C" void evma_start_tls (const char *binding)
|
|
|
264
302
|
evma_set_tls_parms
|
|
265
303
|
******************/
|
|
266
304
|
|
|
267
|
-
extern "C" void evma_set_tls_parms (const char *binding, const char *privatekey_filename, const char *certchain_filename)
|
|
305
|
+
extern "C" void evma_set_tls_parms (const char *binding, const char *privatekey_filename, const char *certchain_filename, int verify_peer)
|
|
268
306
|
{
|
|
269
307
|
ensure_eventmachine("evma_set_tls_parms");
|
|
270
308
|
EventableDescriptor *ed = dynamic_cast <EventableDescriptor*> (Bindable_t::GetObject (binding));
|
|
271
309
|
if (ed)
|
|
272
|
-
ed->SetTlsParms (privatekey_filename, certchain_filename);
|
|
310
|
+
ed->SetTlsParms (privatekey_filename, certchain_filename, (verify_peer == 1 ? true : false));
|
|
273
311
|
}
|
|
274
312
|
|
|
275
|
-
|
|
313
|
+
/******************
|
|
276
314
|
evma_get_peer_cert
|
|
277
|
-
|
|
315
|
+
******************/
|
|
278
316
|
|
|
279
317
|
#ifdef WITH_SSL
|
|
280
318
|
extern "C" X509 *evma_get_peer_cert (const char *binding)
|
|
@@ -287,6 +325,20 @@ extern "C" X509 *evma_get_peer_cert (const char *binding)
|
|
|
287
325
|
}
|
|
288
326
|
#endif
|
|
289
327
|
|
|
328
|
+
/********************
|
|
329
|
+
evma_accept_ssl_peer
|
|
330
|
+
********************/
|
|
331
|
+
|
|
332
|
+
#ifdef WITH_SSL
|
|
333
|
+
extern "C" void evma_accept_ssl_peer (const char *binding)
|
|
334
|
+
{
|
|
335
|
+
ensure_eventmachine("evma_accept_ssl_peer");
|
|
336
|
+
ConnectionDescriptor *cd = dynamic_cast <ConnectionDescriptor*> (Bindable_t::GetObject (binding));
|
|
337
|
+
if (cd)
|
|
338
|
+
cd->AcceptSslPeer();
|
|
339
|
+
}
|
|
340
|
+
#endif
|
|
341
|
+
|
|
290
342
|
/*****************
|
|
291
343
|
evma_get_peername
|
|
292
344
|
*****************/
|
|
@@ -392,22 +444,22 @@ extern "C" const char *evma__write_file (const char *filename)
|
|
|
392
444
|
evma_get_comm_inactivity_timeout
|
|
393
445
|
********************************/
|
|
394
446
|
|
|
395
|
-
extern "C"
|
|
447
|
+
extern "C" float evma_get_comm_inactivity_timeout (const char *binding)
|
|
396
448
|
{
|
|
397
449
|
ensure_eventmachine("evma_get_comm_inactivity_timeout");
|
|
398
450
|
EventableDescriptor *ed = dynamic_cast <EventableDescriptor*> (Bindable_t::GetObject (binding));
|
|
399
451
|
if (ed) {
|
|
400
|
-
return ed->GetCommInactivityTimeout
|
|
452
|
+
return ed->GetCommInactivityTimeout();
|
|
401
453
|
}
|
|
402
454
|
else
|
|
403
|
-
return 0; //Perhaps this should be an exception. Access to an unknown binding.
|
|
455
|
+
return 0.0; //Perhaps this should be an exception. Access to an unknown binding.
|
|
404
456
|
}
|
|
405
457
|
|
|
406
458
|
/********************************
|
|
407
459
|
evma_set_comm_inactivity_timeout
|
|
408
460
|
********************************/
|
|
409
461
|
|
|
410
|
-
extern "C" int evma_set_comm_inactivity_timeout (const char *binding,
|
|
462
|
+
extern "C" int evma_set_comm_inactivity_timeout (const char *binding, float value)
|
|
411
463
|
{
|
|
412
464
|
ensure_eventmachine("evma_set_comm_inactivity_timeout");
|
|
413
465
|
EventableDescriptor *ed = dynamic_cast <EventableDescriptor*> (Bindable_t::GetObject (binding));
|
|
@@ -491,22 +543,22 @@ extern "C" int evma_get_outbound_data_size (const char *binding)
|
|
|
491
543
|
}
|
|
492
544
|
|
|
493
545
|
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
546
|
+
/**************
|
|
547
|
+
evma_set_epoll
|
|
548
|
+
**************/
|
|
497
549
|
|
|
498
|
-
extern "C" void
|
|
550
|
+
extern "C" void evma_set_epoll (int use)
|
|
499
551
|
{
|
|
500
|
-
bUseEpoll =
|
|
552
|
+
bUseEpoll = !!use;
|
|
501
553
|
}
|
|
502
554
|
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
555
|
+
/***************
|
|
556
|
+
evma_set_kqueue
|
|
557
|
+
***************/
|
|
506
558
|
|
|
507
|
-
extern "C" void
|
|
559
|
+
extern "C" void evma_set_kqueue (int use)
|
|
508
560
|
{
|
|
509
|
-
bUseKqueue =
|
|
561
|
+
bUseKqueue = !!use;
|
|
510
562
|
}
|
|
511
563
|
|
|
512
564
|
|
|
@@ -584,3 +636,50 @@ extern "C" int evma_send_file_data_to_connection (const char *binding, const cha
|
|
|
584
636
|
return 0;
|
|
585
637
|
}
|
|
586
638
|
|
|
639
|
+
|
|
640
|
+
/****************
|
|
641
|
+
evma_start_proxy
|
|
642
|
+
*****************/
|
|
643
|
+
|
|
644
|
+
extern "C" void evma_start_proxy (const char *from, const char *to)
|
|
645
|
+
{
|
|
646
|
+
ensure_eventmachine("evma_start_proxy");
|
|
647
|
+
EventableDescriptor *ed = dynamic_cast <EventableDescriptor*> (Bindable_t::GetObject (from));
|
|
648
|
+
if (ed)
|
|
649
|
+
ed->StartProxy(to);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
|
|
653
|
+
/***************
|
|
654
|
+
evma_stop_proxy
|
|
655
|
+
****************/
|
|
656
|
+
|
|
657
|
+
extern "C" void evma_stop_proxy (const char *from)
|
|
658
|
+
{
|
|
659
|
+
ensure_eventmachine("evma_stop_proxy");
|
|
660
|
+
EventableDescriptor *ed = dynamic_cast <EventableDescriptor*> (Bindable_t::GetObject (from));
|
|
661
|
+
if (ed)
|
|
662
|
+
ed->StopProxy();
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
|
|
666
|
+
/***************************
|
|
667
|
+
evma_get_heartbeat_interval
|
|
668
|
+
****************************/
|
|
669
|
+
|
|
670
|
+
extern "C" float evma_get_heartbeat_interval()
|
|
671
|
+
{
|
|
672
|
+
ensure_eventmachine("evma_get_heartbeat_interval");
|
|
673
|
+
return EventMachine->GetHeartbeatInterval();
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
|
|
677
|
+
/***************************
|
|
678
|
+
evma_set_heartbeat_interval
|
|
679
|
+
****************************/
|
|
680
|
+
|
|
681
|
+
extern "C" int evma_set_heartbeat_interval(float interval)
|
|
682
|
+
{
|
|
683
|
+
ensure_eventmachine("evma_set_heartbeat_interval");
|
|
684
|
+
return EventMachine->SetHeartbeatInterval(interval);
|
|
685
|
+
}
|