rubnet
parent
3b6cf68dde
commit
fe4edf60f7
@ -0,0 +1,61 @@
|
|||||||
|
#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
|
||||||
Loading…
Reference in New Issue