#!/usr/local/bin/ruby231 require 'sbsm/request' dir = File.expand_path(File.join(File.dirname(File.dirname(__FILE__)), 'src')) $:.unshift dir require 'davaz' require 'util/config' require 'drb' DRb.start_service('druby://localhost:0') puts "Started DRb service" require 'zlib' require 'rack/request' require 'rack/response' module Rack # Paste has a Pony, Rack has a Lobster! class Lobster LobsterString ='dummy' LambdaLobster = lambda { |env| $stderr.puts "env query #{env[QUERY_STRING]}\n\n" puts env if env[QUERY_STRING].include?("flip") lobster = LobsterString.split("\n"). map { |line| line.ljust(42).reverse }. join("\n") href = "?" else lobster = LobsterString href = "?flip" end content = ["Lobstericious!", "
", lobster, "
", "flip!"] length = content.inject(0) { |a,e| a+e.size }.to_s [200, {CONTENT_TYPE => "text/html", CONTENT_LENGTH => length}, content] } def call(env) req = Request.new(env) if true # require 'pry'; binding.pry SBSM::Request.new(DaVaz.config.server_uri).process else # puts "req ist #{req.inspect}" # req ist #"CGI/1.1", "PATH_INFO"=>"/", "QUERY_STRING"=>"flip=left", # "REMOTE_ADDR"=>"127.0.0.1", "REMOTE_HOST"=>"127.0.0.1", "REQUEST_METHOD"=>"GET", "REQUEST_URI"=>"http://localhost:9191/?flip=left", # "SCRIPT_NAME"=>"", "SERVER_NAME"=>"localhost", "SERVER_PORT"=>"9191", "SERVER_PROTOCOL"=>"HTTP/1.1", "SERVER_SOFTWARE"=>"WEBrick/1.3.1 (Ruby/2.3.1/2016-04-26)", # "HTTP_HOST"=>"localhost:9191", "HTTP_CONNECTION"=>"close", "HTTP_CACHE_CONTROL"=>"max-age=0", "HTTP_UPGRADE_INSECURE_REQUESTS"=>"1", "HTTP_USER_AGENT"=>"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.34 Safari/537.36", "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "HTTP_REFERER"=>"http://localhost:8751/", "HTTP_ACCEPT_ENCODING"=>"gzip, deflate, sdch, br", "HTTP_ACCEPT_LANGUAGE"=>"de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4", "rack.version"=>[1, 3], "rack.input"=>#>, "rack.errors"=>#>>, "rack.multithread"=>true, "rack.multiprocess"=>false, "rack.run_once"=>false, "rack.url_scheme"=>"http", "rack.hijack?"=>true, "rack.hijack"=>#, "rack.hijack_io"=>nil, "HTTP_VERSION"=>"HTTP/1.1", "REQUEST_PATH"=>"/"}> if req.GET["flip"] == "left" lobster = LobsterString.split("\n").map do |line| line.ljust(42).reverse. gsub('\\', 'TEMP'). gsub('/', '\\'). gsub('TEMP', '/'). gsub('{','}'). gsub('(',')') end.join("\n") href = "?flip=right" elsif req.GET["flip"] == "crash" raise "Lobster crashed" else lobster = LobsterString href = "?flip=left" end res = Response.new res.write "Lobstericious!" res.write "
"
      res.write lobster
      res.write "
" res.write "

flip!

" res.write "

crash!

" res.finish end end end end if $0 == __FILE__ require 'rack' require 'rack/show_exceptions' Rack::Server.start( :app => Rack::ShowExceptions.new(Rack::Lint.new(Rack::Lobster.new)), :Port => 9191 ) end