tesses.http/Tesses.Http.KitchenSink/Program.cs

75 lines
2.6 KiB
C#

using System.Net;
namespace Tesses.Http.KitchenSink;
class AspRouteStyle : ASPEndpointRequestHandler
{
[HttpGet]
public string Add(int a,int b)
{
return $"{a} + {b} = {a+b}";
}
[HttpGet]
public object Something(bool b,int i,double f,string sz)
{
return new {
Boolean = b,
Integer = i,
Double=f,
String=sz
};
}
}
class Program
{
public static async Task Main(string[] args)
{
MountableServer mountableServer=new MountableServer(RequestHandler.FromDirectory("WebSite"));
mountableServer.Mount("/SrcDl",RequestHandler.FromDelegateSync(e=>{
e.Response.SendFileAsDownload("Program.cs");
}));
mountableServer.Mount("/PasswordProtected",new BasicAuthRequestHandler((user,pass)=>{return user=="ddlovato" && pass=="somepassword";},RequestHandler.FromDelegateSync(e=>{
e.Response.WithContentType("text/plain").SendText("Password Protected Data");
})));
mountableServer.Mount("/4d",RequestHandler.FromDelegateSync(e=>{
HTTPClient client = HTTPClient.Open("GET","https://nextcloud.tesses.cf/apps/files_sharing/publicpreview/aYHgTAxNcAXNG3R?x=2258&y=727&a=true&file=celluloid-shot1007.jpg&scalingup=0");
client.SendToServer(e);
}));
mountableServer.Mount("/Endpoints/ASP",new AspRouteStyle());
mountableServer.Mount("/Endpoints/upload_data/",
RequestHandler.FromDelegateSync(e=>{
var parser=e.Request.GetMultipartParser();
parser.Parse((a,b,c)=>{
return File.Create(Path.Combine("WebSite","Endpoints","uploads",b));
},true).ToArray();
e.Response.WithContentType("text/plain").SendText("HELLO");
})
);
SendEvents evts=new SendEvents();
mountableServer.Mount("/counter/count",RequestHandler.FromDelegateSync(e=>{
e.Response.ServerSentEvents(evts);
}));
Thread t=new Thread(()=>{
for(long i =0;;i++){
evts.SendEvent($"Ran for {i} Seconds");
Thread.Sleep(1000);
}
});
t.Start();
HTTPServer server=new HTTPServer(mountableServer,new System.Net.Sockets.TcpListener(new IPEndPoint(0,3333)));
server.AllowMultipleRequestsOnOneConnection=true;
await server.ListenAsync();
}
}