"#httpserver/base.spl" import
func destub { html | with html title ;
stub.html
:replace<"+title" title>
:replace<"+body" html>
:replace<"Lorem ipsum" lorem-ipsum>
}
def lorem-ipsum "lorem-ipsum" read-file:replace<"\n" "
"> =lorem-ipsum
def stub.html "stub.html" read-file =stub.html
def style.css "style.css" read-file =style.css
def 404.html "404.html" read-file destub<"404"> =404.html
def index.html "index.html" read-file destub<"Home"> =index.html
def features.html "features.html" read-file destub<"Features"> =features.html
func main { mega | with args ;
def server net:http:Server:new<"localhost" 13130> =server
"server is listening on 13130" println;
while { 1 } {
server:accept { | with client ;
"got a request" println;
catch {
client:read;
client handle-client;
} { with err ;
"A request has errored out with " err:message concat println;
"at: " println;
&println err:trace:foreach;
}
} fork pop
}
0
}
func handle-client { | with client ;
client:path "/" eq if {
index.html client:write-ok:write-html-body:finish;
2 stop
}
client:path "/features" eq if {
features.html client:write-ok:write-html-body:finish;
2 stop
}
client:path "/style.css" eq if {
style.css client:write-ok:write-content-type<"text/css">:write-str-body:finish;
2 stop
}
404.html client:write-head<404 "Not found">:write-html-body:finish;
}