Commit 2002efe5 authored by Yoshiharu Hirose's avatar Yoshiharu Hirose

ダミーHTTPサーバ実装

parent e0a4a1b4
import java.io._
import java.net.InetSocketAddress
import com.sun.net.httpserver.{HttpExchange, HttpHandler, HttpServer}
import scala.collection.JavaConversions._
object DummyHttpServer {
val BASEDIR = """D:\project\nifty\clisdk\dev\iaas-sdk\src\test\resources"""
val PORTS = Array(80, 8080, 38080)
def main(args: Array[String]) {
PORTS.foreach(startServer)
}
/**
* サーバ起動
* @param port 待ち受けポート番号
*/
def startServer(port: Int) {
val server = HttpServer.create(new InetSocketAddress(port), 10)
server.createContext("/", new DummyHttpServer.MyHandler)
server.start()
}
/**
* ハンドラ
*/
class MyHandler extends HttpHandler {
def handle(t: HttpExchange): Unit = {
println("------------------------------------------------------------")
printf("%s %s\n", t.getRequestMethod, t.getRequestURI)
t.getRequestHeaders.entrySet().foreach { ent =>
ent.getValue.foreach { v =>
printf("%s: %s\n", ent.getKey, v)
}
}
findFile(new File(t.getRequestURI.getPath).getName, new File(BASEDIR)) match {
case Some(file) =>
t.sendResponseHeaders(200, file.length)
val is = new BufferedInputStream(new FileInputStream(file))
val os = t.getResponseBody
val buf = new Array[Byte](file.length.toInt)
is.read(buf)
os.write(buf)
os.close()
is.close()
printf(" -> 200 (%s)\n", file.getAbsolutePath)
case _ =>
t.sendResponseHeaders(404, 0)
println(" -> 404")
}
t.close()
}
/**
* ファイル検索
* @param filename ファイル名
* @param dir 検索対象ディレクトリ
* @return ファイル
*/
def findFile(filename: String, dir: File): Option[File] = {
dir.listFiles.foreach { f =>
if (f.isDirectory) {
val file = findFile(filename, f)
if (file.isDefined) {
return file
}
} else if (f.isFile && f.getName == filename) {
return Some(f)
}
}
None
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment