Fixed stuff
Fixed tabs in both files Fixed SammiClient to be added to the tree, so that events can process.
This commit is contained in:
parent
759a19fcf1
commit
d6e60ff204
2 changed files with 475 additions and 474 deletions
|
|
@ -13,396 +13,397 @@ var last_error: String = ""
|
||||||
var last_error_description: String = ""
|
var last_error_description: String = ""
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
client = SammiClient.new()
|
client = SammiClient.new()
|
||||||
client.host = host
|
add_child(client)
|
||||||
client.port = port
|
client.host = host
|
||||||
client.password = password
|
client.port = port
|
||||||
client.request_completed.connect(_on_request_completed)
|
client.password = password
|
||||||
|
client.request_completed.connect(_on_request_completed)
|
||||||
|
|
||||||
func get_variable(name: String, button_id: String = "") -> Variant:
|
func get_variable(name: String, button_id: String = "") -> Variant:
|
||||||
var api_path: String = "/api?request=getVariable&name=%s" % name
|
var api_path: String = "/api?request=getVariable&name=%s" % name
|
||||||
if button_id != "":
|
if button_id != "":
|
||||||
api_path += "&button_id=%s" % button_id
|
api_path += "&button_id=%s" % button_id
|
||||||
client.request(SammiClient.Method.GET, api_path, "")
|
client.request(SammiClient.Method.GET, api_path, "")
|
||||||
var response: SammiClient.SammiResponse = await client.request_completed
|
var response: SammiClient.SammiResponse = await client.request_completed
|
||||||
if response.code == 200:
|
if response.code == 200:
|
||||||
var res := JSON.parse_string(response.body)
|
var res := JSON.parse_string(response.body)
|
||||||
if res.contains("error"):
|
if res.contains("error"):
|
||||||
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
||||||
last_error = res["Error"]
|
last_error = res["Error"]
|
||||||
last_error_description = res["Description"]
|
last_error_description = res["Description"]
|
||||||
return res
|
return res
|
||||||
else:
|
else:
|
||||||
return res["data"]
|
return res["data"]
|
||||||
else:
|
else:
|
||||||
push_error("Error: %d: %s" % [response.code, response.error_message])
|
push_error("Error: %d: %s" % [response.code, response.error_message])
|
||||||
last_error = "HTTP Error: %d" % response.code
|
last_error = "HTTP Error: %d" % response.code
|
||||||
last_error_description = response.error_message
|
last_error_description = response.error_message
|
||||||
return null
|
return null
|
||||||
|
|
||||||
func set_variable(name: String, value: Variant, button_id) -> bool:
|
func set_variable(name: String, value: Variant, button_id) -> bool:
|
||||||
var api_path: String = "/api"
|
var api_path: String = "/api"
|
||||||
var req: Dictionary = {
|
var req: Dictionary = {
|
||||||
"request": "setVariable",
|
"request": "setVariable",
|
||||||
"name": name,
|
"name": name,
|
||||||
"value": value,
|
"value": value,
|
||||||
"button_id": button_id
|
"button_id": button_id
|
||||||
}
|
}
|
||||||
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
||||||
var response: SammiClient.SammiResponse = await client.request_completed
|
var response: SammiClient.SammiResponse = await client.request_completed
|
||||||
if response.code == 200:
|
if response.code == 200:
|
||||||
var res := JSON.parse_string(response.body)
|
var res := JSON.parse_string(response.body)
|
||||||
if res.has("data") and res["data"] == "Ok.":
|
if res.has("data") and res["data"] == "Ok.":
|
||||||
return true
|
return true
|
||||||
elif res.has("error"):
|
elif res.has("error"):
|
||||||
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
||||||
last_error = res["Error"]
|
last_error = res["Error"]
|
||||||
last_error_description = res["Description"]
|
last_error_description = res["Description"]
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: Invalid JSON Returned. Body: %s" % response.body)
|
push_error("Error: Invalid JSON Returned. Body: %s" % response.body)
|
||||||
last_error = "Invalid JSON Returned"
|
last_error = "Invalid JSON Returned"
|
||||||
last_error_description = response.body
|
last_error_description = response.body
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %d: %s" % [response.code, response.error_message])
|
push_error("Error: %d: %s" % [response.code, response.error_message])
|
||||||
last_error = "HTTP Error: %d" % response.code
|
last_error = "HTTP Error: %d" % response.code
|
||||||
last_error_description = response.error_message
|
last_error_description = response.error_message
|
||||||
return false
|
return false
|
||||||
|
|
||||||
func delete_variable(name: String, button_id) -> bool:
|
func delete_variable(name: String, button_id) -> bool:
|
||||||
var api_path: String = "/api" % name
|
var api_path: String = "/api" % name
|
||||||
var req: Dictionary = {
|
var req: Dictionary = {
|
||||||
"request": "deleteVariable",
|
"request": "deleteVariable",
|
||||||
"name": name,
|
"name": name,
|
||||||
"button_id": button_id
|
"button_id": button_id
|
||||||
}
|
}
|
||||||
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
||||||
var response: SammiClient.SammiResponse = await client.request_completed
|
var response: SammiClient.SammiResponse = await client.request_completed
|
||||||
if response.code == 200:
|
if response.code == 200:
|
||||||
var res := JSON.parse_string(response.body)
|
var res := JSON.parse_string(response.body)
|
||||||
if res.has("data") and res["data"] == "Ok.":
|
if res.has("data") and res["data"] == "Ok.":
|
||||||
return true
|
return true
|
||||||
elif res.has("error"):
|
elif res.has("error"):
|
||||||
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
||||||
last_error = res["Error"]
|
last_error = res["Error"]
|
||||||
last_error_description = res["Description"]
|
last_error_description = res["Description"]
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %s" % response.body)
|
push_error("Error: %s" % response.body)
|
||||||
last_error = "Invalid JSON Returned"
|
last_error = "Invalid JSON Returned"
|
||||||
last_error_description = response.body
|
last_error_description = response.body
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %d: %s" % [response.code, response.error_message])
|
push_error("Error: %d: %s" % [response.code, response.error_message])
|
||||||
last_error = "HTTP Error: %d" % response.code
|
last_error = "HTTP Error: %d" % response.code
|
||||||
last_error_description = response.error_message
|
last_error_description = response.error_message
|
||||||
return false
|
return false
|
||||||
|
|
||||||
func insert_array(name: String, position: int, value: Variant, button_id: String) -> bool:
|
func insert_array(name: String, position: int, value: Variant, button_id: String) -> bool:
|
||||||
var api_path: String = "/api"
|
var api_path: String = "/api"
|
||||||
var req: Dictionary = {
|
var req: Dictionary = {
|
||||||
"request": "insertArray",
|
"request": "insertArray",
|
||||||
"name": name,
|
"name": name,
|
||||||
"position": position,
|
"position": position,
|
||||||
"value": value,
|
"value": value,
|
||||||
"button_id": button_id
|
"button_id": button_id
|
||||||
}
|
}
|
||||||
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
||||||
var response: SammiClient.SammiResponse = await client.request_completed
|
var response: SammiClient.SammiResponse = await client.request_completed
|
||||||
if response.code == 200:
|
if response.code == 200:
|
||||||
var res := JSON.parse_string(response.body)
|
var res := JSON.parse_string(response.body)
|
||||||
if res.has("data") and res["data"] == "Ok.":
|
if res.has("data") and res["data"] == "Ok.":
|
||||||
return true
|
return true
|
||||||
elif res.has("error"):
|
elif res.has("error"):
|
||||||
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
||||||
last_error = res["Error"]
|
last_error = res["Error"]
|
||||||
last_error_description = res["Description"]
|
last_error_description = res["Description"]
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %s" % response.body)
|
push_error("Error: %s" % response.body)
|
||||||
last_error = "Invalid JSON Returned"
|
last_error = "Invalid JSON Returned"
|
||||||
last_error_description = response.body
|
last_error_description = response.body
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %d: %s" % [response.code, response.error_message])
|
push_error("Error: %d: %s" % [response.code, response.error_message])
|
||||||
last_error = "HTTP Error: %d" % response.code
|
last_error = "HTTP Error: %d" % response.code
|
||||||
last_error_description = response.error_message
|
last_error_description = response.error_message
|
||||||
return false
|
return false
|
||||||
|
|
||||||
func delete_array(name: String, position: int, button_id: String) -> bool:
|
func delete_array(name: String, position: int, button_id: String) -> bool:
|
||||||
var api_path: String = "/api"
|
var api_path: String = "/api"
|
||||||
var req: Dictionary = {
|
var req: Dictionary = {
|
||||||
"request": "deleteArray",
|
"request": "deleteArray",
|
||||||
"name": name,
|
"name": name,
|
||||||
"position": position,
|
"position": position,
|
||||||
"button_id": button_id
|
"button_id": button_id
|
||||||
}
|
}
|
||||||
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
||||||
var response: SammiClient.SammiResponse = await client.request_completed
|
var response: SammiClient.SammiResponse = await client.request_completed
|
||||||
if response.code == 200:
|
if response.code == 200:
|
||||||
var res := JSON.parse_string(response.body)
|
var res := JSON.parse_string(response.body)
|
||||||
if res.has("data") and res["data"] == "Ok.":
|
if res.has("data") and res["data"] == "Ok.":
|
||||||
return true
|
return true
|
||||||
elif res.has("error"):
|
elif res.has("error"):
|
||||||
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
||||||
last_error = res["Error"]
|
last_error = res["Error"]
|
||||||
last_error_description = res["Description"]
|
last_error_description = res["Description"]
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %s" % response.body)
|
push_error("Error: %s" % response.body)
|
||||||
last_error = "Invalid JSON Returned"
|
last_error = "Invalid JSON Returned"
|
||||||
last_error_description = response.body
|
last_error_description = response.body
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %d: %s" % [response.code, response.error_message])
|
push_error("Error: %d: %s" % [response.code, response.error_message])
|
||||||
last_error = "HTTP Error: %d" % response.code
|
last_error = "HTTP Error: %d" % response.code
|
||||||
last_error_description = response.error_message
|
last_error_description = response.error_message
|
||||||
return false
|
return false
|
||||||
|
|
||||||
func get_deck_status(deck_id: String) -> bool:
|
func get_deck_status(deck_id: String) -> bool:
|
||||||
var api_path: String = "/api?request=getDeckStatus&deck_id=%s" % deck_id
|
var api_path: String = "/api?request=getDeckStatus&deck_id=%s" % deck_id
|
||||||
client.request(SammiClient.Method.GET, api_path, "")
|
client.request(SammiClient.Method.GET, api_path, "")
|
||||||
var response: SammiClient.SammiResponse = await client.request_completed
|
var response: SammiClient.SammiResponse = await client.request_completed
|
||||||
if response.code == 200:
|
if response.code == 200:
|
||||||
var res := JSON.parse_string(response.body)
|
var res := JSON.parse_string(response.body)
|
||||||
if res.has("error"):
|
if res.has("error"):
|
||||||
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
||||||
last_error = res["Error"]
|
last_error = res["Error"]
|
||||||
last_error_description = res["Description"]
|
last_error_description = res["Description"]
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
return true
|
return true
|
||||||
else:
|
else:
|
||||||
push_error("Error: %d: %s" % [response.code, response.error_message])
|
push_error("Error: %d: %s" % [response.code, response.error_message])
|
||||||
last_error = "HTTP Error: %d" % response.code
|
last_error = "HTTP Error: %d" % response.code
|
||||||
last_error_description = response.error_message
|
last_error_description = response.error_message
|
||||||
return false
|
return false
|
||||||
|
|
||||||
func change_deck_status(deck_id: String, status: int) -> bool:
|
func change_deck_status(deck_id: String, status: int) -> bool:
|
||||||
var api_path: String = "/api"
|
var api_path: String = "/api"
|
||||||
var req: Dictionary = {
|
var req: Dictionary = {
|
||||||
"request": "changeDeckStatus",
|
"request": "changeDeckStatus",
|
||||||
"deck_id": deck_id,
|
"deck_id": deck_id,
|
||||||
"status": status
|
"status": status
|
||||||
}
|
}
|
||||||
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
||||||
var response: SammiClient.SammiResponse = await client.request_completed
|
var response: SammiClient.SammiResponse = await client.request_completed
|
||||||
if response.code == 200:
|
if response.code == 200:
|
||||||
var res := JSON.parse_string(response.body)
|
var res := JSON.parse_string(response.body)
|
||||||
if res.has("data") and res["data"] == "Ok.":
|
if res.has("data") and res["data"] == "Ok.":
|
||||||
return true
|
return true
|
||||||
elif res.has("error"):
|
elif res.has("error"):
|
||||||
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
||||||
last_error = res["Error"]
|
last_error = res["Error"]
|
||||||
last_error_description = res["Description"]
|
last_error_description = res["Description"]
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %s" % response.body)
|
push_error("Error: %s" % response.body)
|
||||||
last_error = "Invalid JSON Returned"
|
last_error = "Invalid JSON Returned"
|
||||||
last_error_description = response.body
|
last_error_description = response.body
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %d: %s" % [response.code, response.error_message])
|
push_error("Error: %d: %s" % [response.code, response.error_message])
|
||||||
last_error = "HTTP Error: %d" % response.code
|
last_error = "HTTP Error: %d" % response.code
|
||||||
last_error_description = response.error_message
|
last_error_description = response.error_message
|
||||||
return false
|
return false
|
||||||
|
|
||||||
func trigger_button(button_id: String) -> bool:
|
func trigger_button(button_id: String) -> bool:
|
||||||
var api_path: String = "/api"
|
var api_path: String = "/api"
|
||||||
var req: Dictionary = {
|
var req: Dictionary = {
|
||||||
"request": "triggerButton",
|
"request": "triggerButton",
|
||||||
"button_id": button_id
|
"button_id": button_id
|
||||||
}
|
}
|
||||||
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
||||||
var response: SammiClient.SammiResponse = await client.request_completed
|
var response: SammiClient.SammiResponse = await client.request_completed
|
||||||
if response.code == 200:
|
if response.code == 200:
|
||||||
var res := JSON.parse_string(response.body)
|
var res := JSON.parse_string(response.body)
|
||||||
if res.has("data") and res["data"] == "Ok.":
|
if res.has("data") and res["data"] == "Ok.":
|
||||||
return true
|
return true
|
||||||
elif res.has("error"):
|
elif res.has("error"):
|
||||||
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
||||||
last_error = res["Error"]
|
last_error = res["Error"]
|
||||||
last_error_description = res["Description"]
|
last_error_description = res["Description"]
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %s" % response.body)
|
push_error("Error: %s" % response.body)
|
||||||
last_error = "Invalid JSON Returned"
|
last_error = "Invalid JSON Returned"
|
||||||
last_error_description = response.body
|
last_error_description = response.body
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %d: %s" % [response.code, response.error_message])
|
push_error("Error: %d: %s" % [response.code, response.error_message])
|
||||||
last_error = "HTTP Error: %d" % response.code
|
last_error = "HTTP Error: %d" % response.code
|
||||||
last_error_description = response.error_message
|
last_error_description = response.error_message
|
||||||
return false
|
return false
|
||||||
|
|
||||||
func release_button(button_id: String) -> bool:
|
func release_button(button_id: String) -> bool:
|
||||||
var api_path: String = "/api"
|
var api_path: String = "/api"
|
||||||
var req: Dictionary = {
|
var req: Dictionary = {
|
||||||
"request": "releaseButton",
|
"request": "releaseButton",
|
||||||
"button_id": button_id
|
"button_id": button_id
|
||||||
}
|
}
|
||||||
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
||||||
var response: SammiClient.SammiResponse = await client.request_completed
|
var response: SammiClient.SammiResponse = await client.request_completed
|
||||||
if response.code == 200:
|
if response.code == 200:
|
||||||
var res := JSON.parse_string(response.body)
|
var res := JSON.parse_string(response.body)
|
||||||
if res.has("data") and res["data"] == "Ok.":
|
if res.has("data") and res["data"] == "Ok.":
|
||||||
return true
|
return true
|
||||||
elif res.has("error"):
|
elif res.has("error"):
|
||||||
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
||||||
last_error = res["Error"]
|
last_error = res["Error"]
|
||||||
last_error_description = res["Description"]
|
last_error_description = res["Description"]
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %s" % response.body)
|
push_error("Error: %s" % response.body)
|
||||||
last_error = "Invalid JSON Returned"
|
last_error = "Invalid JSON Returned"
|
||||||
last_error_description = response.body
|
last_error_description = response.body
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %d: %s" % [response.code, response.error_message])
|
push_error("Error: %d: %s" % [response.code, response.error_message])
|
||||||
last_error = "HTTP Error: %d" % response.code
|
last_error = "HTTP Error: %d" % response.code
|
||||||
last_error_description = response.error_message
|
last_error_description = response.error_message
|
||||||
return false
|
return false
|
||||||
|
|
||||||
func modify_button(button_id: String, text: String = "", color: int = -1, image: String = "", border: int = -1) -> bool:
|
func modify_button(button_id: String, text: String = "", color: int = -1, image: String = "", border: int = -1) -> bool:
|
||||||
var api_path: String = "/api"
|
var api_path: String = "/api"
|
||||||
var req: Dictionary = {
|
var req: Dictionary = {
|
||||||
"request": "modifyButton",
|
"request": "modifyButton",
|
||||||
"button_id": button_id,
|
"button_id": button_id,
|
||||||
}
|
}
|
||||||
if text != "":
|
if text != "":
|
||||||
req["text"] = text
|
req["text"] = text
|
||||||
if color != -1:
|
if color != -1:
|
||||||
req["color"] = color
|
req["color"] = color
|
||||||
if image != "":
|
if image != "":
|
||||||
req["image"] = image
|
req["image"] = image
|
||||||
if border != -1:
|
if border != -1:
|
||||||
req["border"] = border
|
req["border"] = border
|
||||||
|
|
||||||
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
||||||
var response: SammiClient.SammiResponse = await client.request_completed
|
var response: SammiClient.SammiResponse = await client.request_completed
|
||||||
if response.code == 200:
|
if response.code == 200:
|
||||||
var res := JSON.parse_string(response.body)
|
var res := JSON.parse_string(response.body)
|
||||||
if res.has("data") and res["data"] == "Ok.":
|
if res.has("data") and res["data"] == "Ok.":
|
||||||
return true
|
return true
|
||||||
elif res.has("error"):
|
elif res.has("error"):
|
||||||
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
||||||
last_error = res["Error"]
|
last_error = res["Error"]
|
||||||
last_error_description = res["Description"]
|
last_error_description = res["Description"]
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %s" % response.body)
|
push_error("Error: %s" % response.body)
|
||||||
last_error = "Invalid JSON Returned"
|
last_error = "Invalid JSON Returned"
|
||||||
last_error_description = response.body
|
last_error_description = response.body
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %d: %s" % [response.code, response.error_message])
|
push_error("Error: %d: %s" % [response.code, response.error_message])
|
||||||
last_error = "HTTP Error: %d" % response.code
|
last_error = "HTTP Error: %d" % response.code
|
||||||
last_error_description = response.error_message
|
last_error_description = response.error_message
|
||||||
return false
|
return false
|
||||||
|
|
||||||
func popup_message(message: String) -> bool:
|
func popup_message(message: String) -> bool:
|
||||||
var api_path: String = "/api"
|
var api_path: String = "/api"
|
||||||
var req: Dictionary = {
|
var req: Dictionary = {
|
||||||
"request": "popupMessage",
|
"request": "popupMessage",
|
||||||
"message": message
|
"message": message
|
||||||
}
|
}
|
||||||
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
||||||
var response: SammiClient.SammiResponse = await client.request_completed
|
var response: SammiClient.SammiResponse = await client.request_completed
|
||||||
if response.code == 200:
|
if response.code == 200:
|
||||||
var res := JSON.parse_string(response.body)
|
var res := JSON.parse_string(response.body)
|
||||||
if res.has("data") and res["data"] == "Ok.":
|
if res.has("data") and res["data"] == "Ok.":
|
||||||
return true
|
return true
|
||||||
elif res.has("error"):
|
elif res.has("error"):
|
||||||
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
||||||
last_error = res["Error"]
|
last_error = res["Error"]
|
||||||
last_error_description = res["Description"]
|
last_error_description = res["Description"]
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %s" % response.body)
|
push_error("Error: %s" % response.body)
|
||||||
last_error = "Invalid JSON Returned"
|
last_error = "Invalid JSON Returned"
|
||||||
last_error_description = response.body
|
last_error_description = response.body
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %d: %s" % [response.code, response.error_message])
|
push_error("Error: %d: %s" % [response.code, response.error_message])
|
||||||
last_error = "HTTP Error: %d" % response.code
|
last_error = "HTTP Error: %d" % response.code
|
||||||
last_error_description = response.error_message
|
last_error_description = response.error_message
|
||||||
return false
|
return false
|
||||||
|
|
||||||
func alert_message(message: String) -> bool:
|
func alert_message(message: String) -> bool:
|
||||||
var api_path: String = "/api"
|
var api_path: String = "/api"
|
||||||
var req: Dictionary = {
|
var req: Dictionary = {
|
||||||
"request": "alertMessage",
|
"request": "alertMessage",
|
||||||
"message": message
|
"message": message
|
||||||
}
|
}
|
||||||
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
||||||
var response: SammiClient.SammiResponse = await client.request_completed
|
var response: SammiClient.SammiResponse = await client.request_completed
|
||||||
if response.code == 200:
|
if response.code == 200:
|
||||||
var res := JSON.parse_string(response.body)
|
var res := JSON.parse_string(response.body)
|
||||||
if res.has("data") and res["data"] == "Ok.":
|
if res.has("data") and res["data"] == "Ok.":
|
||||||
return true
|
return true
|
||||||
elif res.has("error"):
|
elif res.has("error"):
|
||||||
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
||||||
last_error = res["Error"]
|
last_error = res["Error"]
|
||||||
last_error_description = res["Description"]
|
last_error_description = res["Description"]
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %s" % response.body)
|
push_error("Error: %s" % response.body)
|
||||||
last_error = "Invalid JSON Returned"
|
last_error = "Invalid JSON Returned"
|
||||||
last_error_description = response.body
|
last_error_description = response.body
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %d: %s" % [response.code, response.error_message])
|
push_error("Error: %d: %s" % [response.code, response.error_message])
|
||||||
last_error = "HTTP Error: %d" % response.code
|
last_error = "HTTP Error: %d" % response.code
|
||||||
last_error_description = response.error_message
|
last_error_description = response.error_message
|
||||||
return false
|
return false
|
||||||
|
|
||||||
func notification_message(message: String, title: String) -> bool:
|
func notification_message(message: String, title: String) -> bool:
|
||||||
var api_path: String = "/api"
|
var api_path: String = "/api"
|
||||||
var req: Dictionary = {
|
var req: Dictionary = {
|
||||||
"request": "notificationMessage",
|
"request": "notificationMessage",
|
||||||
"message": message,
|
"message": message,
|
||||||
"title": title
|
"title": title
|
||||||
}
|
}
|
||||||
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
client.request(SammiClient.Method.POST, api_path, JSON.stringify(req))
|
||||||
var response: SammiClient.SammiResponse = await client.request_completed
|
var response: SammiClient.SammiResponse = await client.request_completed
|
||||||
if response.code == 200:
|
if response.code == 200:
|
||||||
var res := JSON.parse_string(response.body)
|
var res := JSON.parse_string(response.body)
|
||||||
if res.has("data") and res["data"] == "Ok.":
|
if res.has("data") and res["data"] == "Ok.":
|
||||||
return true
|
return true
|
||||||
elif res.has("error"):
|
elif res.has("error"):
|
||||||
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
push_error("Error: %s: %s" % [res["Error"], res["Description"]])
|
||||||
last_error = res["Error"]
|
last_error = res["Error"]
|
||||||
last_error_description = res["Description"]
|
last_error_description = res["Description"]
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %s" % response.body)
|
push_error("Error: %s" % response.body)
|
||||||
last_error = "Invalid JSON Returned"
|
last_error = "Invalid JSON Returned"
|
||||||
last_error_description = response.body
|
last_error_description = response.body
|
||||||
return false
|
return false
|
||||||
else:
|
else:
|
||||||
push_error("Error: %d: %s" % [response.code, response.error_message])
|
push_error("Error: %d: %s" % [response.code, response.error_message])
|
||||||
last_error = "HTTP Error: %d" % response.code
|
last_error = "HTTP Error: %d" % response.code
|
||||||
last_error_description = response.error_message
|
last_error_description = response.error_message
|
||||||
return false
|
return false
|
||||||
|
|
||||||
|
|
||||||
func _on_request_completed(response: SammiClient.SammiResponse) -> void:
|
func _on_request_completed(response: SammiClient.SammiResponse) -> void:
|
||||||
var resp: ApiResponse = ApiResponse.new()
|
var resp: ApiResponse = ApiResponse.new()
|
||||||
if response.code == 200:
|
if response.code == 200:
|
||||||
var res := JSON.parse_string(response.body)
|
var res := JSON.parse_string(response.body)
|
||||||
if res.has("error"):
|
if res.has("error"):
|
||||||
resp.error = res["Error"]
|
resp.error = res["Error"]
|
||||||
resp.error_description = res["Description"]
|
resp.error_description = res["Description"]
|
||||||
else:
|
else:
|
||||||
resp.data = res["data"]
|
resp.data = res["data"]
|
||||||
else:
|
else:
|
||||||
resp.error = "HTTP Error: %d" % response.code
|
resp.error = "HTTP Error: %d" % response.code
|
||||||
resp.error_description = response.error_message
|
resp.error_description = response.error_message
|
||||||
request_completed.emit(resp)
|
request_completed.emit(resp)
|
||||||
|
|
||||||
|
|
||||||
class ApiResponse:
|
class ApiResponse:
|
||||||
var data: Variant
|
var data: Variant
|
||||||
var error: String
|
var error: String
|
||||||
var error_description: String
|
var error_description: String
|
||||||
|
|
|
||||||
|
|
@ -26,137 +26,137 @@ var method: Method = Method.GET
|
||||||
var body: String = ""
|
var body: String = ""
|
||||||
|
|
||||||
enum State {
|
enum State {
|
||||||
CONNECTING,
|
CONNECTING,
|
||||||
REQUESTING,
|
REQUESTING,
|
||||||
RESPONSE,
|
RESPONSE,
|
||||||
ERROR,
|
ERROR,
|
||||||
CLOSED
|
CLOSED
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Method {
|
enum Method {
|
||||||
GET,
|
GET,
|
||||||
POST,
|
POST,
|
||||||
}
|
}
|
||||||
|
|
||||||
func request(method: Method, api_path: String, body: String) -> void:
|
func request(method: Method, api_path: String, body: String) -> void:
|
||||||
assert(state == State.CLOSED, "A request is in the process of being made.")
|
assert(state == State.CLOSED, "A request is in the process of being made.")
|
||||||
|
|
||||||
self.query = api_path
|
self.query = api_path
|
||||||
self.body = body
|
self.body = body
|
||||||
self.client = StreamPeerTCP.new()
|
self.client = StreamPeerTCP.new()
|
||||||
self.client.connect_to_host(host, port)
|
self.client.connect_to_host(host, port)
|
||||||
self.state = State.CONNECTING
|
self.state = State.CONNECTING
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
func _process(_delta: float) -> void:
|
||||||
if not client:
|
if not client:
|
||||||
return
|
return
|
||||||
|
|
||||||
if state == State.CLOSED:
|
if state == State.CLOSED:
|
||||||
client.disconnect_from_host()
|
client.disconnect_from_host()
|
||||||
client = null
|
client = null
|
||||||
return
|
return
|
||||||
|
|
||||||
client.poll()
|
client.poll()
|
||||||
if client.get_status() == StreamPeerTCP.Status.STATUS_CONNECTED and state == State.CONNECTING:
|
if client.get_status() == StreamPeerTCP.Status.STATUS_CONNECTED and state == State.CONNECTING:
|
||||||
state = State.REQUESTING
|
state = State.REQUESTING
|
||||||
_send_request()
|
_send_request()
|
||||||
elif client.get_status() == StreamPeerTCP.Status.STATUS_CONNECTED and state == State.REQUESTING:
|
elif client.get_status() == StreamPeerTCP.Status.STATUS_CONNECTED and state == State.REQUESTING:
|
||||||
state = State.RESPONSE
|
state = State.RESPONSE
|
||||||
_read_response()
|
_read_response()
|
||||||
elif client.get_status() == StreamPeerTCP.Status.STATUS_CONNECTED and state == State.RESPONSE:
|
elif client.get_status() == StreamPeerTCP.Status.STATUS_CONNECTED and state == State.RESPONSE:
|
||||||
_read_response()
|
_read_response()
|
||||||
elif client.get_status() == StreamPeerTCP.Status.STATUS_ERROR:
|
elif client.get_status() == StreamPeerTCP.Status.STATUS_ERROR:
|
||||||
state = State.ERROR
|
state = State.ERROR
|
||||||
print("Error: ", client.get_error())
|
print("Error: ", client.get_error())
|
||||||
client.disconnect_from_host()
|
client.disconnect_from_host()
|
||||||
client = null
|
client = null
|
||||||
|
|
||||||
func _send_request() -> void:
|
func _send_request() -> void:
|
||||||
var request_str = ""
|
var request_str = ""
|
||||||
if method == Method.GET:
|
if method == Method.GET:
|
||||||
request_str = "GET %s HTTP/1.1\r\n" % query
|
request_str = "GET %s HTTP/1.1\r\n" % query
|
||||||
else:
|
else:
|
||||||
request_str = "POST %s HTTP/1.1\r\n" % query
|
request_str = "POST %s HTTP/1.1\r\n" % query
|
||||||
|
|
||||||
|
|
||||||
request_str += "Host: %s:%d\r\n" % [host, port]
|
request_str += "Host: %s:%d\r\n" % [host, port]
|
||||||
request_str += "User-Agent: %s\r\n" % user_agent
|
request_str += "User-Agent: %s\r\n" % user_agent
|
||||||
request_str += "Accept: */*\r\n"
|
request_str += "Accept: */*\r\n"
|
||||||
if password != "":
|
if password != "":
|
||||||
request_str += "Authorization: %s\r\n" % password
|
request_str += "Authorization: %s\r\n" % password
|
||||||
if method == Method.POST and body != "":
|
if method == Method.POST and body != "":
|
||||||
request_str += "Content-Type: application/json\r\n"
|
request_str += "Content-Type: application/json\r\n"
|
||||||
request_str += "Content-Length: %d\r\n" % body.length()
|
request_str += "Content-Length: %d\r\n" % body.length()
|
||||||
|
|
||||||
request_str += "\r\n"
|
request_str += "\r\n"
|
||||||
|
|
||||||
if method == Method.POST and body != "":
|
if method == Method.POST and body != "":
|
||||||
request_str += body
|
request_str += body
|
||||||
client.put_data(request_str.to_utf8_buffer())
|
client.put_data(request_str.to_utf8_buffer())
|
||||||
|
|
||||||
func _read_response() -> void:
|
func _read_response() -> void:
|
||||||
client.poll()
|
client.poll()
|
||||||
|
|
||||||
if headers.size() == 0:
|
if headers.size() == 0:
|
||||||
while true:
|
while true:
|
||||||
var byte := client.get_partial_data(1)
|
var byte := client.get_partial_data(1)
|
||||||
if byte[0] == OK and byte[1].size() == 0:
|
if byte[0] == OK and byte[1].size() == 0:
|
||||||
await get_tree().process_frame
|
await get_tree().process_frame
|
||||||
client.poll()
|
client.poll()
|
||||||
continue
|
continue
|
||||||
elif byte[0] == OK:
|
elif byte[0] == OK:
|
||||||
buffer.push_back(byte[1][0])
|
buffer.push_back(byte[1][0])
|
||||||
else:
|
else:
|
||||||
state = State.ERROR
|
state = State.ERROR
|
||||||
print("Error reading response headers.")
|
print("Error reading response headers.")
|
||||||
return
|
return
|
||||||
|
|
||||||
if buffer.size() < 4:
|
if buffer.size() < 4:
|
||||||
await get_tree().process_frame
|
await get_tree().process_frame
|
||||||
client.poll()
|
client.poll()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if (buffer[-2] == 10 and buffer[-1] == 10) or \
|
if (buffer[-2] == 10 and buffer[-1] == 10) or \
|
||||||
(buffer[-4] == 13 and buffer[-3] == 10 and buffer[-2] == 13 and buffer[-1] == 10):
|
(buffer[-4] == 13 and buffer[-3] == 10 and buffer[-2] == 13 and buffer[-1] == 10):
|
||||||
var data := buffer.get_string_from_utf8()
|
var data := buffer.get_string_from_utf8()
|
||||||
buffer = []
|
buffer = []
|
||||||
headers = data.replace("\r", "").rstrip("\n\n").split("\n")
|
headers = data.replace("\r", "").rstrip("\n\n").split("\n")
|
||||||
break
|
break
|
||||||
await get_tree().process_frame
|
await get_tree().process_frame
|
||||||
client.poll()
|
client.poll()
|
||||||
|
|
||||||
if headers.size() == 0:
|
if headers.size() == 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
var chunk := client.get_partial_data(1024)
|
var chunk := client.get_partial_data(1024)
|
||||||
if chunk[0] == OK and chunk[1].size() > 0:
|
if chunk[0] == OK and chunk[1].size() > 0:
|
||||||
buffer.append_array(chunk[1])
|
buffer.append_array(chunk[1])
|
||||||
else:
|
else:
|
||||||
response = SammiResponse.new(headers, buffer, query)
|
response = SammiResponse.new(headers, buffer, query)
|
||||||
request_completed.emit(response)
|
request_completed.emit(response)
|
||||||
state = State.CLOSED
|
state = State.CLOSED
|
||||||
|
|
||||||
|
|
||||||
class SammiResponse:
|
class SammiResponse:
|
||||||
var code: int
|
var code: int
|
||||||
var headers: Dictionary
|
var headers: Dictionary
|
||||||
var body: String
|
var body: String
|
||||||
var query: String
|
var query: String
|
||||||
var error_message: String
|
var error_message: String
|
||||||
|
|
||||||
func _init(p_headers: PackedStringArray, p_buffer: PackedByteArray, p_query: String) -> void:
|
func _init(p_headers: PackedStringArray, p_buffer: PackedByteArray, p_query: String) -> void:
|
||||||
body = p_buffer.get_string_from_utf8()
|
body = p_buffer.get_string_from_utf8()
|
||||||
headers = {}
|
headers = {}
|
||||||
for line in p_headers:
|
for line in p_headers:
|
||||||
if line.contains(": "):
|
if line.contains(": "):
|
||||||
var parts := line.split(": ")
|
var parts := line.split(": ")
|
||||||
headers[parts[0]] = parts[1]
|
headers[parts[0]] = parts[1]
|
||||||
else:
|
else:
|
||||||
var parts := Array(line.split(" "))
|
var parts := Array(line.split(" "))
|
||||||
if parts.pop_front() == "HTTP/1.1":
|
if parts.pop_front() == "HTTP/1.1":
|
||||||
code = int(parts.pop_front())
|
code = int(parts.pop_front())
|
||||||
error_message = " ".join(parts)
|
error_message = " ".join(parts)
|
||||||
else:
|
else:
|
||||||
code = 500
|
code = 500
|
||||||
error_message = "Unknown Error"
|
error_message = "Unknown Error"
|
||||||
query = p_query
|
query = p_query
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue