sync http-server with upstream and properly check for endpoints

This commit is contained in:
2022-07-04 06:44:00 +03:00
parent 3d2fd37191
commit e44cac165a
2 changed files with 15 additions and 22 deletions

View File

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