opal-up 0.0.3 → 0.0.4
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/README.md +66 -51
- data/ext/up_ext/extconf.rb +1 -1
- data/ext/up_ext/libuwebsockets.cpp +1262 -1292
- data/ext/up_ext/libuwebsockets.h +337 -201
- data/ext/up_ext/up_ext.c +816 -164
- data/lib/up/bun/rack_env.rb +1 -13
- data/lib/up/bun/server.rb +93 -19
- data/lib/up/cli.rb +3 -0
- data/lib/up/client.rb +68 -0
- data/lib/up/ruby/cluster.rb +39 -0
- data/lib/up/ruby/rack_cluster.rb +1 -1
- data/lib/up/ruby/rack_server.rb +0 -1
- data/lib/up/u_web_socket/cluster.rb +18 -3
- data/lib/up/u_web_socket/server.rb +108 -15
- data/lib/up/version.rb +1 -1
- metadata +4 -15
- data/bin/up_node +0 -12
- data/bin/up_node_cluster +0 -12
- data/lib/up/node/cluster.rb +0 -39
- data/lib/up/node/cluster_cli.rb +0 -15
- data/lib/up/node/rack_cluster.rb +0 -25
- data/lib/up/node/rack_env.rb +0 -106
- data/lib/up/node/rack_server.rb +0 -25
- data/lib/up/node/server.rb +0 -84
- data/lib/up/node/server_cli.rb +0 -15
- data/lib/up/ruby/rack_env.rb +0 -97
- data/lib/up/u_web_socket/rack_env.rb +0 -101
data/lib/up/node/rack_cluster.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'up/node/cluster'
|
2
|
-
|
3
|
-
module Up
|
4
|
-
module Node
|
5
|
-
module RackCluster
|
6
|
-
def self.run(app, options = {})
|
7
|
-
raise "already running" if @server
|
8
|
-
@server = Up::Node::Cluster.new(app: app, **options).listen
|
9
|
-
true
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.shutdown
|
13
|
-
@server&.stop
|
14
|
-
@server = nil
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
ENV['RACK_HANDLER'] ||= 'up'
|
21
|
-
|
22
|
-
begin
|
23
|
-
::Rackup::Handler.register('up', Up::Node::RackCluster) if defined?(::Rackup::Handler)
|
24
|
-
rescue StandardError
|
25
|
-
end
|
data/lib/up/node/rack_env.rb
DELETED
@@ -1,106 +0,0 @@
|
|
1
|
-
# backtick_javascript: true
|
2
|
-
|
3
|
-
require 'logger'
|
4
|
-
require 'up/version'
|
5
|
-
|
6
|
-
module Up
|
7
|
-
module Node
|
8
|
-
class RackEnv < ::Hash
|
9
|
-
RACK_VARS = %w[rack.errors rack.hijack rack.hijack? rack.input rack.logger
|
10
|
-
rack.multipart.buffer_size rack.multipart.tempfile_factory
|
11
|
-
rack.response_finished
|
12
|
-
rack.session rack.upgrade rack.upgrade? rack.url_scheme
|
13
|
-
HTTP_ACCEPT HTTP_ACCEPT_ENCODING HTTP_ACCEPT_LANGUAGE
|
14
|
-
HTTP_CONNECTION HTTP_HOST HTTP_USER_AGENT HTTP_VERSION PATH_INFO QUERY_STRING REQUEST_METHOD
|
15
|
-
SCRIPT_NAME SERVER_NAME SERVER_PROTOCOL SERVER_SOFTWARE]
|
16
|
-
def initialize(req, config)
|
17
|
-
@req = req
|
18
|
-
@config = config
|
19
|
-
end
|
20
|
-
|
21
|
-
def [](key)
|
22
|
-
return super(key) if key?(key)
|
23
|
-
self[key] = case key
|
24
|
-
when 'rack.errors'
|
25
|
-
STDERR
|
26
|
-
when 'rack.hijack'
|
27
|
-
nil
|
28
|
-
when 'rack.hijack?'
|
29
|
-
false
|
30
|
-
when 'rack.input'
|
31
|
-
::IO.new
|
32
|
-
when 'rack.logger'
|
33
|
-
::Logger.new(self['rack.errors'])
|
34
|
-
when 'rack.multipart.buffer_size'
|
35
|
-
4096
|
36
|
-
when 'rack.multipart.tempfile_factory'
|
37
|
-
proc { |_filename, _content_type| File.new }
|
38
|
-
when 'rack.response_finished'
|
39
|
-
[]
|
40
|
-
when 'rack.session'
|
41
|
-
{}
|
42
|
-
when 'rack.upgrade'
|
43
|
-
nil
|
44
|
-
when 'rack.upgrade?'
|
45
|
-
nil
|
46
|
-
when 'rack.url_scheme'
|
47
|
-
@config[:scheme]
|
48
|
-
when 'HTTP_VERSION'
|
49
|
-
`#@req.httpVersion`
|
50
|
-
when 'PATH_INFO'
|
51
|
-
`#@req.url`
|
52
|
-
when 'QUERY_STRING'
|
53
|
-
nil
|
54
|
-
when 'RACK_ERRORS'
|
55
|
-
self['rack.errors']
|
56
|
-
when 'RACK_LOGGER'
|
57
|
-
self['rack.logger']
|
58
|
-
when 'REQUEST_METHOD'
|
59
|
-
`#@req.method`
|
60
|
-
when 'SCRIPT_NAME'
|
61
|
-
""
|
62
|
-
when 'SERVER_NAME'
|
63
|
-
@config[:host]
|
64
|
-
when 'SERVER_PORT'
|
65
|
-
@config[:port].to_s
|
66
|
-
when 'SERVER_PROTOCOL'
|
67
|
-
""
|
68
|
-
when 'SERVER_SOFTWARE'
|
69
|
-
"#{@config[:handler]}/#{Up::VERSION} #{@config[:engine]}"
|
70
|
-
else
|
71
|
-
if key.start_with?('HTTP_')
|
72
|
-
key = key[5..].gsub(/_/, '-')
|
73
|
-
`#@req.headers[key.toLowerCase()]`
|
74
|
-
else
|
75
|
-
nil
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def req_headers
|
81
|
-
h = {}
|
82
|
-
%x{
|
83
|
-
var hdr, hds = #@req.headers;
|
84
|
-
for (hdr in hds) { h.set(hdr, hdrs[hdr]); }
|
85
|
-
}
|
86
|
-
h
|
87
|
-
end
|
88
|
-
|
89
|
-
def each
|
90
|
-
unless @got_them_all
|
91
|
-
RACK_VARS.each { |k| self[k] unless self.key?(k) }
|
92
|
-
@got_them_all = true
|
93
|
-
end
|
94
|
-
super
|
95
|
-
end
|
96
|
-
|
97
|
-
def to_s
|
98
|
-
unless @got_them_all
|
99
|
-
RACK_VARS.each { |k| self[k] unless self.key?(k) }
|
100
|
-
@got_them_all = true
|
101
|
-
end
|
102
|
-
super
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
data/lib/up/node/rack_server.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'up/node/server'
|
2
|
-
|
3
|
-
module Up
|
4
|
-
module Node
|
5
|
-
module RackServer
|
6
|
-
def self.run(app, options = {})
|
7
|
-
raise "already running" if @server
|
8
|
-
@server = Up::Node::Server.new(app: app, **options).listen
|
9
|
-
true
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.shutdown
|
13
|
-
@server&.stop
|
14
|
-
@server = nil
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
ENV['RACK_HANDLER'] ||= 'up'
|
21
|
-
|
22
|
-
begin
|
23
|
-
::Rackup::Handler.register('up', Up::Node::RackServer) if defined?(::Rackup::Handler)
|
24
|
-
rescue StandardError
|
25
|
-
end
|
data/lib/up/node/server.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
# backtick_javascript: true
|
2
|
-
require 'up/cli'
|
3
|
-
require 'up/node/rack_env'
|
4
|
-
|
5
|
-
%x{
|
6
|
-
module.paths.push(process.cwd() + '/node_modules');
|
7
|
-
const http = require('node:http');
|
8
|
-
const https = require('node:https');
|
9
|
-
const fs = require('node:fs');
|
10
|
-
}
|
11
|
-
|
12
|
-
module Up
|
13
|
-
module Node
|
14
|
-
class Server
|
15
|
-
def initialize(app:, host: 'localhost', port: 3000, scheme: 'http', ca_file: nil, cert_file: nil, key_file: nil)
|
16
|
-
@app = app
|
17
|
-
@scheme = scheme || 'http'
|
18
|
-
raise "unsupported scheme #{@scheme}" unless %w[http https].include?(@scheme)
|
19
|
-
@host = host || 'localhost'
|
20
|
-
@port = port&.to_i || 3000
|
21
|
-
@config = { handler: self.class.name, engine: "node/#{`process.version`}", port: port, scheme: scheme, host: host }.freeze
|
22
|
-
@ca_file = ca_file
|
23
|
-
@cert_file = cert_file
|
24
|
-
@key_file = key_file
|
25
|
-
@server = nil
|
26
|
-
end
|
27
|
-
|
28
|
-
%x{
|
29
|
-
self.handle_headers = function(rack_headers, srv_res) {
|
30
|
-
if (rack_headers.$$is_hash) {
|
31
|
-
var header, k, v;
|
32
|
-
for(header of rack_headers) {
|
33
|
-
k = header[0];
|
34
|
-
if (!k.startsWith('rack.')) {
|
35
|
-
v = header[1];
|
36
|
-
if (v.$$is_array) {
|
37
|
-
v = v.join("\n");
|
38
|
-
}
|
39
|
-
srv_res.setHeader(k, v);
|
40
|
-
}
|
41
|
-
}
|
42
|
-
}
|
43
|
-
}
|
44
|
-
|
45
|
-
self.handle_response = function(parts, srv_res) {
|
46
|
-
if (parts["$respond_to?"]('each')) {
|
47
|
-
#{`parts`.each { |part| `srv_res.write(part)` }}
|
48
|
-
} else if (parts["$respond_to?"]('call')) {
|
49
|
-
srv_res.write(parts.$call());
|
50
|
-
}
|
51
|
-
#{`parts`.close if `parts`.respond_to?(:close)}
|
52
|
-
}
|
53
|
-
}
|
54
|
-
|
55
|
-
def listen
|
56
|
-
raise "already running" if @server
|
57
|
-
%x{
|
58
|
-
const ounr = Opal.Up.Node.RackEnv;
|
59
|
-
const ouns = Opal.Up.Node.Server;
|
60
|
-
function handler(req, res) {
|
61
|
-
const rack_res = #@app.$call(ounr.$new(req, #@config));
|
62
|
-
res.statusCode = rack_res[0];
|
63
|
-
ouns.handle_headers(rack_res[1], res);
|
64
|
-
ouns.handle_response(rack_res[2], res);
|
65
|
-
res.end();
|
66
|
-
}
|
67
|
-
if (#@scheme == 'https') {
|
68
|
-
#@server = https.createServer({ ca: fs.readFileSync(#@ca_file), cert: fs.readFileSync(#@cert_file), key: fs.readFileSync(#@key_file) }, handler);
|
69
|
-
} else {
|
70
|
-
#@server = http.createServer(handler);
|
71
|
-
}
|
72
|
-
#@server.listen(#@port, #@host, () => { console.log(`Server is running on ${#@scheme}://${#@host}:${#@port}`)});
|
73
|
-
}
|
74
|
-
end
|
75
|
-
|
76
|
-
def stop
|
77
|
-
if Up::CLI::stoppable?
|
78
|
-
`#@server.close()`
|
79
|
-
@server = nil
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
data/lib/up/node/server_cli.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'opal/platform'
|
2
|
-
require 'nodejs/file'
|
3
|
-
require 'nodejs/require'
|
4
|
-
require 'opal-parser'
|
5
|
-
require 'rack/builder'
|
6
|
-
require 'up/rack_builder_patch'
|
7
|
-
require 'up/node/rack_server'
|
8
|
-
|
9
|
-
module Up
|
10
|
-
module CLI
|
11
|
-
def self.call
|
12
|
-
Up::Node::RackServer.run(get_app, get_options)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
data/lib/up/ruby/rack_env.rb
DELETED
@@ -1,97 +0,0 @@
|
|
1
|
-
require 'logger'
|
2
|
-
require 'up/version'
|
3
|
-
|
4
|
-
module Up
|
5
|
-
module Ruby
|
6
|
-
class RackEnv < ::Hash
|
7
|
-
RACK_VARS = %w[rack.errors rack.hijack rack.hijack? rack.input rack.logger
|
8
|
-
rack.multipart.buffer_size rack.multipart.tempfile_factory
|
9
|
-
rack.response_finished
|
10
|
-
rack.session rack.upgrade rack.upgrade? rack.url_scheme
|
11
|
-
HTTP_ACCEPT HTTP_ACCEPT_ENCODING HTTP_ACCEPT_LANGUAGE
|
12
|
-
HTTP_CONNECTION HTTP_HOST HTTP_USER_AGENT PATH_INFO QUERY_STRING REQUEST_METHOD
|
13
|
-
SCRIPT_NAME SERVER_NAME SERVER_PROTOCOL SERVER_SOFTWARE]
|
14
|
-
def initialize(req, config = {})
|
15
|
-
@req = req
|
16
|
-
@config = config
|
17
|
-
end
|
18
|
-
|
19
|
-
def [](key)
|
20
|
-
return super(key) if key?(key)
|
21
|
-
self[key] = case key
|
22
|
-
when 'rack.errors'
|
23
|
-
STDERR
|
24
|
-
when 'rack.hijack'
|
25
|
-
nil
|
26
|
-
when 'rack.hijack?'
|
27
|
-
false
|
28
|
-
when 'rack.input'
|
29
|
-
nil # ::IO.new
|
30
|
-
when 'rack.logger'
|
31
|
-
::Logger.new(self['rack.errors'])
|
32
|
-
when 'rack.multipart.buffer_size'
|
33
|
-
4096
|
34
|
-
when 'rack.multipart.tempfile_factory'
|
35
|
-
proc { |_filename, _content_type| File.new }
|
36
|
-
when 'rack.response_finished'
|
37
|
-
[]
|
38
|
-
when 'rack.session'
|
39
|
-
{}
|
40
|
-
when 'rack.upgrade'
|
41
|
-
nil
|
42
|
-
when 'rack.upgrade?'
|
43
|
-
nil
|
44
|
-
when 'rack.url_scheme'
|
45
|
-
@config[:scheme]
|
46
|
-
when 'PATH_INFO'
|
47
|
-
@req.get_url
|
48
|
-
when 'QUERY_STRING'
|
49
|
-
@req.get_query
|
50
|
-
when 'RACK_ERRORS'
|
51
|
-
self['rack.errors']
|
52
|
-
when 'RACK_LOGGER'
|
53
|
-
self['rack.logger']
|
54
|
-
when 'REQUEST_METHOD'
|
55
|
-
@req.get_method
|
56
|
-
when 'SCRIPT_NAME'
|
57
|
-
""
|
58
|
-
when 'SERVER_NAME'
|
59
|
-
@config[:host]
|
60
|
-
when 'SERVER_PORT'
|
61
|
-
@config[:port].to_s
|
62
|
-
when 'SERVER_PROTOCOL'
|
63
|
-
@req.get_header('protocol')
|
64
|
-
when 'SERVER_SOFTWARE'
|
65
|
-
"#{@config[:handler]}/#{Up::VERSION} #{@config[:engine]}"
|
66
|
-
else
|
67
|
-
if key.start_with?('HTTP_')
|
68
|
-
key = key[5..].gsub(/_/, '-')
|
69
|
-
@req.get_header(key.downcase)
|
70
|
-
else
|
71
|
-
nil
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
def req_headers
|
77
|
-
@req.headers
|
78
|
-
end
|
79
|
-
|
80
|
-
def each
|
81
|
-
unless @got_them_all
|
82
|
-
RACK_VARS.each { |k| self[k] unless self.key?(k) }
|
83
|
-
@got_them_all = true
|
84
|
-
end
|
85
|
-
super
|
86
|
-
end
|
87
|
-
|
88
|
-
def to_s
|
89
|
-
unless @got_them_all
|
90
|
-
RACK_VARS.each { |k| self[k] unless self.key?(k) }
|
91
|
-
@got_them_all = true
|
92
|
-
end
|
93
|
-
super
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
@@ -1,101 +0,0 @@
|
|
1
|
-
# backtick_javascript: true
|
2
|
-
|
3
|
-
require 'logger'
|
4
|
-
require 'up/version'
|
5
|
-
|
6
|
-
module Up
|
7
|
-
module UWebSocket
|
8
|
-
class RackEnv < ::Hash
|
9
|
-
RACK_VARS = %w[rack.errors rack.hijack rack.hijack? rack.input rack.logger
|
10
|
-
rack.multipart.buffer_size rack.multipart.tempfile_factory
|
11
|
-
rack.response_finished
|
12
|
-
rack.session rack.upgrade rack.upgrade? rack.url_scheme
|
13
|
-
HTTP_ACCEPT HTTP_ACCEPT_ENCODING HTTP_ACCEPT_LANGUAGE
|
14
|
-
HTTP_CONNECTION HTTP_HOST HTTP_USER_AGENT PATH_INFO QUERY_STRING REQUEST_METHOD
|
15
|
-
SCRIPT_NAME SERVER_NAME SERVER_PROTOCOL SERVER_SOFTWARE]
|
16
|
-
def initialize(req, config)
|
17
|
-
@req = req
|
18
|
-
@config = config
|
19
|
-
end
|
20
|
-
|
21
|
-
def [](key)
|
22
|
-
return super(key) if key?(key)
|
23
|
-
self[key] = case key
|
24
|
-
when 'rack.errors'
|
25
|
-
STDERR
|
26
|
-
when 'rack.hijack'
|
27
|
-
nil
|
28
|
-
when 'rack.hijack?'
|
29
|
-
false
|
30
|
-
when 'rack.input'
|
31
|
-
::IO.new
|
32
|
-
when 'rack.logger'
|
33
|
-
::Logger.new(self['rack.errors'])
|
34
|
-
when 'rack.multipart.buffer_size'
|
35
|
-
4096
|
36
|
-
when 'rack.multipart.tempfile_factory'
|
37
|
-
proc { |_filename, _content_type| File.new }
|
38
|
-
when 'rack.response_finished'
|
39
|
-
[]
|
40
|
-
when 'rack.session'
|
41
|
-
{}
|
42
|
-
when 'rack.upgrade'
|
43
|
-
nil
|
44
|
-
when 'rack.upgrade?'
|
45
|
-
nil
|
46
|
-
when 'rack.url_scheme'
|
47
|
-
@config[:scheme]
|
48
|
-
when 'PATH_INFO'
|
49
|
-
`#@req.getUrl()`
|
50
|
-
when 'QUERY_STRING'
|
51
|
-
`#@req.getQuery() || nil`
|
52
|
-
when 'RACK_ERRORS'
|
53
|
-
self['rack.errors']
|
54
|
-
when 'RACK_LOGGER'
|
55
|
-
self['rack.logger']
|
56
|
-
when 'REQUEST_METHOD'
|
57
|
-
`#@req.getMethod().toUpperCase()`
|
58
|
-
when 'SCRIPT_NAME'
|
59
|
-
""
|
60
|
-
when 'SERVER_NAME'
|
61
|
-
@config[:host]
|
62
|
-
when 'SERVER_PORT'
|
63
|
-
@config[:port].to_s
|
64
|
-
when 'SERVER_PROTOCOL'
|
65
|
-
`#@req.getHeader('protocol')`
|
66
|
-
when 'SERVER_SOFTWARE'
|
67
|
-
"#{@config[:handler]}/#{Up::VERSION} #{@config[:engine]}"
|
68
|
-
else
|
69
|
-
if key.start_with?('HTTP_')
|
70
|
-
key = key[5..].gsub(/_/, '-')
|
71
|
-
`#@req.getHeader(key.toLowerCase())`
|
72
|
-
else
|
73
|
-
nil
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def req_headers
|
79
|
-
h = {}
|
80
|
-
`#@req.forEach((k, v) => { h.set(k, v); })`
|
81
|
-
h
|
82
|
-
end
|
83
|
-
|
84
|
-
def each
|
85
|
-
unless @got_them_all
|
86
|
-
RACK_VARS.each { |k| self[k] unless self.key?(k) }
|
87
|
-
@got_them_all = true
|
88
|
-
end
|
89
|
-
super
|
90
|
-
end
|
91
|
-
|
92
|
-
def to_s
|
93
|
-
unless @got_them_all
|
94
|
-
RACK_VARS.each { |k| self[k] unless self.key?(k) }
|
95
|
-
@got_them_all = true
|
96
|
-
end
|
97
|
-
super
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|