add initial server implementation
This commit is contained in:
parent
ec63dde2b0
commit
6478f54689
81
Main.gd
Normal file
81
Main.gd
Normal file
@ -0,0 +1,81 @@
|
||||
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"
|
8
Main.tscn
Normal file
8
Main.tscn
Normal file
@ -0,0 +1,8 @@
|
||||
[gd_scene load_steps=2 format=2]
|
||||
|
||||
[ext_resource path="res://Main.gd" type="Script" id=1]
|
||||
|
||||
[node name="Main" type="Control"]
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
script = ExtResource( 1 )
|
@ -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, Variant], index 0 = reference to function to call, index 1 = binds to pass to func
|
||||
# value: [FuncRef, Array], index 0 = reference to function to call, index 1 = binds to pass to func
|
||||
}
|
||||
var __fallback: FuncRef = null
|
||||
var __server: TCP_Server = null
|
||||
@ -21,7 +21,7 @@ var __server: TCP_Server = null
|
||||
|
||||
# Public methods
|
||||
|
||||
func endpoint(type: int, endpoint: String, function: FuncRef, binds = null) -> void:
|
||||
func endpoint(type: int, endpoint: String, function: FuncRef, binds: Array = []) -> void:
|
||||
var endpoint_hash: Array = [type, endpoint]
|
||||
if endpoint_hash in __endpoints:
|
||||
print(
|
||||
|
@ -21,6 +21,7 @@ _global_script_class_icons={
|
||||
[application]
|
||||
|
||||
config/name="Ticle Frontend"
|
||||
run/main_scene="res://Main.tscn"
|
||||
config/icon="res://icon.png"
|
||||
|
||||
[editor_plugins]
|
||||
|
Loading…
Reference in New Issue
Block a user