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 15 additions and 22 deletions
Showing only changes of commit e44cac165a - Show all commits

10
Main.gd
View File

@ -17,8 +17,7 @@ func _start_server(port: int = 3001) -> void:
return return
_server = HTTPServer.new() _server = HTTPServer.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 _server.endpoint(HTTPServer.Method.GET, "/", funcref(self, "_serve_file"))
_server.fallback(funcref(self, "_serve_file"))
if _server.listen(port) != OK: if _server.listen(port) != OK:
# TODO: show error to user here # TODO: show error to user here
@ -44,9 +43,10 @@ func _process(_delta: float) -> void:
return return
func _serve_file(_request: HTTPServer.Request, response: HTTPServer.Response, binds: Array) -> void: func _serve_file(request: HTTPServer.Request, response: HTTPServer.Response) -> void:
var file_name: String = binds[0] as String var file_name: String = request.endpoint()
# 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 if file_name == "/": # if the request is for root, serve index
file_name = "index.html"
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)

View File

@ -13,7 +13,7 @@ const Status = preload("res://addons/http_server/status.gd")
var __endpoints: Dictionary = { var __endpoints: Dictionary = {
# key: [Int, String], array with 0 index representing method, 1 index representing endpoint # key: [Int, String], array with 0 index representing method, 1 index representing endpoint
# value: [FuncRef, Array], index 0 = reference to function to call, index 1 = binds to pass to func # value: FuncRef, reference to function to call
} }
var __fallback: FuncRef = null var __fallback: FuncRef = null
var __server: TCP_Server = null var __server: TCP_Server = null
@ -32,7 +32,7 @@ func endpoint(type: int, endpoint: String, function: FuncRef, binds: Array = [])
) )
return return
__endpoints[endpoint_hash] = [function, binds] __endpoints[endpoint_hash] = function
func fallback(function: FuncRef) -> void: func fallback(function: FuncRef) -> void:
@ -121,20 +121,13 @@ func __process_request(method: String, endpoint: String, headers: Dictionary, bo
var endpoint_func: FuncRef = null var endpoint_func: FuncRef = null
var endpoint_parts: PoolStringArray = endpoint.split("/", false) var endpoint_parts: PoolStringArray = endpoint.split("/", false)
var binds
# special case for if endpoint is just root while !endpoint_func:
if endpoint == "/":
var endpoint_hash: Array = [type, "/"]
if __endpoints.has(endpoint_hash):
endpoint_func = __endpoints[endpoint_hash][0]
binds = __endpoints[endpoint_hash][1]
else:
while (!endpoint_func && !endpoint_parts.empty()):
var endpoint_hash: Array = [type, "/" + endpoint_parts.join("/")] var endpoint_hash: Array = [type, "/" + endpoint_parts.join("/")]
if __endpoints.has(endpoint_hash): if __endpoints.has(endpoint_hash):
endpoint_func = __endpoints[endpoint_hash][0] endpoint_func = __endpoints[endpoint_hash]
binds = __endpoints[endpoint_hash][1] elif endpoint_parts.empty():
break
else: else:
endpoint_parts.remove(endpoint_parts.size() - 1) endpoint_parts.remove(endpoint_parts.size() - 1)
@ -160,7 +153,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]
) )
endpoint_func.call_func(request, response, binds if binds else [request.endpoint()]) endpoint_func.call_func(request, response)
return response return response