#the rubnet server require 'socket' HTTP_NIL = "NIL" RUBNET = "#{ANSI_RED}RUBNET#{ANSI_CLEAR}" RUBNET_COMPILE = 'COMPILE' def rubnet_message(msg) puts "#{RUBNET}: #{msg}" end class Request attr_reader :method attr_reader :data attr_reader :uri attr_reader :version attr_reader :headers def parse_request(str) if @data[0].nil? @method = HTTP_NIL return end @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 def rubnet_main TCPServer.open("127.0.0.1", RUBNET_PORT) { |srv| mutex = Mutex.new loop do cli = srv.accept mutex.synchronize { h = Request.new(cli) case h.method when RUBNET_COMPILE rubnet_compile(h) else rubnet_message("unknown method: #{h.method}") end } end } end rubnet_main