📝 update test/httptest.nas

This commit is contained in:
ValKmjolnir 2022-06-11 12:49:26 +08:00
parent 04806fc2c5
commit 21b345af27
3 changed files with 38 additions and 14 deletions

View File

@ -8,6 +8,8 @@
\_\ \/ \__,_|___/\__,_|_|
```
![license](https://img.shields.io/badge/license-MIT-green?style=flat-square&logo=github)
## __Contents__
* [__Introduction__](#introduction)

View File

@ -43,7 +43,6 @@ extern "C" nasal_ref nas_closesocket(std::vector<nasal_ref>& args,nasal_gc& gc){
}
extern "C" nasal_ref nas_shutdown(std::vector<nasal_ref>& args,nasal_gc& gc){
//shutdown();
if(args[0].type!=vm_num)
return builtin_err("shutdown","\"sd\" must be a number");
if(args[1].type!=vm_num)

View File

@ -3,7 +3,6 @@ import("module/libsock.nas");
var sd=socket.socket(socket.AF_INET,socket.SOCK_STREAM,socket.IPPROTO_IP);
socket.bind(sd,"127.0.0.1",8080);
socket.listen(sd,1);
var httpheader="Http/1.1 200 OK\n\n";
var httptail="\n";
var index="<html>
@ -11,16 +10,21 @@ var index="<html>
<title> nasal-http-test-web </title>
</head>
<body>
<img src=\"/nasal.png\" width=\"100\" height=\"40\"><br /></img>
<text>
Hello, this is a simple HTML document just for test.<br />
This simple http server is written in nasal.<br />
Nasal is an ECMAscript-like programming language that used in Flightgear.<br />
This language is designed by Andy Ross.<br />
Hello, this is a simple HTML document just for test. This simple http server is written in nasal.<br />
Nasal is an ECMAscript-like programming language that used in Flightgear designed by Andy Ross.<br /><br />
The interpreter is totally rewritten by ValKmjolnir using C++(-std=c++11) without reusing the code in Andy Ross's nasal interpreter.<br />
But we really appreciate that Andy created this amazing programming language and his interpreter project.<br />
Now this project uses MIT license(2021/5/4). Edit it if you want, use this project to learn or create more interesting things(But don't forget me XD).
But we really appreciate that Andy created this amazing programming language and his interpreter project.<br /><br />
Now this project uses MIT license(2021/5/4). Edit it if you want, use this project to learn or create more interesting things(But don't forget me XD).<br/>
</text>
<img src=\"/benchmark.png\" width=\"400\" height=\"300\"></img>
<img src=\"/mandelbrot.png\" width=\"400\" height=\"300\"><br /></img>
<text>
Here is the benchmark of different versions of nasal interpreter(left).<br />
Look at this beautiful picture(right).<br />
Nasal can run this test file(test/bfcolored.nas) in about 220 seconds.<br />
In fact this test file cost over 2200 seconds before ver 8.0 .<br />
</text>
</body>
</html>";
@ -35,12 +39,20 @@ var notfound="<html>
</body>
</html>";
var files=func(){
var res={};
var dd=unix.opendir("./test");
while((var name=unix.readdir(dd))!=nil)
res[name]=1;
return res;
}();
while(1){
var client=socket.accept(sd);
var recieve_data=socket.recv(client.sd,1024);
if(!recieve_data.size){
println("[",client.ip,"] request connection closed");
break;
continue;
}
var first=split("\n",recieve_data.str)[0];
var (type,path)=split(" ",first)[0,1];
@ -48,9 +60,20 @@ while(1){
if(path=="/")
socket.send(client.sd,httpheader~index~httptail);
elsif(path=="/favicon.ico")
socket.send(client.sd,httpheader~io.fin("pic/favicon.ico")~httptail);
else
socket.send(client.sd,httpheader~notfound~httptail);
socket.send(client.sd,httpheader~io.fin("./pic/favicon.ico")~httptail);
elsif(path=="/nasal.png")
socket.send(client.sd,httpheader~io.fin("./pic/nasal.png")~httptail);
elsif(path=="/benchmark.png")
socket.send(client.sd,httpheader~io.fin("./pic/benchmark.png")~httptail);
elsif(path=="/mandelbrot.png")
socket.send(client.sd,httpheader~io.fin("./pic/mandelbrot.png")~httptail);
else{
var filename=substr(path,1,size(path)-1);
if(contains(files,filename))
socket.send(client.sd,httpheader~io.fin("./test/"~filename)~httptail)
else
socket.send(client.sd,httpheader~notfound~httptail);
}
socket.closesocket(client.sd);
}
socket.closesocket(sd);