📝 update test/httptest.nas
This commit is contained in:
parent
04806fc2c5
commit
21b345af27
|
@ -8,6 +8,8 @@
|
||||||
\_\ \/ \__,_|___/\__,_|_|
|
\_\ \/ \__,_|___/\__,_|_|
|
||||||
```
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## __Contents__
|
## __Contents__
|
||||||
|
|
||||||
* [__Introduction__](#introduction)
|
* [__Introduction__](#introduction)
|
||||||
|
|
|
@ -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){
|
extern "C" nasal_ref nas_shutdown(std::vector<nasal_ref>& args,nasal_gc& gc){
|
||||||
//shutdown();
|
|
||||||
if(args[0].type!=vm_num)
|
if(args[0].type!=vm_num)
|
||||||
return builtin_err("shutdown","\"sd\" must be a number");
|
return builtin_err("shutdown","\"sd\" must be a number");
|
||||||
if(args[1].type!=vm_num)
|
if(args[1].type!=vm_num)
|
||||||
|
|
|
@ -3,7 +3,6 @@ import("module/libsock.nas");
|
||||||
var sd=socket.socket(socket.AF_INET,socket.SOCK_STREAM,socket.IPPROTO_IP);
|
var sd=socket.socket(socket.AF_INET,socket.SOCK_STREAM,socket.IPPROTO_IP);
|
||||||
socket.bind(sd,"127.0.0.1",8080);
|
socket.bind(sd,"127.0.0.1",8080);
|
||||||
socket.listen(sd,1);
|
socket.listen(sd,1);
|
||||||
|
|
||||||
var httpheader="Http/1.1 200 OK\n\n";
|
var httpheader="Http/1.1 200 OK\n\n";
|
||||||
var httptail="\n";
|
var httptail="\n";
|
||||||
var index="<html>
|
var index="<html>
|
||||||
|
@ -11,16 +10,21 @@ var index="<html>
|
||||||
<title> nasal-http-test-web </title>
|
<title> nasal-http-test-web </title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<img src=\"/nasal.png\" width=\"100\" height=\"40\"><br /></img>
|
||||||
<text>
|
<text>
|
||||||
Hello, this is a simple HTML document just for test.<br />
|
Hello, this is a simple HTML document just for test. This simple http server is written in nasal.<br />
|
||||||
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 />
|
||||||
Nasal is an ECMAscript-like programming language that used in Flightgear.<br />
|
|
||||||
This language is designed by Andy Ross.<br />
|
|
||||||
|
|
||||||
The interpreter is totally rewritten by ValKmjolnir using C++(-std=c++11) without reusing the code in Andy Ross's nasal interpreter.<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 />
|
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/>
|
||||||
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).
|
</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>
|
</text>
|
||||||
</body>
|
</body>
|
||||||
</html>";
|
</html>";
|
||||||
|
@ -35,12 +39,20 @@ var notfound="<html>
|
||||||
</body>
|
</body>
|
||||||
</html>";
|
</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){
|
while(1){
|
||||||
var client=socket.accept(sd);
|
var client=socket.accept(sd);
|
||||||
var recieve_data=socket.recv(client.sd,1024);
|
var recieve_data=socket.recv(client.sd,1024);
|
||||||
if(!recieve_data.size){
|
if(!recieve_data.size){
|
||||||
println("[",client.ip,"] request connection closed");
|
println("[",client.ip,"] request connection closed");
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
var first=split("\n",recieve_data.str)[0];
|
var first=split("\n",recieve_data.str)[0];
|
||||||
var (type,path)=split(" ",first)[0,1];
|
var (type,path)=split(" ",first)[0,1];
|
||||||
|
@ -48,9 +60,20 @@ while(1){
|
||||||
if(path=="/")
|
if(path=="/")
|
||||||
socket.send(client.sd,httpheader~index~httptail);
|
socket.send(client.sd,httpheader~index~httptail);
|
||||||
elsif(path=="/favicon.ico")
|
elsif(path=="/favicon.ico")
|
||||||
socket.send(client.sd,httpheader~io.fin("pic/favicon.ico")~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
|
else
|
||||||
socket.send(client.sd,httpheader~notfound~httptail);
|
socket.send(client.sd,httpheader~notfound~httptail);
|
||||||
|
}
|
||||||
socket.closesocket(client.sd);
|
socket.closesocket(client.sd);
|
||||||
}
|
}
|
||||||
socket.closesocket(sd);
|
socket.closesocket(sd);
|
Loading…
Reference in New Issue