Class: Up::UWebSocket::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/up/u_web_socket/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.



13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/up/u_web_socket/server.rb', line 13

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



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

def listen
  raise "already running" if @server
  %x{
    const ouwr = Opal.Up.UWebSocket.RackEnv;
    const ouws = Opal.Up.UWebSocket.Server;
    if (#@scheme == 'https') {
      #@server = uws.SSLApp({ ca_file_name: #@ca_file, cert_file_name: #@cert_file, key_file_name: #@key_file });
    } else {
      #@server = uws.App();
    }
    #@server.any('/*', (res, req) => {
      const rack_res = #@app.$call(ouwr.$new(req, #@config));
      res.writeStatus(`${rack_res[0].toString()} OK`);
      ouws.handle_headers(rack_res[1], res);
      ouws.handle_response(rack_res[2], res);
      res.end();
    });
    #@server.listen(#@port, #@host, () => { console.log(`Server is running on ${#@scheme}://${#@host}:${#@port}`)});
  }
end

#stopObject



74
75
76
77
78
79
# File 'lib/up/u_web_socket/server.rb', line 74

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