tickle-godot-frontend/addons/http_server/response.gd

109 lines
2.1 KiB
GDScript3
Raw Permalink Normal View History

2022-06-20 11:33:14 +00:00
# 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
2022-06-20 11:33:14 +00:00
# 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
2022-06-20 11:33:14 +00:00
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
2022-06-20 11:33:14 +00:00
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()