#!/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