tickle-godot-frontend/Main.gd
2022-06-21 15:48:14 +03:00

82 lines
1.7 KiB
GDScript

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 _server: HTTPServer = null
var files: Array = []
func _ready() -> void:
_start_server()
func _start_server(port: int = 3001) -> void:
if _server:
return
_server = HTTPServer.new()
var dir := Directory.new()
if dir.open("res://server_files") == OK:
dir.list_dir_begin()
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"])
_server.listen(port)
func _stop_server() -> void:
if _server:
_server = null
func _process(_delta: float) -> void:
if _server == null:
return
_server.take_connection()
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 mime = get_mime_type(file_name)
response.header("content-type", get_mime_type(file_name))
response.data(f.get_as_text())
# else:
# response.header("content-type", "text/plain")
# response.data("500 - Read Error")
func get_mime_type(file_name: String) -> String:
var ext := file_name.get_extension().to_lower()
return mime_types[ext] if ext in mime_types else "application/octet-stream"