mimetypes #1
							
								
								
									
										47
									
								
								Main.gd
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								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:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user