Sha256: 81ffe3ad03eb7fa7dcc44423675ac7d44733e0459426498b8f784f8ce2c259c5

Contents?: true

Size: 932 Bytes

Versions: 29

Compression:

Stored size: 932 Bytes

Contents

# frozen_string_literal: true

require 'bundler/setup'

require 'polyphony'
require 'h1p'

server = Polyphony::Net.tcp_listen('localhost', 1234,
  reuse_addr: true, reuse_port: true, dont_linger: true
)
puts 'Serving HTTP on port 1234'

def respond_default(conn)
  conn << "HTTP/1.1 204\r\n\r\n"
end

def respond_splice(conn, path)
  f = File.open(path, 'r') do |f|
    conn << "HTTP/1.1 200\r\nTransfer-Encoding: chunked\r\n\r\n"
    IO.http1_splice_chunked(f, conn, 16384)
  end
rescue => e
  p e
  # conn << "HTTP/1.1 500\r\nContent-Length: 0\r\n\r\n"
end

def handle_client(conn)
  parser = H1P::Parser.new(conn, :server)
  while true
    headers = parser.parse_headers
    break unless headers

    case headers[':path']
    when /^\/splice\/(.+)$/
      respond_splice(conn, $1)
    else
      respond_default(conn)
    end
  end
rescue Errno::ECONNRESET
  # ignore
end

server.accept_loop do |conn|
  handle_client(conn)
end

Version data entries

29 entries across 29 versions & 1 rubygems

Version Path
polyphony-1.6 examples/io/static_web_server.rb
polyphony-1.5 examples/io/static_web_server.rb
polyphony-1.4 examples/io/static_web_server.rb
polyphony-1.3 examples/io/static_web_server.rb
polyphony-1.2.1 examples/io/static_web_server.rb
polyphony-1.2 examples/io/static_web_server.rb
polyphony-1.1.1 examples/io/static_web_server.rb
polyphony-1.1 examples/io/static_web_server.rb
polyphony-1.0.2 examples/io/static_web_server.rb
polyphony-1.0.1 examples/io/static_web_server.rb
polyphony-1.0 examples/io/static_web_server.rb
polyphony-0.99.6 examples/io/static_web_server.rb
polyphony-0.99.5 examples/io/static_web_server.rb
polyphony-0.99.4 examples/io/static_web_server.rb
polyphony-0.99.3 examples/io/static_web_server.rb
polyphony-0.99.2 examples/io/static_web_server.rb
polyphony-0.99.1 examples/io/static_web_server.rb
polyphony-0.99 examples/io/static_web_server.rb
polyphony-0.98 examples/io/static_web_server.rb
polyphony-0.97 examples/io/static_web_server.rb