jubilee 2.1.0.Alpha1-java → 2.1.0.beta-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.
- checksums.yaml +4 -4
- data/.travis.yml +2 -2
- data/CHANGELOG +9 -0
- data/README.md +12 -7
- data/jars/vertx-core-2.1.1.jar +0 -0
- data/java/src/jubilee/JubileeService.java +3 -3
- data/java/src/org/jruby/jubilee/Const.java +1 -1
- data/java/src/org/jruby/jubilee/JubileeVerticle.java +29 -4
- data/java/src/org/jruby/jubilee/RackApplication.java +38 -35
- data/java/src/org/jruby/jubilee/RackEnvironment.java +57 -23
- data/java/src/org/jruby/jubilee/RackEnvironmentHash.java +64 -11
- data/java/src/org/jruby/jubilee/RackInput.java +13 -10
- data/java/src/org/jruby/jubilee/RubyCallable.java +52 -0
- data/java/src/org/jruby/jubilee/RubyChannel.java +89 -0
- data/java/src/org/jruby/jubilee/RubyHttpServerResponse.java +72 -60
- data/java/src/org/jruby/jubilee/RubyNetSocket.java +169 -0
- data/java/src/org/jruby/jubilee/RubyPlatformManager.java +129 -113
- data/java/src/org/jruby/jubilee/impl/RubyIORackInput.java +9 -9
- data/java/src/org/jruby/jubilee/impl/RubyNullIO.java +1 -1
- data/java/src/org/jruby/jubilee/utils/RubyHelper.java +0 -6
- data/java/src/org/jruby/jubilee/vertx/JubileeVertx.java +12 -11
- data/jubilee.gemspec +43 -20
- data/lib/jubilee.rb +0 -1
- data/lib/jubilee/cli.rb +5 -3
- data/lib/jubilee/configuration.rb +2 -7
- data/lib/jubilee/const.rb +30 -28
- data/lib/jubilee/response.rb +40 -5
- data/lib/jubilee/server.rb +0 -3
- data/lib/jubilee/version.rb +1 -1
- data/spec/apps/rails4/basic/Gemfile +0 -2
- data/spec/apps/rails4/basic/Gemfile.lock +0 -7
- data/spec/integration/basic_rack_spec.rb +4 -3
- data/spec/integration/basic_rails4_spec.rb +4 -3
- data/spec/integration/basic_sinatra_spec.rb +4 -4
- data/spec/spec_helper.rb +1 -0
- data/test/{config → apps}/app.rb +0 -0
- data/test/apps/checker.ru +5 -10
- data/test/apps/chunked.ru +3 -0
- data/test/{config → apps}/config.ru +0 -0
- data/test/apps/content_length.ru +3 -0
- data/test/apps/hex.ru +4 -0
- data/test/apps/hijack.ru +7 -0
- data/test/apps/hijack2.ru +7 -0
- data/test/apps/huge.ru +4 -0
- data/test/apps/method_override.ru +1 -1
- data/test/apps/overwrite_check.ru +3 -2
- data/test/apps/persistent.rb +14 -0
- data/test/apps/persistent.ru +3 -0
- data/test/apps/rack_input.ru +5 -0
- data/test/apps/self_chunked.ru +6 -0
- data/test/apps/sha1.ru +2 -0
- data/test/apps/simple.ru +10 -1
- data/test/jubilee/test_cli.rb +1 -1
- data/test/jubilee/test_configuration.rb +1 -3
- data/test/jubilee/test_hijack.rb +27 -0
- data/test/jubilee/test_persistent.rb +208 -0
- data/test/jubilee/test_rack_server.rb +29 -68
- data/test/jubilee/test_server.rb +49 -15
- data/test/jubilee/test_upload.rb +13 -60
- data/test/test_helper.rb +2 -2
- metadata +19 -9
- data/java/src/org/jruby/jubilee/RubyServer.java +0 -159
- data/lib/jubilee/jubilee.jar +0 -0
- data/lib/rack/chunked.rb +0 -38
- data/test/config/app.ru +0 -3
- data/test/jubilee/test_response.rb +0 -270
data/test/jubilee/test_server.rb
CHANGED
@@ -2,6 +2,7 @@ require 'test_helper'
|
|
2
2
|
require 'net/http'
|
3
3
|
|
4
4
|
class TestJubileeServer < MiniTest::Unit::TestCase
|
5
|
+
include Helpers
|
5
6
|
def setup
|
6
7
|
@host, @port = "localhost", 8080
|
7
8
|
@server = nil
|
@@ -13,27 +14,19 @@ class TestJubileeServer < MiniTest::Unit::TestCase
|
|
13
14
|
end
|
14
15
|
|
15
16
|
def test_server_embedded
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
sleep 0.5
|
20
|
-
http, body = Net::HTTP.new(@host, @port), nil
|
21
|
-
http.start do
|
22
|
-
req = Net::HTTP::Get.new "/", {}
|
23
|
-
http.request(req) do |resp|
|
24
|
-
body = resp.body
|
25
|
-
end
|
26
|
-
end
|
27
|
-
assert_equal "embedded app", body
|
17
|
+
start_server('config')
|
18
|
+
resp = GET("/")
|
19
|
+
assert_equal "embedded app", resp.body
|
28
20
|
end
|
29
21
|
|
30
22
|
def test_url_scheme_for_https
|
31
23
|
config = Jubilee::Configuration.new(rackup: File.expand_path("../../apps/url_scheme.ru", __FILE__), port: @port, ssl: true,
|
32
24
|
ssl_keystore: File.join(File.dirname(__FILE__), "../../examples/keystore.jks"),
|
33
|
-
ssl_password: "hellojubilee")
|
25
|
+
ssl_password: "hellojubilee", instances: 1)
|
34
26
|
@server = Jubilee::Server.new(config.options)
|
35
|
-
|
36
|
-
|
27
|
+
q = Queue.new
|
28
|
+
@server.start{ q << 1 }
|
29
|
+
q.pop
|
37
30
|
http = Net::HTTP.new @host, @port
|
38
31
|
http.use_ssl = true
|
39
32
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
@@ -50,4 +43,45 @@ class TestJubileeServer < MiniTest::Unit::TestCase
|
|
50
43
|
assert_equal "https", body
|
51
44
|
end
|
52
45
|
|
46
|
+
def test_proper_rack_input_io
|
47
|
+
start_server('rack_input')
|
48
|
+
fifteen = "1" * 15
|
49
|
+
|
50
|
+
sock = TCPSocket.new @host, @port
|
51
|
+
sock << "PUT / HTTP/1.0\r\nContent-Length: 30\r\n\r\n#{fifteen}"
|
52
|
+
sleep 0.1 # important so that the previous data is sent as a packet
|
53
|
+
sock << fifteen
|
54
|
+
|
55
|
+
while true
|
56
|
+
line = sock.gets
|
57
|
+
break if line == "\r\n"
|
58
|
+
end
|
59
|
+
data = sock.read
|
60
|
+
assert_equal "#{fifteen}#{fifteen}", data
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_huge_return
|
64
|
+
start_server('huge')
|
65
|
+
sock = TCPSocket.new @host, @port
|
66
|
+
sock << "GET / HTTP/1.0\r\n\r\n"
|
67
|
+
|
68
|
+
while true
|
69
|
+
line = sock.gets
|
70
|
+
break if line == "\r\n"
|
71
|
+
end
|
72
|
+
|
73
|
+
out = sock.read
|
74
|
+
|
75
|
+
giant = 2056610
|
76
|
+
assert_equal giant, out.bytesize
|
77
|
+
end
|
78
|
+
|
79
|
+
def start_server(rack, &block)
|
80
|
+
config = Jubilee::Configuration.new(rackup: File.expand_path("../../apps/#{rack}.ru", __FILE__), instances: 1)
|
81
|
+
@server = Jubilee::Server.new(config.options)
|
82
|
+
q = Queue.new
|
83
|
+
@server.start { q << 1 }
|
84
|
+
q.pop
|
85
|
+
sleep 0.1
|
86
|
+
end
|
53
87
|
end
|
data/test/jubilee/test_upload.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding: binary -*-
|
2
2
|
|
3
3
|
require 'test_helper'
|
4
|
-
require 'digest
|
4
|
+
require 'digest'
|
5
5
|
|
6
6
|
class TestUpload < MiniTest::Unit::TestCase
|
7
7
|
|
@@ -15,12 +15,12 @@ class TestUpload < MiniTest::Unit::TestCase
|
|
15
15
|
|
16
16
|
# we want random binary data to test 1.9 encoding-aware IO craziness
|
17
17
|
@random = File.open('/dev/urandom','rb')
|
18
|
-
sleep 1
|
19
18
|
end
|
20
19
|
|
21
20
|
def teardown
|
22
21
|
@server.stop
|
23
22
|
@random.close
|
23
|
+
sleep 0.1
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_put
|
@@ -41,10 +41,10 @@ class TestUpload < MiniTest::Unit::TestCase
|
|
41
41
|
|
42
42
|
def test_put_content_md5
|
43
43
|
start_server
|
44
|
-
skip "Vert.x doesn't hendle trailing headers"
|
45
44
|
md5 = Digest::MD5.new
|
46
45
|
sock = TCPSocket.new(@addr, @port)
|
47
46
|
sock.syswrite("PUT / HTTP/1.0\r\nTransfer-Encoding: chunked\r\n" \
|
47
|
+
"X-Expect-Size: #{length}\r\n" \
|
48
48
|
"Trailer: Content-MD5\r\n\r\n")
|
49
49
|
@count.times do |i|
|
50
50
|
buf = @random.sysread(@bs)
|
@@ -60,8 +60,10 @@ class TestUpload < MiniTest::Unit::TestCase
|
|
60
60
|
read = sock.read.split(/\r\n/)
|
61
61
|
assert_equal "HTTP/1.0 200 OK", read[0]
|
62
62
|
resp = eval(read.grep(/^X-Resp: /).first.sub!(/X-Resp: /, ''))
|
63
|
+
assert_equal length, resp[:size]
|
63
64
|
assert_equal @sha1.hexdigest, resp[:sha1]
|
64
|
-
|
65
|
+
#Vert.x doesn't handle trailing headers
|
66
|
+
#assert_equal content_md5, resp[:content_md5]
|
65
67
|
end
|
66
68
|
|
67
69
|
def test_put_trickle_small
|
@@ -113,6 +115,9 @@ class TestUpload < MiniTest::Unit::TestCase
|
|
113
115
|
def test_put_excessive_overwrite_closed
|
114
116
|
config = Jubilee::Configuration.new(rackup: File.expand_path("../../apps/overwrite_check.ru", __FILE__))
|
115
117
|
@server = Jubilee::Server.new(config.options)
|
118
|
+
q = Queue.new
|
119
|
+
@server.start { q << 1 }
|
120
|
+
q.pop
|
116
121
|
|
117
122
|
sock = TCPSocket.new(@addr, @port)
|
118
123
|
# buf = ' ' * @bs # Something is wrong with the vertx http compression
|
@@ -168,59 +173,6 @@ class TestUpload < MiniTest::Unit::TestCase
|
|
168
173
|
assert_match(/sysread_read_byte_match/, resp)
|
169
174
|
end
|
170
175
|
|
171
|
-
=begin
|
172
|
-
def test_chunked_upload_via_curl
|
173
|
-
# POSIX doesn't require all of these to be present on a system
|
174
|
-
which('curl') or return
|
175
|
-
which('sha1sum') or return
|
176
|
-
which('dd') or return
|
177
|
-
|
178
|
-
start_server
|
179
|
-
|
180
|
-
tmp = Tempfile.new('dd_dest')
|
181
|
-
assert(system("dd", "if=#{@random.path}", "of=#{tmp.path}",
|
182
|
-
"bs=#{@bs}", "count=#{@count}"),
|
183
|
-
"dd #@random to #{tmp}")
|
184
|
-
sha1_re = %r!\b([a-f0-9]{40})\b!
|
185
|
-
sha1_out = `sha1sum #{tmp.path}`
|
186
|
-
assert $?.success?, 'sha1sum ran OK'
|
187
|
-
|
188
|
-
assert_match(sha1_re, sha1_out)
|
189
|
-
sha1 = sha1_re.match(sha1_out)[1]
|
190
|
-
cmd = "curl -H 'X-Expect-Size: #{tmp.size}' --tcp-nodelay \
|
191
|
-
-isSf --no-buffer -T- " \
|
192
|
-
"http://#@addr:#@port/"
|
193
|
-
resp = Tempfile.new('resp')
|
194
|
-
resp.sync = true
|
195
|
-
|
196
|
-
rd, wr = IO.pipe
|
197
|
-
wr.sync = rd.sync = true
|
198
|
-
pid = fork {
|
199
|
-
STDIN.reopen(rd)
|
200
|
-
rd.close
|
201
|
-
wr.close
|
202
|
-
STDOUT.reopen(resp)
|
203
|
-
exec cmd
|
204
|
-
}
|
205
|
-
rd.close
|
206
|
-
|
207
|
-
tmp.rewind
|
208
|
-
@count.times { |i|
|
209
|
-
wr.write(tmp.read(@bs))
|
210
|
-
sleep(rand / 10) if 0 == i % 8
|
211
|
-
}
|
212
|
-
wr.close
|
213
|
-
pid, status = Process.waitpid2(pid)
|
214
|
-
|
215
|
-
resp.rewind
|
216
|
-
resp = resp.read
|
217
|
-
assert status.success?, 'curl ran OK'
|
218
|
-
assert_match(%r!\b#{sha1}\b!, resp)
|
219
|
-
assert_match(/sysread_read_byte_match/, resp)
|
220
|
-
assert_match(/expect_size_match/, resp)
|
221
|
-
end
|
222
|
-
=end
|
223
|
-
|
224
176
|
def test_curl_chunked_small
|
225
177
|
# POSIX doesn't require all of these to be present on a system
|
226
178
|
which('curl') or return
|
@@ -255,10 +207,11 @@ class TestUpload < MiniTest::Unit::TestCase
|
|
255
207
|
end
|
256
208
|
|
257
209
|
def start_server
|
258
|
-
config = Jubilee::Configuration.new(rackup: File.expand_path("../../apps/sha1.ru", __FILE__))
|
210
|
+
config = Jubilee::Configuration.new(rackup: File.expand_path("../../apps/sha1.ru", __FILE__), instances: 1)
|
259
211
|
@server = Jubilee::Server.new(config.options)
|
260
|
-
|
212
|
+
q = Queue.new
|
213
|
+
@server.start{ q << 1 }
|
214
|
+
q.pop
|
261
215
|
sleep 0.1
|
262
216
|
end
|
263
|
-
|
264
217
|
end
|
data/test/test_helper.rb
CHANGED
@@ -52,7 +52,7 @@ module Helpers
|
|
52
52
|
|
53
53
|
def GET(path, header={})
|
54
54
|
sleep 0.1
|
55
|
-
Net::HTTP.start(
|
55
|
+
Net::HTTP.start("localhost", 8080) { |http|
|
56
56
|
user = header.delete(:user)
|
57
57
|
passwd = header.delete(:passwd)
|
58
58
|
|
@@ -71,7 +71,7 @@ module Helpers
|
|
71
71
|
|
72
72
|
def POST(path, formdata={}, header={})
|
73
73
|
sleep 0.1
|
74
|
-
Net::HTTP.start(
|
74
|
+
Net::HTTP.start("localhost", 8080) { |http|
|
75
75
|
user = header.delete(:user)
|
76
76
|
passwd = header.delete(:passwd)
|
77
77
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jubilee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.0.
|
4
|
+
version: 2.1.0.beta
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Isaiah Peng
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -107,9 +107,11 @@ files:
|
|
107
107
|
- java/src/org/jruby/jubilee/RackEnvironmentHash.java
|
108
108
|
- java/src/org/jruby/jubilee/RackInput.java
|
109
109
|
- java/src/org/jruby/jubilee/RackResponse.java
|
110
|
+
- java/src/org/jruby/jubilee/RubyCallable.java
|
111
|
+
- java/src/org/jruby/jubilee/RubyChannel.java
|
110
112
|
- java/src/org/jruby/jubilee/RubyHttpServerResponse.java
|
113
|
+
- java/src/org/jruby/jubilee/RubyNetSocket.java
|
111
114
|
- java/src/org/jruby/jubilee/RubyPlatformManager.java
|
112
|
-
- java/src/org/jruby/jubilee/RubyServer.java
|
113
115
|
- java/src/org/jruby/jubilee/impl/RubyIORackInput.java
|
114
116
|
- java/src/org/jruby/jubilee/impl/RubyNullIO.java
|
115
117
|
- java/src/org/jruby/jubilee/utils/RubyHelper.java
|
@@ -120,11 +122,9 @@ files:
|
|
120
122
|
- lib/jubilee/cli.rb
|
121
123
|
- lib/jubilee/configuration.rb
|
122
124
|
- lib/jubilee/const.rb
|
123
|
-
- lib/jubilee/jubilee.jar
|
124
125
|
- lib/jubilee/response.rb
|
125
126
|
- lib/jubilee/server.rb
|
126
127
|
- lib/jubilee/version.rb
|
127
|
-
- lib/rack/chunked.rb
|
128
128
|
- lib/rack/handler/jubilee.rb
|
129
129
|
- lib/vertx.rb
|
130
130
|
- lib/vertx/README.md
|
@@ -211,20 +211,30 @@ files:
|
|
211
211
|
- spec/integration/basic_sinatra_spec.rb
|
212
212
|
- spec/spec_helper.rb
|
213
213
|
- test/.ruby-version
|
214
|
+
- test/apps/app.rb
|
214
215
|
- test/apps/checker.ru
|
216
|
+
- test/apps/chunked.ru
|
217
|
+
- test/apps/config.ru
|
218
|
+
- test/apps/content_length.ru
|
219
|
+
- test/apps/hex.ru
|
220
|
+
- test/apps/hijack.ru
|
221
|
+
- test/apps/hijack2.ru
|
222
|
+
- test/apps/huge.ru
|
215
223
|
- test/apps/method_override.ru
|
216
224
|
- test/apps/overwrite_check.ru
|
225
|
+
- test/apps/persistent.rb
|
226
|
+
- test/apps/persistent.ru
|
217
227
|
- test/apps/rack_crasher.ru
|
228
|
+
- test/apps/rack_input.ru
|
229
|
+
- test/apps/self_chunked.ru
|
218
230
|
- test/apps/sha1.ru
|
219
231
|
- test/apps/simple.ru
|
220
232
|
- test/apps/url_scheme.ru
|
221
|
-
- test/config/app.rb
|
222
|
-
- test/config/app.ru
|
223
|
-
- test/config/config.ru
|
224
233
|
- test/jubilee/test_cli.rb
|
225
234
|
- test/jubilee/test_configuration.rb
|
235
|
+
- test/jubilee/test_hijack.rb
|
236
|
+
- test/jubilee/test_persistent.rb
|
226
237
|
- test/jubilee/test_rack_server.rb
|
227
|
-
- test/jubilee/test_response.rb
|
228
238
|
- test/jubilee/test_server.rb
|
229
239
|
- test/jubilee/test_upload.rb
|
230
240
|
- test/test_helper.rb
|
@@ -1,159 +0,0 @@
|
|
1
|
-
package org.jruby.jubilee;
|
2
|
-
|
3
|
-
import org.jruby.*;
|
4
|
-
import org.jruby.anno.JRubyMethod;
|
5
|
-
import org.jruby.jubilee.vertx.JubileeVertx;
|
6
|
-
import org.jruby.runtime.Block;
|
7
|
-
import org.jruby.runtime.ObjectAllocator;
|
8
|
-
import org.jruby.runtime.ThreadContext;
|
9
|
-
import org.jruby.runtime.builtin.IRubyObject;
|
10
|
-
import org.vertx.java.core.Handler;
|
11
|
-
import org.vertx.java.core.Vertx;
|
12
|
-
import org.vertx.java.core.http.HttpServer;
|
13
|
-
import org.vertx.java.core.http.HttpServerRequest;
|
14
|
-
import org.vertx.java.core.json.JsonArray;
|
15
|
-
import org.vertx.java.core.json.JsonObject;
|
16
|
-
import org.vertx.java.platform.impl.WrappedVertx;
|
17
|
-
|
18
|
-
import java.io.IOException;
|
19
|
-
|
20
|
-
public class RubyServer extends RubyObject {
|
21
|
-
private Vertx vertx;
|
22
|
-
private HttpServer httpServer;
|
23
|
-
private RackApplication app;
|
24
|
-
private boolean running = false;
|
25
|
-
private boolean ssl = false;
|
26
|
-
private String keyStorePath;
|
27
|
-
private String keyStorePassword;
|
28
|
-
private String eventBusPrefix;
|
29
|
-
private int port;
|
30
|
-
private String host;
|
31
|
-
|
32
|
-
public static void createServerClass(Ruby runtime) {
|
33
|
-
RubyModule mJubilee = runtime.defineModule("Jubilee");
|
34
|
-
RubyClass serverClass = mJubilee.defineClassUnder("VertxServer", runtime.getObject(), ALLOCATOR);
|
35
|
-
serverClass.defineAnnotatedMethods(RubyServer.class);
|
36
|
-
}
|
37
|
-
|
38
|
-
private static ObjectAllocator ALLOCATOR = new ObjectAllocator() {
|
39
|
-
public IRubyObject allocate(Ruby ruby, RubyClass rubyClass) {
|
40
|
-
return new RubyServer(ruby, rubyClass);
|
41
|
-
}
|
42
|
-
};
|
43
|
-
|
44
|
-
public RubyServer(Ruby ruby, RubyClass rubyClass) {
|
45
|
-
super(ruby, rubyClass);
|
46
|
-
}
|
47
|
-
|
48
|
-
/**
|
49
|
-
* Initialize jubilee server, take a rack application and a configuration hash as parameter
|
50
|
-
*
|
51
|
-
* @param context
|
52
|
-
* @param app
|
53
|
-
* @param config
|
54
|
-
* @param block
|
55
|
-
* @return
|
56
|
-
*/
|
57
|
-
@JRubyMethod(name = "initialize")
|
58
|
-
public IRubyObject initialize(ThreadContext context, IRubyObject app, IRubyObject config, Block block) {
|
59
|
-
Ruby runtime = getRuntime();
|
60
|
-
/* configuration keys */
|
61
|
-
RubyHash options = config.convertToHash();
|
62
|
-
RubySymbol port_k = runtime.newSymbol("Port");
|
63
|
-
RubySymbol host_k = runtime.newSymbol("Host");
|
64
|
-
RubySymbol ssl_k = runtime.newSymbol("ssl");
|
65
|
-
RubySymbol ssl_keystore_k = runtime.newSymbol("ssl_keystore");
|
66
|
-
RubySymbol ssl_password_k = runtime.newSymbol("ssl_password");
|
67
|
-
RubySymbol eventbus_prefix_k = runtime.newSymbol("eventbus_prefix");
|
68
|
-
|
69
|
-
/* retrieve from passed in options */
|
70
|
-
this.port = RubyNumeric.num2int(options.op_aref(context, port_k));
|
71
|
-
this.host = options.op_aref(context, host_k).asJavaString();
|
72
|
-
|
73
|
-
this.ssl = options.op_aref(context, ssl_k).isTrue();
|
74
|
-
if (this.ssl) {
|
75
|
-
this.keyStorePath = options.op_aref(context, ssl_keystore_k).asJavaString();
|
76
|
-
if (options.has_key_p(ssl_password_k).isTrue())
|
77
|
-
this.keyStorePassword = options.op_aref(context, ssl_password_k).asJavaString();
|
78
|
-
}
|
79
|
-
if (options.has_key_p(eventbus_prefix_k).isTrue())
|
80
|
-
this.eventBusPrefix = options.op_aref(context, eventbus_prefix_k).asJavaString();
|
81
|
-
|
82
|
-
this.vertx = JubileeVertx.vertx();
|
83
|
-
|
84
|
-
httpServer = vertx.createHttpServer();
|
85
|
-
try {
|
86
|
-
this.app = new RackApplication((WrappedVertx) vertx, context, app, this.ssl);
|
87
|
-
if (block.isGiven()) block.yieldSpecific(context, this);
|
88
|
-
} catch (IOException e) {
|
89
|
-
// noop
|
90
|
-
}
|
91
|
-
return this;
|
92
|
-
}
|
93
|
-
|
94
|
-
/**
|
95
|
-
* Start http server, initialize states
|
96
|
-
*
|
97
|
-
* @param context
|
98
|
-
* @param block
|
99
|
-
* @return
|
100
|
-
*/
|
101
|
-
@JRubyMethod(name = "start")
|
102
|
-
public IRubyObject start(final ThreadContext context, final Block block) {
|
103
|
-
httpServer.setAcceptBacklog(10000);
|
104
|
-
httpServer.requestHandler(new Handler<HttpServerRequest>() {
|
105
|
-
public void handle(final HttpServerRequest req) {
|
106
|
-
app.call(req);
|
107
|
-
}
|
108
|
-
});
|
109
|
-
if (eventBusPrefix != null) {
|
110
|
-
JsonObject config = new JsonObject().putString("prefix", eventBusPrefix);
|
111
|
-
JsonArray allowAll = new JsonArray();
|
112
|
-
allowAll.add(new JsonObject());
|
113
|
-
// TODO read inbounds and outbounds from config file
|
114
|
-
vertx.createSockJSServer(httpServer).bridge(config, allowAll, allowAll);
|
115
|
-
}
|
116
|
-
if (ssl) httpServer.setSSL(true).setKeyStorePath(this.keyStorePath)
|
117
|
-
.setKeyStorePassword(this.keyStorePassword);
|
118
|
-
httpServer.listen(this.port, this.host);
|
119
|
-
this.running = true;
|
120
|
-
if (block.isGiven()) block.yieldSpecific(context, this);
|
121
|
-
return this;
|
122
|
-
}
|
123
|
-
|
124
|
-
/**
|
125
|
-
* Set timeout for keep alive connection
|
126
|
-
*
|
127
|
-
* @param context
|
128
|
-
* @param timeout (in TimeUnit.SECONDS)
|
129
|
-
* @return this
|
130
|
-
*/
|
131
|
-
@JRubyMethod(name = "persistent_timeout=")
|
132
|
-
public IRubyObject setPersistentTimeout(final ThreadContext context, final IRubyObject timeout) {
|
133
|
-
// FIXME
|
134
|
-
//httpServer.setPersistentTimeout(RubyInteger.fix2long(timeout) * 1000);
|
135
|
-
return this;
|
136
|
-
}
|
137
|
-
|
138
|
-
/**
|
139
|
-
* Stop the HttpServer
|
140
|
-
*
|
141
|
-
* @param context
|
142
|
-
* @param args if shutdown abruptly
|
143
|
-
* @param block callback on close
|
144
|
-
* @return
|
145
|
-
*/
|
146
|
-
@JRubyMethod(name = {"stop", "close"}, optional = 1)
|
147
|
-
public IRubyObject close(ThreadContext context, IRubyObject[] args, Block block) {
|
148
|
-
if (running) {
|
149
|
-
this.running = false;
|
150
|
-
httpServer.close();
|
151
|
-
// DO I need to stop?
|
152
|
-
//vertx.stop();
|
153
|
-
if (block.isGiven()) block.yieldSpecific(context);
|
154
|
-
} else {
|
155
|
-
getRuntime().getOutputStream().println("jubilee server not running?");
|
156
|
-
}
|
157
|
-
return getRuntime().getNil();
|
158
|
-
}
|
159
|
-
}
|