diff --git a/Main.gd b/Main.gd index efb839b..a3148a6 100644 --- a/Main.gd +++ b/Main.gd @@ -1,15 +1,6 @@ extends Control -const mime_types: Dictionary = { - "html": "text/html", - "htm": "text/html", - "md": "text/plain", - "css": "text/css", - "txt": "text/plain", - "png": "image/png", - "jpg": "image/jpeg", - "jpeg": "image/jpeg", - } +var mime_types := MimeTypeHelper.generate_db() var _server: HTTPServer = null @@ -27,7 +18,9 @@ func _start_server(port: int = 3001) -> void: _server = HTTPServer.new() var dir := Directory.new() if dir.open("res://server_files") == OK: - dir.list_dir_begin() + 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(): @@ -44,7 +37,9 @@ func _start_server(port: int = 3001) -> void: _server.endpoint(HTTPServer.Method.GET, "/", funcref(self, "_serve_file"), ["index.html"]) - _server.listen(port) + if _server.listen(port) != OK: + # TODO: show error to user here + return func _stop_server() -> void: @@ -56,24 +51,32 @@ func _process(_delta: float) -> void: if _server == null: return - _server.take_connection() + if not _server.take_connection(): + # TODO: show error to user here + return -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 print(file_name) - var f = File.new() - f.open("res://server_files/%s" % file_name, File.READ) + var f := File.new() + var success = f.open("res://server_files/%s" % file_name, File.READ) - var mime = get_mime_type(file_name) + if success == OK: - response.header("content-type", get_mime_type(file_name)) + var mime := mime_types.get(file_name) + response.header("content-type", mime.full_type) + + # variant + # warning-ignore:incompatible_ternary + var data = f.get_as_text() if mime.type == 'text' else f.get_buffer(f.get_len()) - response.data(f.get_as_text()) -# else: -# response.header("content-type", "text/plain") -# response.data("500 - Read Error") + response.data(data) + + else: + response.header("content-type", "text/plain") + response.data("500 - Read Error") func get_mime_type(file_name: String) -> String: