# Public Constants const Status = preload("res://addons/http_server/status.gd") # Private variables var __data = "" # variant var __headers: Dictionary = { # key: String, header name # value: Variant, header value } var __status: int = 200 var __type: MimeTypeHelper.MimeType # Public methods func data(data) -> void: # data: Variant __data = data func header(name: String, value) -> void: # value: Variant __headers[name.to_lower()] = value func json(data) -> void: # data: Variant header("content-type", "application/json") __data = data func status(status: int) -> void: __status = status func type(type: MimeTypeHelper.MimeType) -> void: __type = type func to_utf8() -> PoolByteArray: var content = PoolStringArray() content.append(Status.code_to_status_line(__status)) var data = __data if !data: data = Status.code_to_description(__status) if __headers.get("content-type", "") == "application/json": data = JSON.print(data) __headers['content-length'] = len(data) __headers["content-type"] = "application/octet-stream" if !__type else __type.full_type for header in __headers: content.append("%s: %s" % [header, String(__headers[header])]) content.append("") if data: content.append(data) return content.join("\r\n").to_utf8() func get_data() -> PoolByteArray: var res = __response_headers() var data = __data if !data: return res var type: MimeTypeHelper.MimeType = __type if !type: type = MimeTypeHelper.MimeType.new() if data is String: # else, assume data is PoolByteArray data = data.to_utf8() res.append_array(data) return res # Private methods func __response_headers() -> PoolByteArray: var res = PoolStringArray() res.append(Status.code_to_status_line(__status)) var data = __data if !data: data = Status.code_to_description(__status) __headers["content-length"] = len(data) __headers["content-type"] = "application/octet-stream" if !__type else __type.full_type for header in __headers: res.append("%s: %s" % [header, String(__headers[header])]) res.append("") var s = res.join("\r\n") s = s + "\r\n" return s.to_utf8()