thick 0.0.8-java → 0.0.9-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +0 -114
- data/bin/thick +1 -5
- data/lib/jar/freemarker-2.3.23.jar +0 -0
- data/lib/jar/javassist-3.20.0-GA.jar +0 -0
- data/lib/jar/netty-buffer-4.1.0.CR3.jar +0 -0
- data/lib/jar/netty-codec-4.1.0.CR3.jar +0 -0
- data/lib/jar/netty-codec-http-4.1.0.CR3.jar +0 -0
- data/lib/jar/netty-common-4.1.0.CR3.jar +0 -0
- data/lib/jar/netty-handler-4.1.0.CR3.jar +0 -0
- data/lib/jar/netty-resolver-4.1.0.CR3.jar +0 -0
- data/lib/jar/netty-transport-4.1.0.CR3.jar +0 -0
- data/lib/jar/slf4j-api-1.7.13.jar +0 -0
- data/lib/jar/slf4j-simple-1.7.13.jar +0 -0
- data/lib/jar/wildweb-0.0.1.jar +0 -0
- data/lib/rack/handler/thick.rb +2 -17
- data/lib/thick.rb +6 -8
- data/lib/thick/server.rb +57 -0
- data/lib/thick/version.rb +1 -1
- metadata +42 -37
- data/CHANGELOG.md +0 -39
- data/ROADMAP.md +0 -11
- data/lib/jars/netty-4.0.0.Alpha8.jar +0 -0
- data/lib/jars/thick-0.0.1.jar +0 -0
- data/lib/thick/buffer.rb +0 -47
- data/lib/thick/java.rb +0 -10
- data/lib/thick/loader.rb +0 -48
- data/lib/thick/thick.rb +0 -25
- data/lib/thick/websocket.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e888a6f4de89327ea49ba352a44ea0c26dd4f1a
|
4
|
+
data.tar.gz: 6f7955f422fc51d1f95d26090a4a2b17fc19c31a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 572e77ec80f7b73c18a61b3315b97f81a063221906c6326bdfcd8c8ad3aed4766ba81f6f2771a32942dcf87a6ecb92ac0fc84618c1b9cdbccf46e664297dba03
|
7
|
+
data.tar.gz: 5e4cd35f58d10aa4bcc6906a5def62a0539af8bb0b5509bd08df787ec09f73b06d311ca3c49c6610717f32385b347ffa3cf3e2cc0a3ee4115528e0adbd81c14d
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -2,124 +2,10 @@
|
|
2
2
|
|
3
3
|
Thick is very lightweight web server for JRuby based on excellent Netty library.
|
4
4
|
|
5
|
-
[![Build Status](https://secure.travis-ci.org/marekjelen/thick.png?branch=master)](http://travis-ci.org/marekjelen/thick)
|
6
|
-
|
7
5
|
## Status
|
8
6
|
|
9
7
|
Works on several Sinatra and Rails applications. No real testing, yet.
|
10
8
|
|
11
|
-
## Speed
|
12
|
-
|
13
|
-
see PERFORMANCE.md
|
14
|
-
|
15
|
-
## Interfaces
|
16
|
-
|
17
|
-
Thick provides interfaces to control it's behaviour.
|
18
|
-
|
19
|
-
### WebSockets
|
20
|
-
|
21
|
-
Thick allows to handle WebSocket in a simple and (IMHO) not intrusive way.
|
22
|
-
|
23
|
-
When a request to WebSocket is received, the server send a PUT request to
|
24
|
-
|
25
|
-
```
|
26
|
-
/thick/websockets
|
27
|
-
```
|
28
|
-
and provides two keys in the environment
|
29
|
-
|
30
|
-
```ruby
|
31
|
-
env['thick.websocket'].set_handler(Your::Handler)
|
32
|
-
env['thick.websocket'].hand_shake("websocket URL")
|
33
|
-
```
|
34
|
-
|
35
|
-
Your::Handler should subclass *Thick::WebSocket* class. It is used to provide interface
|
36
|
-
between your application and the connection. The interface for communication from the
|
37
|
-
client to your application looks like
|
38
|
-
|
39
|
-
```ruby
|
40
|
-
class WebSocket < WebSocketHandler
|
41
|
-
|
42
|
-
def on_open
|
43
|
-
raise NotImplementedError.new("You should implement '#on_open' method.")
|
44
|
-
end
|
45
|
-
|
46
|
-
def on_data(data)
|
47
|
-
raise NotImplementedError.new("You should implement '#on_data(data)' method.")
|
48
|
-
end
|
49
|
-
|
50
|
-
def on_close
|
51
|
-
raise NotImplementedError.new("You should implement '#on_close' method.")
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
```
|
56
|
-
|
57
|
-
Two more methods are available to control communicate back to the client
|
58
|
-
|
59
|
-
```ruby
|
60
|
-
send("data") # sends data back to client
|
61
|
-
close # closes the connection
|
62
|
-
```
|
63
|
-
|
64
|
-
The *hand_shake("url")* method URL asks the server to finish the hand shake and upgrade
|
65
|
-
the connection to WebSocket.
|
66
|
-
|
67
|
-
### Asynchronous responses
|
68
|
-
|
69
|
-
Asynchronous responses provide functionality to stream response to the client by chunks.
|
70
|
-
|
71
|
-
To enable streaming, run
|
72
|
-
|
73
|
-
```ruby
|
74
|
-
env['thick.response'].chunked # For chunked encoded stream
|
75
|
-
env['thick.response'].streamed # For raw stream
|
76
|
-
```
|
77
|
-
|
78
|
-
and define "thick.async" callback in environment, so it reacts to "call" and takes one argument
|
79
|
-
|
80
|
-
```ruby
|
81
|
-
env['thick.async'] = proc do |response|
|
82
|
-
# do something here
|
83
|
-
end
|
84
|
-
```
|
85
|
-
|
86
|
-
now simply respond as usual. Once the headers and the basic content is sent, the callback will be invoked.
|
87
|
-
|
88
|
-
To write content to the stream use
|
89
|
-
|
90
|
-
```ruby
|
91
|
-
response.writeContent("some content")
|
92
|
-
```
|
93
|
-
|
94
|
-
and do not forget close the stream once done
|
95
|
-
|
96
|
-
```ruby
|
97
|
-
response.close
|
98
|
-
```
|
99
|
-
|
100
|
-
Example using Sinatra
|
101
|
-
|
102
|
-
```ruby
|
103
|
-
require 'sinatra/base'
|
104
|
-
|
105
|
-
class App < Sinatra::Base
|
106
|
-
|
107
|
-
get '/' do
|
108
|
-
env['thick.async'] = proc do |response|
|
109
|
-
(1..10).each do |i|
|
110
|
-
response.writeContent(i.to_s)
|
111
|
-
sleep(1)
|
112
|
-
end
|
113
|
-
response.close
|
114
|
-
end
|
115
|
-
env['thick.response'].chunked
|
116
|
-
"0"
|
117
|
-
end
|
118
|
-
|
119
|
-
end
|
120
|
-
|
121
|
-
run App
|
122
|
-
```
|
123
9
|
|
124
10
|
## Starting
|
125
11
|
|
data/bin/thick
CHANGED
@@ -38,10 +38,6 @@ OptionParser.new do |opts|
|
|
38
38
|
options[:environment] = e
|
39
39
|
end
|
40
40
|
|
41
|
-
opts.on('-C', '--controller', 'starts controller for remote monitoring and management') do |e|
|
42
|
-
options[:controller] = e
|
43
|
-
end
|
44
|
-
|
45
41
|
end.parse!
|
46
42
|
|
47
|
-
Thick.create(options)
|
43
|
+
Thick::Server.create(options)
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/rack/handler/thick.rb
CHANGED
@@ -6,28 +6,13 @@ module Rack
|
|
6
6
|
class Thick
|
7
7
|
|
8
8
|
def self.run(app, options={})
|
9
|
-
|
10
|
-
|
11
|
-
env.address = options[:Host]
|
12
|
-
env.port = options[:Port]
|
13
|
-
|
14
|
-
env.application = ::Thick::Loader.new({:application => app, :environment => options[:environment]})
|
15
|
-
|
16
|
-
server = ::Thick::Java::Server.new(env)
|
17
|
-
|
18
|
-
Kernel.trap(:INT) { server.stop }
|
19
|
-
|
20
|
-
server.start
|
21
|
-
|
9
|
+
options[:application] = app
|
10
|
+
server = ::Thick::Server.create(options)
|
22
11
|
end
|
23
12
|
|
24
13
|
end
|
25
14
|
|
26
15
|
def self.valid_options
|
27
|
-
{
|
28
|
-
"Host=HOST" => "Hostname to listen on (default: localhost)",
|
29
|
-
"Port=PORT" => "Port to listen on (default: 8080)"
|
30
|
-
}
|
31
16
|
end
|
32
17
|
|
33
18
|
register 'thick', 'Rack::Handler::Thick'
|
data/lib/thick.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
require 'rack'
|
2
|
-
|
3
2
|
require 'java'
|
4
3
|
|
5
|
-
|
6
|
-
|
4
|
+
$: << File.expand_path('..', __FILE__)
|
5
|
+
|
6
|
+
Dir[File.expand_path('../jar/*', __FILE__)].each { |path| require(path) }
|
7
7
|
|
8
|
-
require 'thick/java'
|
9
8
|
require 'thick/version'
|
10
|
-
require 'thick/
|
11
|
-
|
12
|
-
require 'thick
|
13
|
-
require 'thick/websocket'
|
9
|
+
require 'thick/server'
|
10
|
+
|
11
|
+
require 'rack/handler/thick'
|
data/lib/thick/server.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
|
3
|
+
module Thick
|
4
|
+
|
5
|
+
class RackAdapter < Java::CzWildwebRuby.RackAdapter
|
6
|
+
|
7
|
+
end
|
8
|
+
|
9
|
+
class Server
|
10
|
+
|
11
|
+
def self.create(options = {})
|
12
|
+
options = {
|
13
|
+
:address => '0.0.0.0',
|
14
|
+
:port => 9292,
|
15
|
+
:environment => 'development',
|
16
|
+
:directory => Dir.getwd,
|
17
|
+
:file => 'config.ru'
|
18
|
+
}.merge(options)
|
19
|
+
|
20
|
+
Thick::Server.new(options)
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize(options = {})
|
24
|
+
@options = options
|
25
|
+
ENV['RACK_ENV'] ||= ENV['RAILS_ENV'] ||= @options[:environment]
|
26
|
+
if @options[:application]
|
27
|
+
@application = @options[:application]
|
28
|
+
else
|
29
|
+
@application ||= Rack::Builder.parse_file(File.expand_path(@options[:file], @options[:directory]))[0]
|
30
|
+
end
|
31
|
+
|
32
|
+
@application = Rack::Lint.new(@application)
|
33
|
+
|
34
|
+
@adapter = RackAdapter.new(@options[:address], @options[:port], '', false, JRuby.runtime, self)
|
35
|
+
@server = Java::CzWildwebServer::HttpServerImpl.new
|
36
|
+
@server.register('/', @adapter)
|
37
|
+
@server.register('/*', @adapter)
|
38
|
+
@server.start(@options[:address], @options[:port])
|
39
|
+
end
|
40
|
+
|
41
|
+
def call(env)
|
42
|
+
hash = {}
|
43
|
+
env.each_pair { |k,v| hash[k] = v }
|
44
|
+
hash['rack.version'] = [1,3]
|
45
|
+
hash['rack.input'] = StringIO.new(hash['rack.input'].force_encoding("ascii-8bit"))
|
46
|
+
hash['rack.errors'] = $stderr
|
47
|
+
puts hash.inspect
|
48
|
+
status, headers, content = @application.call(hash)
|
49
|
+
env['wildweb.response'].status(status)
|
50
|
+
headers.each_pair { |k,v| env['wildweb.response'].header(k.to_s, v.to_s) }
|
51
|
+
content.each { |data| env['wildweb.response'].write(data.to_s) }
|
52
|
+
env['wildweb.response'].close
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
data/lib/thick/version.rb
CHANGED
metadata
CHANGED
@@ -1,57 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thick
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Marek Jelen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: rack
|
15
|
-
version_requirements: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - '='
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 1.5.2
|
20
14
|
requirement: !ruby/object:Gem::Requirement
|
21
15
|
requirements:
|
22
|
-
- -
|
16
|
+
- - "~>"
|
23
17
|
- !ruby/object:Gem::Version
|
24
|
-
version: 1.
|
18
|
+
version: '1.6'
|
19
|
+
name: rack
|
25
20
|
prerelease: false
|
26
21
|
type: :runtime
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rspec
|
29
22
|
version_requirements: !ruby/object:Gem::Requirement
|
30
23
|
requirements:
|
31
|
-
- -
|
24
|
+
- - "~>"
|
32
25
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
34
28
|
requirement: !ruby/object:Gem::Requirement
|
35
29
|
requirements:
|
36
|
-
- -
|
30
|
+
- - "~>"
|
37
31
|
- !ruby/object:Gem::Version
|
38
32
|
version: '2'
|
33
|
+
name: rspec
|
39
34
|
prerelease: false
|
40
35
|
type: :development
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rake
|
43
36
|
version_requirements: !ruby/object:Gem::Requirement
|
44
37
|
requirements:
|
45
|
-
- -
|
38
|
+
- - "~>"
|
46
39
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
40
|
+
version: '2'
|
41
|
+
- !ruby/object:Gem::Dependency
|
48
42
|
requirement: !ruby/object:Gem::Requirement
|
49
43
|
requirements:
|
50
|
-
- -
|
44
|
+
- - "~>"
|
51
45
|
- !ruby/object:Gem::Version
|
52
46
|
version: '10'
|
47
|
+
name: rake
|
53
48
|
prerelease: false
|
54
49
|
type: :development
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10'
|
55
55
|
description: Very lightweight web server for JRuby based on Netty library.
|
56
56
|
email:
|
57
57
|
- marek@jelen.biz
|
@@ -60,23 +60,28 @@ executables:
|
|
60
60
|
extensions: []
|
61
61
|
extra_rdoc_files: []
|
62
62
|
files:
|
63
|
+
- LICENSE
|
64
|
+
- README.md
|
63
65
|
- bin/thick
|
64
|
-
- lib/
|
66
|
+
- lib/jar/freemarker-2.3.23.jar
|
67
|
+
- lib/jar/javassist-3.20.0-GA.jar
|
68
|
+
- lib/jar/netty-buffer-4.1.0.CR3.jar
|
69
|
+
- lib/jar/netty-codec-4.1.0.CR3.jar
|
70
|
+
- lib/jar/netty-codec-http-4.1.0.CR3.jar
|
71
|
+
- lib/jar/netty-common-4.1.0.CR3.jar
|
72
|
+
- lib/jar/netty-handler-4.1.0.CR3.jar
|
73
|
+
- lib/jar/netty-resolver-4.1.0.CR3.jar
|
74
|
+
- lib/jar/netty-transport-4.1.0.CR3.jar
|
75
|
+
- lib/jar/slf4j-api-1.7.13.jar
|
76
|
+
- lib/jar/slf4j-simple-1.7.13.jar
|
77
|
+
- lib/jar/wildweb-0.0.1.jar
|
65
78
|
- lib/rack/handler/thick.rb
|
66
|
-
- lib/thick
|
67
|
-
- lib/thick/
|
68
|
-
- lib/thick/websocket.rb
|
69
|
-
- lib/thick/loader.rb
|
70
|
-
- lib/thick/buffer.rb
|
79
|
+
- lib/thick.rb
|
80
|
+
- lib/thick/server.rb
|
71
81
|
- lib/thick/version.rb
|
72
|
-
|
73
|
-
|
74
|
-
-
|
75
|
-
- README.md
|
76
|
-
- ROADMAP.md
|
77
|
-
- CHANGELOG.md
|
78
|
-
homepage: http://github.com/marekjelen/thick
|
79
|
-
licenses: []
|
82
|
+
homepage: http://github.com/marekjelen/wildweb
|
83
|
+
licenses:
|
84
|
+
- MIT
|
80
85
|
metadata: {}
|
81
86
|
post_install_message:
|
82
87
|
rdoc_options: []
|
@@ -84,17 +89,17 @@ require_paths:
|
|
84
89
|
- lib
|
85
90
|
required_ruby_version: !ruby/object:Gem::Requirement
|
86
91
|
requirements:
|
87
|
-
- -
|
92
|
+
- - ">="
|
88
93
|
- !ruby/object:Gem::Version
|
89
94
|
version: '0'
|
90
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
96
|
requirements:
|
92
|
-
- -
|
97
|
+
- - ">="
|
93
98
|
- !ruby/object:Gem::Version
|
94
99
|
version: '0'
|
95
100
|
requirements: []
|
96
101
|
rubyforge_project:
|
97
|
-
rubygems_version: 2.
|
102
|
+
rubygems_version: 2.4.8
|
98
103
|
signing_key:
|
99
104
|
specification_version: 4
|
100
105
|
summary: Very lightweight web server for JRuby
|
data/CHANGELOG.md
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
## 0.0.8 (XY.01.2013)
|
2
|
-
|
3
|
-
* Rack handler
|
4
|
-
* update versions in CHANGELOG
|
5
|
-
|
6
|
-
## 0.0.7 (20.12.2012)
|
7
|
-
|
8
|
-
* update Netty to 4th version
|
9
|
-
* support for WebSockets
|
10
|
-
* new buffer for uploaded data
|
11
|
-
* simpler interface for async responses
|
12
|
-
|
13
|
-
## 0.0.6 (01.12.2012)
|
14
|
-
|
15
|
-
* some weird version
|
16
|
-
|
17
|
-
## 0.0.5 (30.11.2012)
|
18
|
-
|
19
|
-
* update Netty to 3.5.11
|
20
|
-
* get rid of Loader experiment
|
21
|
-
* update Rake gem (development)
|
22
|
-
|
23
|
-
## 0.0.4 (29.3.2012)
|
24
|
-
|
25
|
-
* make gem Java specific
|
26
|
-
* copy-less request body container
|
27
|
-
* async responses
|
28
|
-
|
29
|
-
## 0.0.3 (26.3.2012)
|
30
|
-
|
31
|
-
Update Netty to 3.4.0.Alpha2
|
32
|
-
|
33
|
-
## 0.0.2 (26.3.2012)
|
34
|
-
|
35
|
-
First public version
|
36
|
-
|
37
|
-
## 0.0.1 (26.3.2012)
|
38
|
-
|
39
|
-
Claim the gem ;)
|
data/ROADMAP.md
DELETED
Binary file
|
data/lib/jars/thick-0.0.1.jar
DELETED
Binary file
|
data/lib/thick/buffer.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
module Thick
|
2
|
-
|
3
|
-
class Buffer
|
4
|
-
|
5
|
-
java_import "io.netty.buffer.ByteBuf"
|
6
|
-
java_import "io.netty.buffer.Unpooled"
|
7
|
-
|
8
|
-
def initialize(buffer=nil)
|
9
|
-
@buffer = buffer || Unpooled.buffer
|
10
|
-
end
|
11
|
-
|
12
|
-
def write(buffer)
|
13
|
-
raise ArgumentError.new('ByteBuf is expected') unless buffer.kind_of?(ByteBuf)
|
14
|
-
@buffer.writeBytes(buffer)
|
15
|
-
end
|
16
|
-
|
17
|
-
def rewind
|
18
|
-
@buffer.reset_reader_index
|
19
|
-
end
|
20
|
-
|
21
|
-
def read(n=nil, buffer=nil)
|
22
|
-
return n ? nil : '' unless @buffer.readable
|
23
|
-
buffer ||= ""
|
24
|
-
n ||= @buffer.readable_bytes
|
25
|
-
buffer << java.lang.String.new(@buffer.read_bytes(n).array).to_s
|
26
|
-
end
|
27
|
-
|
28
|
-
def each(&block)
|
29
|
-
while (data = gets)
|
30
|
-
block.call( data || "")
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def gets
|
35
|
-
return nil unless @buffer.readable
|
36
|
-
nl = @buffer.bytes_before(10)
|
37
|
-
if nl == -1
|
38
|
-
nl = @buffer.readable_bytes
|
39
|
-
else
|
40
|
-
nl += 1
|
41
|
-
end
|
42
|
-
read(nl)
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
data/lib/thick/java.rb
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
module Thick
|
2
|
-
module Java
|
3
|
-
|
4
|
-
java_import 'cz.marekjelen.thick.Server'
|
5
|
-
java_import 'cz.marekjelen.thick.ServerEnvironment'
|
6
|
-
java_import 'cz.marekjelen.thick.ServerRubyInterface'
|
7
|
-
java_import 'io.netty.buffer.Unpooled'
|
8
|
-
java_import 'io.netty.buffer.ByteBufInputStream'
|
9
|
-
end
|
10
|
-
end
|
data/lib/thick/loader.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
module Thick
|
2
|
-
|
3
|
-
class Loader
|
4
|
-
|
5
|
-
include Thick::Java::ServerRubyInterface
|
6
|
-
|
7
|
-
def initialize(options)
|
8
|
-
@options = options
|
9
|
-
ENV['RACK_ENV'] ||= ENV['RAILS_ENV'] ||= @options[:environment]
|
10
|
-
@application = @options[:application] ||= Rack::Builder.parse_file(File.expand_path(@options[:file], @options[:directory]))[0]
|
11
|
-
end
|
12
|
-
|
13
|
-
def call(env)
|
14
|
-
env['rack.input'] = Buffer.new(env['rack.input'])
|
15
|
-
env['rack.errors'] = env['rack.errors'].to_io
|
16
|
-
|
17
|
-
status, headers, body = @application.call(env)
|
18
|
-
|
19
|
-
return if env['thick.response_bypass']
|
20
|
-
|
21
|
-
response = env['thick.response']
|
22
|
-
|
23
|
-
response.setStatus(status)
|
24
|
-
|
25
|
-
hijack = headers.delete('rack.hijack')
|
26
|
-
|
27
|
-
headers.each_pair do |name, value|
|
28
|
-
response.setHeader(name, value)
|
29
|
-
end
|
30
|
-
|
31
|
-
if body.respond_to?(:to_path)
|
32
|
-
response.send_file(body.to_path)
|
33
|
-
else
|
34
|
-
body.each { |chunk| response.writeContent(chunk.to_s) }
|
35
|
-
response.send
|
36
|
-
# Rack Hijack async response
|
37
|
-
hijack.call(env['rack.hijakck_io']) if hijack
|
38
|
-
# Thick native async response
|
39
|
-
env['thick.async'].call(response) if response.chunked?
|
40
|
-
end
|
41
|
-
rescue => e
|
42
|
-
puts e.message
|
43
|
-
puts e.backtrace
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
data/lib/thick/thick.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
module Thick
|
2
|
-
|
3
|
-
def self.create(options)
|
4
|
-
|
5
|
-
options = {
|
6
|
-
:address => '0.0.0.0',
|
7
|
-
:port => 9292,
|
8
|
-
:environment => 'development',
|
9
|
-
:directory => Dir.getwd,
|
10
|
-
:file => 'config.ru'
|
11
|
-
}.merge(options)
|
12
|
-
|
13
|
-
puts "* Starting Thick: #{options.inspect}"
|
14
|
-
|
15
|
-
env = Thick::Java::ServerEnvironment.new
|
16
|
-
env.address = options[:address]
|
17
|
-
env.port = options[:port]
|
18
|
-
|
19
|
-
env.application = Loader.new(options)
|
20
|
-
|
21
|
-
Thick::Java::Server.new(env).start
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
data/lib/thick/websocket.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
module Thick
|
2
|
-
|
3
|
-
java_import 'cz.marekjelen.thick.WebSocketHandler'
|
4
|
-
|
5
|
-
class WebSocket < WebSocketHandler
|
6
|
-
|
7
|
-
def on_open
|
8
|
-
raise NotImplementedError.new("You should implement '#on_open' method.")
|
9
|
-
end
|
10
|
-
|
11
|
-
def on_data(data)
|
12
|
-
raise NotImplementedError.new("You should implement '#on_data(data)' method.")
|
13
|
-
end
|
14
|
-
|
15
|
-
def on_close
|
16
|
-
raise NotImplementedError.new("You should implement '#on_close' method.")
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|