Class: Sujiko::Server
- Inherits:
-
Object
- Object
- Sujiko::Server
- Defined in:
- lib/sujiko/server.rb
Constant Summary collapse
- DEFAULT_PORT =
4567- MAX_REQUEST_HEADER_SIZE =
16_384- TEMPLATE =
File.("templates/index.html.erb", __dir__)
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.start(port: DEFAULT_PORT, public_origin: nil, out: $stdout, err: $stderr) ⇒ Object
15 16 17 18 |
# File 'lib/sujiko/server.rb', line 15 def self.start(port: DEFAULT_PORT, public_origin: nil, out: $stdout, err: $stderr) port = DEFAULT_PORT if port.nil? new(port, out, err, public_origin).start end |
Instance Method Details
#start ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/sujiko/server.rb', line 20 def start port = resolve_port html = render_template(port:) base_url = "http://127.0.0.1:#{port}" body_utf8 = html.encode(Encoding::UTF_8) server = nil server = TCPServer.new("127.0.0.1", port) trap("INT") { server&.close } @out.puts "Sujiko: #{base_url} (Ctrl-C で停止)" try_open_browser(base_url, @err) loop do socket = server.accept begin handle_socket(socket, body_utf8) ensure socket.close end end rescue Errno::EBADF, Errno::EINVAL, IOError # 終了: `accept` 中にソケットを閉じたあと ensure server&.close end |