sloth-reel 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,32 @@
1
+ require 'sloth/reel'
2
+
3
+ class WebApp < Sinatra::Base
4
+
5
+ get "/" do
6
+ '<html><body>
7
+ <h1> GET </h1>
8
+ <a href="/"> (GET) </a>
9
+ <form method="POST"><input type="submit" value="(POST)" /></form>
10
+ </body></html>'
11
+ end
12
+
13
+ post "/" do
14
+ '<html><body>
15
+ <h1> POST </h1>
16
+ <a href="/"> (GET) </a>
17
+ <form method="POST"><input type="submit" value="(POST)" /></form>
18
+ </body></html>'
19
+ end
20
+
21
+ end
22
+
23
+ ENV['RACK_ENV'] ||= 'production'
24
+ options = {Host: "0.0.0.0", Port: 3000}
25
+ Reel::Rack::Server.new( WebApp.new, options )
26
+
27
+ Signal.trap(:INT) do
28
+ exit
29
+ end
30
+
31
+ sleep
32
+
@@ -0,0 +1,36 @@
1
+ require 'sloth/reel'
2
+
3
+ class WebApp < Sinatra::Base
4
+
5
+ def logger
6
+ Reel::Logger.logger
7
+ end
8
+
9
+ get "/" do
10
+ logger.info "get /"
11
+ '<html><body>
12
+ <h1> GET </h1><a href="/"> (GET) </a>
13
+ <form method="POST"><input type="submit" value="(POST)" /></form>
14
+ </body></html>'
15
+ end
16
+
17
+ post "/" do
18
+ logger.info "post /"
19
+ '<html><body>
20
+ <h1> POST </h1><a href="/"> (GET) </a>
21
+ <form method="POST"><input type="submit" value="(POST)" /></form>
22
+ </body></html>'
23
+ end
24
+
25
+ end
26
+
27
+ ENV['RACK_ENV'] ||= 'production'
28
+ options = {Host: "0.0.0.0", Port: 3000}
29
+ Reel::Rack::Server.new( WebApp.new, options )
30
+
31
+ Signal.trap(:INT) do
32
+ exit
33
+ end
34
+
35
+ sleep
36
+
@@ -0,0 +1,45 @@
1
+ require 'sloth/reel'
2
+
3
+ class WebApp < Sinatra::Base
4
+
5
+ def logger
6
+ Reel::Logger.logger
7
+ end
8
+
9
+ get "/" do
10
+ '<html><body>
11
+ <h1> GET </h1><a href="/"> (GET) </a>
12
+ <form method="POST"><input type="submit" value="(POST)" /></form>
13
+ </body></html>'
14
+ end
15
+
16
+ post "/" do
17
+ sec = 5
18
+ tm1 = Time.now
19
+ logger.info format( "tm1: %s", tm1.to_s )
20
+ ::Kernel.sleep sec
21
+ tm2 = Time.now
22
+ logger.info format( "tm2: %s", tm2.to_s )
23
+ logger.info format( "%.3f", tm2 - tm1 )
24
+
25
+ <<~HTML
26
+ <html><body>
27
+ <h1> POST </h1><a href="/"> (GET) </a>
28
+ <form method="POST"><input type="submit" value="(POST)" /></form>
29
+ <h1> Delay, wait sec: #{sec}</h1>
30
+ <p> #{tm1}: sleep <br/> #{tm2}: wakeup </p>
31
+ </body></html>
32
+ HTML
33
+ end
34
+ end
35
+
36
+ ENV['RACK_ENV'] ||= 'production'
37
+ options = {Host: "0.0.0.0", Port: 3000}
38
+ Reel::Rack::Server.new( WebApp.new, options )
39
+
40
+ Signal.trap(:INT) do
41
+ exit
42
+ end
43
+
44
+ sleep
45
+
@@ -0,0 +1,44 @@
1
+ require 'sloth/reel'
2
+
3
+ class WebApp < Sinatra::Base
4
+
5
+ configure do
6
+ enable :logging
7
+ file = ::STDOUT
8
+ file.sync = true
9
+ use Rack::CommonLogger, file
10
+ end
11
+
12
+ def logger
13
+ env['app.logger'] || env['rack.logger']
14
+ end
15
+
16
+ get "/" do
17
+ logger.info "get /"
18
+ '<html><body>
19
+ <h1> GET </h1>
20
+ <a href="/"> (GET) </a>
21
+ <form method="POST"><input type="submit" value="(POST)" /></form>
22
+ </body></html>'
23
+ end
24
+
25
+ post "/" do
26
+ logger.info "post /"
27
+ '<html><body>
28
+ <h1> POST </h1>
29
+ <a href="/"> (GET) </a>
30
+ <form method="POST"><input type="submit" value="(POST)" /></form>
31
+ </body></html>'
32
+ end
33
+ end
34
+
35
+ ENV['RACK_ENV'] ||= 'production'
36
+ options = {Host: "0.0.0.0", Port: 3000}
37
+ Reel::Rack::Server.new( WebApp.new, options )
38
+
39
+ Signal.trap(:INT) do
40
+ exit
41
+ end
42
+
43
+ sleep
44
+
@@ -0,0 +1,68 @@
1
+ require 'sloth/reel'
2
+
3
+ class WebApp < Sinatra::Base
4
+
5
+ get '/chat' do
6
+ if request.websocket?
7
+ ws = request.websocket
8
+ ws << Time.now.to_s
9
+ ws.on_message do |mesg, sender, conns|
10
+ conns.each do |conn|
11
+ conn << mesg
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ get '/' do
18
+ <<~HTML
19
+ <!doctype html>
20
+ <html>
21
+ <body>
22
+ <h1>WebSocket Chat</h1>
23
+ <form id="form"> <input type="text" id="input" value=""></input> </form>
24
+ <div id="msgs"></div>
25
+ </body>
26
+
27
+ <script type="text/javascript">
28
+ window.onload = function(){
29
+ (function(){
30
+ var show = function(el){
31
+ return function(str){ el.innerHTML = str + '<br />' + el.innerHTML }
32
+ }(document.getElementById('msgs'))
33
+
34
+ ws = new WebSocket('ws://' + window.location.host + '/chat')
35
+ ws.onopen = function() { show('[opened]') }
36
+ ws.onclose = function() { show('[closed]') }
37
+ ws.onmessage = function(mesg) { show(mesg.data) }
38
+
39
+ var sender = function(fm) {
40
+ var input = document.getElementById('input')
41
+ input.onclick = function(){
42
+ input.value = ""
43
+ }
44
+ fm.onsubmit = function(){
45
+ ws.send( input.value )
46
+ input.value = ""
47
+ return false
48
+ }
49
+ }(document.getElementById('form'))
50
+ })()
51
+ }
52
+ </script>
53
+ </html>
54
+ HTML
55
+ end
56
+
57
+ end
58
+
59
+ ENV['RACK_ENV'] ||= 'production'
60
+ options = {Host: "0.0.0.0", Port: 3000}
61
+ Reel::Rack::Server.new( WebApp.new, options )
62
+
63
+ Signal.trap(:INT) do
64
+ exit
65
+ end
66
+
67
+ sleep
68
+
@@ -0,0 +1,55 @@
1
+ require 'sloth/reel'
2
+
3
+ class WebApp < Sinatra::Base
4
+
5
+ get "/timeinfo" do
6
+ if request.websocket?
7
+ Thread.start(request.websocket) do |ws|
8
+ begin
9
+ while not ws.closed?
10
+ mesg = Time.now.inspect
11
+ ws.write( mesg )
12
+ sleep 1
13
+ end
14
+ rescue Reel::SocketError
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ get '/' do
21
+ <<~HTML
22
+ <!doctype html>
23
+ <html lang="en">
24
+ <head>
25
+ <meta charset="utf-8">
26
+ <title>Reel WebSockets Time Server Example</title>
27
+ </head>
28
+ <script>
29
+ var ws = new WebSocket('ws://' + window.location.host + '/timeinfo');
30
+ ws.onmessage = function(mesg){
31
+ document.getElementById('current-time').innerHTML = mesg.data;
32
+ }
33
+ </script>
34
+ <body>
35
+ <div id="content">
36
+ <h1>Reel WebSockets Time Server Example</h1>
37
+ <h2>The time is now: <span id="current-time">...</span></h2>
38
+ </div>
39
+ </body>
40
+ </html>
41
+ HTML
42
+ end
43
+
44
+ end
45
+
46
+ ENV['RACK_ENV'] ||= 'production'
47
+ options = {Host: "0.0.0.0", Port: 3000}
48
+ Reel::Rack::Server.new( WebApp.new, options )
49
+
50
+ Signal.trap(:INT) do
51
+ exit
52
+ end
53
+
54
+ sleep
55
+
@@ -0,0 +1,63 @@
1
+ require 'sloth/reel'
2
+
3
+ WebSockets = []
4
+
5
+ Thread.start do
6
+ while true
7
+ sleep 1
8
+ mesg = Time.now.inspect
9
+
10
+ WebSockets.dup.each do |ws|
11
+ begin
12
+ ws.write( mesg )
13
+ rescue Reel::SocketError
14
+ WebSockets.delete( ws )
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ class WebApp < Sinatra::Base
21
+
22
+ get "/timeinfo" do
23
+ if request.websocket?
24
+ WebSockets << request.websocket
25
+ end
26
+ end
27
+
28
+ get '/' do
29
+ <<~HTML
30
+ <!doctype html>
31
+ <html lang="en">
32
+ <head>
33
+ <meta charset="utf-8">
34
+ <title>Reel WebSockets Time Server Example</title>
35
+ </head>
36
+ <script>
37
+ var ws = new WebSocket('ws://' + window.location.host + '/timeinfo');
38
+ ws.onmessage = function(mesg){
39
+ document.getElementById('current-time').innerHTML = mesg.data;
40
+ }
41
+ </script>
42
+ <body>
43
+ <div id="content">
44
+ <h1>Reel WebSockets Time Server Example</h1>
45
+ <h2>The time is now: <span id="current-time">...</span></h2>
46
+ </div>
47
+ </body>
48
+ </html>
49
+ HTML
50
+ end
51
+
52
+ end
53
+
54
+ ENV['RACK_ENV'] ||= 'production'
55
+ options = {Host: "0.0.0.0", Port: 3000}
56
+ Reel::Rack::Server.new( WebApp.new, options )
57
+
58
+ Signal.trap(:INT) do
59
+ exit
60
+ end
61
+
62
+ sleep
63
+
@@ -0,0 +1,33 @@
1
+ require_relative 'lib/sloth/reel/version'
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "sloth-reel"
5
+ spec.version = Sloth::Reel::VERSION
6
+ spec.authors = ["arimay"]
7
+ spec.email = ["arima.yasuhiro@gmail.com"]
8
+
9
+ spec.summary = %q{ Httpd and WebSocket sloth framework. }
10
+ spec.description = %q{ Httpd and WebSocket sloth framwwork based on Celluloid, Reel, Rack and Sinatra. }
11
+ spec.homepage = "https://github.com/arimay/sloth-reel"
12
+
13
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
14
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
15
+ end
16
+ spec.bindir = "exe"
17
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_runtime_dependency "celluloid", "0.18.0.pre2"
21
+ spec.add_runtime_dependency "celluloid-io", "0.17.3"
22
+ spec.add_runtime_dependency "celluloid-fsm", "0.20.5"
23
+ spec.add_runtime_dependency "reel", "0.6.1"
24
+ spec.add_runtime_dependency "reel-rack", "0.2.3"
25
+
26
+ spec.add_runtime_dependency "rack"
27
+ spec.add_runtime_dependency "sinatra", "~> 2.0.8"
28
+ spec.add_runtime_dependency "sinatra-contrib"
29
+ spec.add_runtime_dependency "websocket"
30
+
31
+ spec.add_development_dependency "rake", "~> 12.0"
32
+ spec.add_development_dependency "rspec", "~> 3.0"
33
+ end
metadata ADDED
@@ -0,0 +1,224 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sloth-reel
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - arimay
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-11-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: celluloid
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.18.0.pre2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.18.0.pre2
27
+ - !ruby/object:Gem::Dependency
28
+ name: celluloid-io
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.17.3
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.17.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: celluloid-fsm
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 0.20.5
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.20.5
55
+ - !ruby/object:Gem::Dependency
56
+ name: reel
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.6.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '='
67
+ - !ruby/object:Gem::Version
68
+ version: 0.6.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: reel-rack
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 0.2.3
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 0.2.3
83
+ - !ruby/object:Gem::Dependency
84
+ name: rack
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: sinatra
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 2.0.8
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 2.0.8
111
+ - !ruby/object:Gem::Dependency
112
+ name: sinatra-contrib
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: websocket
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rake
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '12.0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '12.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rspec
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '3.0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '3.0'
167
+ description: " Httpd and WebSocket sloth framwwork based on Celluloid, Reel, Rack
168
+ and Sinatra. "
169
+ email:
170
+ - arima.yasuhiro@gmail.com
171
+ executables: []
172
+ extensions: []
173
+ extra_rdoc_files: []
174
+ files:
175
+ - ".gitignore"
176
+ - ".rspec"
177
+ - ".travis.yml"
178
+ - Gemfile
179
+ - README.adoc
180
+ - README.ja.adoc
181
+ - Rakefile
182
+ - bin/console
183
+ - bin/setup
184
+ - lib/reel/rack/server.rb
185
+ - lib/reel/server.rb
186
+ - lib/reel/websocket.rb
187
+ - lib/sloth/reel.rb
188
+ - lib/sloth/reel/sinatra.rb
189
+ - lib/sloth/reel/version.rb
190
+ - sample/rack_server_hello_1.rb
191
+ - sample/server_http_hello_1.rb
192
+ - sample/server_http_ws_chat_1.rb
193
+ - sample/server_http_ws_time_1.rb
194
+ - sample/server_sinatra_hello_1.rb
195
+ - sample/server_sinatra_hello_2.rb
196
+ - sample/server_sinatra_hello_3.rb
197
+ - sample/server_sinatra_hello_4.rb
198
+ - sample/server_sinatra_ws_chat_1.rb
199
+ - sample/server_sinatra_ws_time_1.rb
200
+ - sample/server_sinatra_ws_time_2.rb
201
+ - sloth-reel.gemspec
202
+ homepage: https://github.com/arimay/sloth-reel
203
+ licenses: []
204
+ metadata: {}
205
+ post_install_message:
206
+ rdoc_options: []
207
+ require_paths:
208
+ - lib
209
+ required_ruby_version: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - ">="
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ required_rubygems_version: !ruby/object:Gem::Requirement
215
+ requirements:
216
+ - - ">="
217
+ - !ruby/object:Gem::Version
218
+ version: '0'
219
+ requirements: []
220
+ rubygems_version: 3.1.4
221
+ signing_key:
222
+ specification_version: 4
223
+ summary: Httpd and WebSocket sloth framework.
224
+ test_files: []