Class: Up::Node::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/up/node/server.rb

Direct Known Subclasses

Cluster

Instance Method Summary collapse

Constructor Details

#initialize(app:, host: 'localhost', port: 3000, scheme: 'http', ca_file: nil, cert_file: nil, key_file: nil) ⇒ Server

Returns a new instance of Server.



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/up/node/server.rb', line 15

def initialize(app:, host: 'localhost', port: 3000, scheme: 'http', ca_file: nil, cert_file: nil, key_file: nil)
  @app = app
  @scheme    = scheme || 'http'
  raise "unsupported scheme #{@scheme}" unless %w[http https].include?(@scheme)
  @host      = host || 'localhost'
  @port      = port&.to_i || 3000
  @config    = { handler: self.class.name, engine: "node/#{`process.version`}", port: port, scheme: scheme, host: host }.freeze
  @ca_file   = ca_file
  @cert_file = cert_file
  @key_file  = key_file
  @server = nil
end

Instance Method Details

#listenObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/up/node/server.rb', line 55

def listen
  raise "already running" if @server
  %x{
    const ounr = Opal.Up.Node.RackEnv;
    const ouns = Opal.Up.Node.Server;
    function handler(req, res) {
      const rack_res = #@app.$call(ounr.$new(req, #@config));
      res.statusCode = rack_res[0];
      ouns.handle_headers(rack_res[1], res);
      ouns.handle_response(rack_res[2], res);
      res.end();
    }
    if (#@scheme == 'https') {
      #@server = https.createServer({ ca: fs.readFileSync(#@ca_file), cert: fs.readFileSync(#@cert_file), key: fs.readFileSync(#@key_file) }, handler);
    } else {
      #@server = http.createServer(handler);
    }
    #@server.listen(#@port, #@host, () => { console.log(`Server is running on ${#@scheme}://${#@host}:${#@port}`)});
  }
end

#stopObject



76
77
78
79
80
81
# File 'lib/up/node/server.rb', line 76

def stop
  if Up::CLI::stoppable?
    `#@server.close()`
    @server = nil
  end
end