tickle-godot-frontend/Main.gd
2022-06-25 19:37:09 +03:00

95 lines
2.0 KiB
GDScript

extends Control
var mime_types := MimeTypeHelper.generate_db()
var _server: HTTPServer = null
onready var server_ui := $ServerUI
onready var server_dir = server_ui.server_dir
func _ready() -> void:
pass
func _start_server(port: int = 3001) -> void:
if _server:
return
_server = HTTPServer.new()
var dir := Directory.new()
if dir.open(server_dir) == OK:
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:
# TODO: show error to user here
return
server_ui.is_server_running = true
func _stop_server() -> void:
if _server:
_server.stop()
_server = null
server_ui.is_server_running = false
func _process(_delta: float) -> void:
if _server == null:
return
if not _server.take_connection():
# TODO: show error to user here
return
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()
var success = f.open("res://server_files/%s" % file_name, File.READ)
if success == OK:
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(data)
else:
response.header("content-type", "text/plain")
response.data("500 - Read Error")
func _on_ServerUI_start_server_button_pressed(port: int, new_dir: String) -> void:
server_dir = new_dir
_start_server(port)
func _on_ServerUI_stop_server_button_pressed() -> void:
_stop_server()