63 lines
1.4 KiB
Ruby
Executable File
63 lines
1.4 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
# encoding: utf-8
|
|
|
|
require 'webrick'
|
|
include WEBrick
|
|
$:.unshift 'ext'
|
|
$:.unshift 'lib'
|
|
require 'json'
|
|
|
|
class JSONServlet < HTTPServlet::AbstractServlet
|
|
@@count = 1
|
|
|
|
def do_GET(req, res)
|
|
obj = {
|
|
"TIME" => Time.now.strftime("%FT%T"),
|
|
"foo" => "Bär",
|
|
"bar" => "© ≠ €!",
|
|
'a' => 2,
|
|
'b' => 3.141,
|
|
'COUNT' => @@count += 1,
|
|
'c' => 'c',
|
|
'd' => [ 1, "b", 3.14 ],
|
|
'e' => { 'foo' => 'bar' },
|
|
'g' => "松本行弘",
|
|
'h' => 1000.0,
|
|
'i' => 0.001,
|
|
'j' => "\xf0\xa0\x80\x81",
|
|
}
|
|
res.body = JSON.generate obj
|
|
res['Content-Type'] = "application/json"
|
|
end
|
|
end
|
|
|
|
def create_server(err, dir, port)
|
|
dir = File.expand_path(dir)
|
|
err.puts "Surf to:", "http://#{Socket.gethostname}:#{port}"
|
|
|
|
s = HTTPServer.new(
|
|
:Port => port,
|
|
:DocumentRoot => dir,
|
|
:Logger => WEBrick::Log.new(err),
|
|
:AccessLog => [
|
|
[ err, WEBrick::AccessLog::COMMON_LOG_FORMAT ],
|
|
[ err, WEBrick::AccessLog::REFERER_LOG_FORMAT ],
|
|
[ err, WEBrick::AccessLog::AGENT_LOG_FORMAT ]
|
|
]
|
|
)
|
|
s.mount("/json", JSONServlet)
|
|
s
|
|
end
|
|
|
|
default_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', 'data'))
|
|
dir = ARGV.shift || default_dir
|
|
port = (ARGV.shift || 6666).to_i
|
|
s = create_server(STDERR, dir, 6666)
|
|
t = Thread.new { s.start }
|
|
trap(:INT) do
|
|
s.shutdown
|
|
t.join
|
|
exit
|
|
end
|
|
sleep
|