libc-eventmachine 0.12.5.42
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/Rakefile +195 -0
- data/docs/COPYING +60 -0
- data/docs/ChangeLog +211 -0
- data/docs/DEFERRABLES +138 -0
- data/docs/EPOLL +141 -0
- data/docs/GNU +281 -0
- data/docs/INSTALL +15 -0
- data/docs/KEYBOARD +38 -0
- data/docs/LEGAL +25 -0
- data/docs/LIGHTWEIGHT_CONCURRENCY +72 -0
- data/docs/PURE_RUBY +77 -0
- data/docs/README +74 -0
- data/docs/RELEASE_NOTES +96 -0
- data/docs/SMTP +9 -0
- data/docs/SPAWNED_PROCESSES +93 -0
- data/docs/TODO +10 -0
- data/ext/binder.cpp +126 -0
- data/ext/binder.h +48 -0
- data/ext/cmain.cpp +582 -0
- data/ext/cplusplus.cpp +177 -0
- data/ext/ed.cpp +1522 -0
- data/ext/ed.h +380 -0
- data/ext/em.cpp +1947 -0
- data/ext/em.h +186 -0
- data/ext/emwin.cpp +300 -0
- data/ext/emwin.h +94 -0
- data/ext/epoll.cpp +26 -0
- data/ext/epoll.h +25 -0
- data/ext/eventmachine.h +98 -0
- data/ext/eventmachine_cpp.h +96 -0
- data/ext/extconf.rb +129 -0
- data/ext/fastfilereader/extconf.rb +77 -0
- data/ext/fastfilereader/mapper.cpp +214 -0
- data/ext/fastfilereader/mapper.h +59 -0
- data/ext/fastfilereader/rubymain.cpp +127 -0
- data/ext/files.cpp +94 -0
- data/ext/files.h +65 -0
- data/ext/kb.cpp +82 -0
- data/ext/page.cpp +107 -0
- data/ext/page.h +51 -0
- data/ext/pipe.cpp +351 -0
- data/ext/project.h +119 -0
- data/ext/rubymain.cpp +858 -0
- data/ext/sigs.cpp +89 -0
- data/ext/sigs.h +32 -0
- data/ext/ssl.cpp +423 -0
- data/ext/ssl.h +90 -0
- data/java/src/com/rubyeventmachine/Application.java +196 -0
- data/java/src/com/rubyeventmachine/Connection.java +74 -0
- data/java/src/com/rubyeventmachine/ConnectionFactory.java +37 -0
- data/java/src/com/rubyeventmachine/DefaultConnectionFactory.java +46 -0
- data/java/src/com/rubyeventmachine/EmReactor.java +408 -0
- data/java/src/com/rubyeventmachine/EmReactorException.java +40 -0
- data/java/src/com/rubyeventmachine/EventableChannel.java +57 -0
- data/java/src/com/rubyeventmachine/EventableDatagramChannel.java +171 -0
- data/java/src/com/rubyeventmachine/EventableSocketChannel.java +244 -0
- data/java/src/com/rubyeventmachine/PeriodicTimer.java +38 -0
- data/java/src/com/rubyeventmachine/Timer.java +54 -0
- data/java/src/com/rubyeventmachine/tests/ApplicationTest.java +108 -0
- data/java/src/com/rubyeventmachine/tests/ConnectTest.java +124 -0
- data/java/src/com/rubyeventmachine/tests/EMTest.java +80 -0
- data/java/src/com/rubyeventmachine/tests/TestDatagrams.java +53 -0
- data/java/src/com/rubyeventmachine/tests/TestServers.java +74 -0
- data/java/src/com/rubyeventmachine/tests/TestTimers.java +89 -0
- data/lib/em/deferrable.rb +208 -0
- data/lib/em/eventable.rb +39 -0
- data/lib/em/future.rb +62 -0
- data/lib/em/messages.rb +66 -0
- data/lib/em/processes.rb +68 -0
- data/lib/em/spawnable.rb +88 -0
- data/lib/em/streamer.rb +112 -0
- data/lib/eventmachine.rb +1920 -0
- data/lib/eventmachine_version.rb +31 -0
- data/lib/evma/callback.rb +32 -0
- data/lib/evma/container.rb +75 -0
- data/lib/evma/factory.rb +77 -0
- data/lib/evma/protocol.rb +87 -0
- data/lib/evma/reactor.rb +48 -0
- data/lib/evma.rb +32 -0
- data/lib/jeventmachine.rb +140 -0
- data/lib/pr_eventmachine.rb +1017 -0
- data/lib/protocols/buftok.rb +127 -0
- data/lib/protocols/header_and_content.rb +129 -0
- data/lib/protocols/httpcli2.rb +803 -0
- data/lib/protocols/httpclient.rb +270 -0
- data/lib/protocols/line_and_text.rb +126 -0
- data/lib/protocols/linetext2.rb +161 -0
- data/lib/protocols/memcache.rb +293 -0
- data/lib/protocols/postgres.rb +261 -0
- data/lib/protocols/saslauth.rb +179 -0
- data/lib/protocols/smtpclient.rb +308 -0
- data/lib/protocols/smtpserver.rb +556 -0
- data/lib/protocols/stomp.rb +153 -0
- data/lib/protocols/tcptest.rb +57 -0
- data/tasks/cpp.rake +77 -0
- data/tasks/project.rake +78 -0
- data/tasks/tests.rake +193 -0
- data/tests/test_attach.rb +83 -0
- data/tests/test_basic.rb +231 -0
- data/tests/test_bind.rb +73 -0
- data/tests/test_connection_count.rb +35 -0
- data/tests/test_defer.rb +47 -0
- data/tests/test_epoll.rb +163 -0
- data/tests/test_error_handler.rb +32 -0
- data/tests/test_errors.rb +82 -0
- data/tests/test_eventables.rb +77 -0
- data/tests/test_exc.rb +58 -0
- data/tests/test_futures.rb +214 -0
- data/tests/test_handler_check.rb +37 -0
- data/tests/test_hc.rb +218 -0
- data/tests/test_httpclient.rb +215 -0
- data/tests/test_httpclient2.rb +155 -0
- data/tests/test_kb.rb +61 -0
- data/tests/test_ltp.rb +188 -0
- data/tests/test_ltp2.rb +320 -0
- data/tests/test_next_tick.rb +109 -0
- data/tests/test_processes.rb +56 -0
- data/tests/test_pure.rb +129 -0
- data/tests/test_running.rb +47 -0
- data/tests/test_sasl.rb +74 -0
- data/tests/test_send_file.rb +243 -0
- data/tests/test_servers.rb +80 -0
- data/tests/test_smtpclient.rb +83 -0
- data/tests/test_smtpserver.rb +93 -0
- data/tests/test_spawn.rb +329 -0
- data/tests/test_ssl_args.rb +68 -0
- data/tests/test_ssl_methods.rb +50 -0
- data/tests/test_timers.rb +148 -0
- data/tests/test_ud.rb +43 -0
- data/tests/testem.rb +31 -0
- metadata +230 -0
data/lib/em/streamer.rb
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# $Id$
|
|
2
|
+
#
|
|
3
|
+
# Author:: Francis Cianfrocca (gmail: blackhedd)
|
|
4
|
+
# Homepage:: http://rubyeventmachine.com
|
|
5
|
+
# Date:: 16 Jul 2006
|
|
6
|
+
#
|
|
7
|
+
# See EventMachine and EventMachine::Connection for documentation and
|
|
8
|
+
# usage examples.
|
|
9
|
+
#
|
|
10
|
+
#----------------------------------------------------------------------------
|
|
11
|
+
#
|
|
12
|
+
# Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
|
13
|
+
# Gmail: blackhedd
|
|
14
|
+
#
|
|
15
|
+
# This program is free software; you can redistribute it and/or modify
|
|
16
|
+
# it under the terms of either: 1) the GNU General Public License
|
|
17
|
+
# as published by the Free Software Foundation; either version 2 of the
|
|
18
|
+
# License, or (at your option) any later version; or 2) Ruby's License.
|
|
19
|
+
#
|
|
20
|
+
# See the file COPYING for complete licensing information.
|
|
21
|
+
#
|
|
22
|
+
#---------------------------------------------------------------------------
|
|
23
|
+
#
|
|
24
|
+
#
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
module EventMachine
|
|
28
|
+
class FileStreamer
|
|
29
|
+
MappingThreshold = 16384
|
|
30
|
+
BackpressureLevel = 50000
|
|
31
|
+
ChunkSize = 16384
|
|
32
|
+
|
|
33
|
+
include Deferrable
|
|
34
|
+
def initialize connection, filename, args
|
|
35
|
+
@connection = connection
|
|
36
|
+
@http_chunks = args[:http_chunks]
|
|
37
|
+
|
|
38
|
+
if File.exist?(filename)
|
|
39
|
+
@size = File.size?(filename)
|
|
40
|
+
if @size <= MappingThreshold
|
|
41
|
+
stream_without_mapping filename
|
|
42
|
+
else
|
|
43
|
+
stream_with_mapping filename
|
|
44
|
+
end
|
|
45
|
+
else
|
|
46
|
+
fail "file not found"
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def stream_without_mapping filename
|
|
51
|
+
if @http_chunks
|
|
52
|
+
@connection.send_data "#{@size.to_s(16)}\r\n"
|
|
53
|
+
@connection.send_file_data filename
|
|
54
|
+
@connection.send_data "\r\n0\r\n\r\n"
|
|
55
|
+
else
|
|
56
|
+
@connection.send_file_data filename
|
|
57
|
+
end
|
|
58
|
+
succeed
|
|
59
|
+
end
|
|
60
|
+
private :stream_without_mapping
|
|
61
|
+
|
|
62
|
+
def stream_with_mapping filename
|
|
63
|
+
ensure_mapping_extension_is_present
|
|
64
|
+
|
|
65
|
+
@position = 0
|
|
66
|
+
@mapping = EventMachine::FastFileReader::Mapper.new filename
|
|
67
|
+
stream_one_chunk
|
|
68
|
+
end
|
|
69
|
+
private :stream_with_mapping
|
|
70
|
+
|
|
71
|
+
def stream_one_chunk
|
|
72
|
+
loop {
|
|
73
|
+
if @position < @size
|
|
74
|
+
if @connection.get_outbound_data_size > BackpressureLevel
|
|
75
|
+
EventMachine::next_tick {stream_one_chunk}
|
|
76
|
+
break
|
|
77
|
+
else
|
|
78
|
+
len = @size - @position
|
|
79
|
+
len = ChunkSize if (len > ChunkSize)
|
|
80
|
+
|
|
81
|
+
@connection.send_data( "#{len.to_s(16)}\r\n" ) if @http_chunks
|
|
82
|
+
@connection.send_data( @mapping.get_chunk( @position, len ))
|
|
83
|
+
@connection.send_data("\r\n") if @http_chunks
|
|
84
|
+
|
|
85
|
+
@position += len
|
|
86
|
+
end
|
|
87
|
+
else
|
|
88
|
+
@connection.send_data "0\r\n\r\n" if @http_chunks
|
|
89
|
+
@mapping.close
|
|
90
|
+
succeed
|
|
91
|
+
break
|
|
92
|
+
end
|
|
93
|
+
}
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
#--
|
|
97
|
+
# We use an outboard extension class to get memory-mapped files.
|
|
98
|
+
# It's outboard to avoid polluting the core distro, but that means
|
|
99
|
+
# there's a "hidden" dependency on it. The first time we get here in
|
|
100
|
+
# any run, try to load up the dependency extension. User code will see
|
|
101
|
+
# a LoadError if it's not available, but code that doesn't require
|
|
102
|
+
# mapped files will work fine without it. This is a somewhat difficult
|
|
103
|
+
# compromise between usability and proper modularization.
|
|
104
|
+
#
|
|
105
|
+
def ensure_mapping_extension_is_present
|
|
106
|
+
@@fastfilereader ||= (require 'fastfilereaderext')
|
|
107
|
+
end
|
|
108
|
+
private :ensure_mapping_extension_is_present
|
|
109
|
+
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|