#!/usr/bin/ruby require 'net/http' require 'socket' PORT = 8081 HTTP_GET = "GET" HTTP_POST = "POST" HTTP_QUERY = "QUERY" QDIR = ARGV[0] class Request attr_reader :method attr_reader :data attr_reader :uri attr_reader :version attr_reader :headers def parse_request(str) @method = @data[0].split(" ")[0] @uri = @data[0].split(" ")[1] @version = @data[0].split(" ")[2] @headers = @data.map.drop(1) { |header| {header.split(": ")[0] => header.split(": ")[1]} } end def initialize(cli) @data = [cli.gets] parse_request(@data) end end TCPServer.open("127.0.0.1", PORT) { |srv| mutex = Mutex.new loop do Thread.start(srv.accept) { |cli| mutex.synchronize do h = Request.new(cli) case h.method when HTTP_QUERY cli.write Dir.children(QDIR).join("\n") else cli.write("unknown method: #{h.method}") end cli.close end } end }