make the endpoints at request time #9

Merged
yagich merged 2 commits from serve-on-request into main 2022-07-04 20:04:07 +00:00
2 changed files with 8 additions and 28 deletions
Showing only changes of commit 3d2fd37191 - Show all commits

31
Main.gd
View File

@ -17,26 +17,8 @@ func _start_server(port: int = 3001) -> void:
return return
_server = HTTPServer.new() _server = HTTPServer.new()
var dir := Directory.new() _server.endpoint(HTTPServer.Method.GET, "/", funcref(self, "_serve_file"), ["index.html"]) # this is still needed to make 'localhost:port/' to point to index.html
if dir.open(server_dir) == OK: _server.fallback(funcref(self, "_serve_file"))
if dir.list_dir_begin() != OK:
# TODO: show error to user here
return
var file_name := dir.get_next()
while file_name != "":
if !dir.current_is_dir():
if file_name.get_extension() == "import":
file_name = dir.get_next()
continue
# print(file_name)
_server.endpoint(HTTPServer.Method.GET, "/%s" % file_name, funcref(self, "_serve_file"), [file_name])
file_name = dir.get_next()
_server.endpoint(HTTPServer.Method.GET, "/", funcref(self, "_serve_file"), ["index.html"])
if _server.listen(port) != OK: if _server.listen(port) != OK:
# TODO: show error to user here # TODO: show error to user here
@ -64,11 +46,11 @@ func _process(_delta: float) -> void:
func _serve_file(_request: HTTPServer.Request, response: HTTPServer.Response, binds: Array) -> void: func _serve_file(_request: HTTPServer.Request, response: HTTPServer.Response, binds: Array) -> void:
var file_name: String = binds[0] as String var file_name: String = binds[0] as String
# TODO: deprecate binds in favor of using the Request.endpoint prop, as for this app's purposes it would be the same as the file name
var f := File.new() var f := File.new()
var success = f.open(server_dir.plus_file(file_name), File.READ) var success = f.open(server_dir.plus_file(file_name), File.READ)
if success == OK: if success == OK: # TODO: handle other errors like file not found
var mime := mime_types.get(file_name) var mime := mime_types.get(file_name)
response.type(mime) response.type(mime)
@ -77,8 +59,9 @@ func _serve_file(_request: HTTPServer.Request, response: HTTPServer.Response, bi
response.data(data) response.data(data)
else: else:
response.header("content-type", "text/plain") response.type(mime_types.get("txt"))
response.data("500 - Read Error") response.status(500)
response.data("Internal Server Error")
func _on_ServerUI_start_server_button_pressed(port: int, new_dir: String) -> void: func _on_ServerUI_start_server_button_pressed(port: int, new_dir: String) -> void:

View File

@ -160,10 +160,7 @@ func __process_request(method: String, endpoint: String, headers: Dictionary, bo
"[INF] Recieved request method: %s, endpoint: %s" % [method, endpoint] "[INF] Recieved request method: %s, endpoint: %s" % [method, endpoint]
) )
if !binds: endpoint_func.call_func(request, response, binds if binds else [request.endpoint()])
endpoint_func.call_func(request, response)
else:
endpoint_func.call_func(request, response, binds)
return response return response