diff --git a/rub b/rub index 492a151..444e8d0 100755 --- a/rub +++ b/rub @@ -15,6 +15,8 @@ ANSI_CLEAR = "\e[0m" RUB = "#{ANSI_RED}RUB#{ANSI_CLEAR}" RUBDIR = "#{Dir.home}/.rub/" RUBGIT="#{RUBDIR}/rub/" +RUBNET_SERVERS=["127.0.0.1"] +RUBNET_PORT=6969 TMPLDIR = "#{RUBDIR}/templates" RUBEDR="mousepad" @@ -44,7 +46,7 @@ def rub_init(name="app", tmpl="c") when "cpp" TMPL::CPP.call(name, tmpl) else - error("oops!") + error("oops! :c") end end @@ -74,6 +76,31 @@ def rub_edit(file) `#{RUBEDR} #{file}` end +def rubnet_start + message("starting rubnet server...") + + pid = fork do + require './rubnet.rb' + end + + message("rubnet pid: #{pid}") +end + +def rubnet_end + +end + +def rubnet_ctrl(cmd) + case cmd + when "start" + + when "stop" + + else + error("unknown rubnet command") + end +end + def parse_arg(arg) case arg when "init" @@ -95,6 +122,9 @@ def parse_arg(arg) when "delete" rub_delete + when "server" + error("specify a command for rubnet server") + else #if none of the above, pass args onto build.rb require "#{Dir.pwd}/build.rb" exit 0 @@ -116,6 +146,9 @@ def parse_args(argv) when "edit" rub_edit(argv[1]) + when "server" + rubnet_ctrl(argv[1]) + end end diff --git a/rubnet.rb b/rubnet.rb new file mode 100644 index 0000000..db837a5 --- /dev/null +++ b/rubnet.rb @@ -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