* fix tgui chunking bug on 2 chunks

* ugh

* ugh

* should be fine

* people might have longer pint times
This commit is contained in:
Kashargul
2026-02-24 21:32:26 +01:00
committed by GitHub
parent 98c3165eeb
commit 6a771809f2
4 changed files with 9 additions and 39 deletions
+3 -31
View File
@@ -24,38 +24,10 @@
deltimer(partial_packets["timeout"])
partial_packets = null
if (!rustg_json_is_valid(assembled_payload))
log_tgui(usr, "Error: Invalid JSON")
return
return json_decode(assembled_payload)
/datum/tgui_say/proc/clear_oversized_payload()
partial_packets = null
/datum/tgui/proc/handle_packets(id, total_packets, packet)
id = text2num(id)
var/total = text2num(total_packets)
if(id == 1)
if(total > MAX_MESSAGE_CHUNKS)
return null
partial_packets = list("chunks" = new /list(total),
"timeout" = addtimer(CALLBACK(src, PROC_REF(clear_oversized_payload)), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE)
)
var/list/chunks = partial_packets["chunks"]
chunks[id] = packet
if(id != total)
if(id > 1)
partial_packets["timeout"] = addtimer(CALLBACK(src, PROC_REF(clear_oversized_payload)), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE)
return null
var/assembled_payload = ""
for(var/received_packet in partial_packets["chunks"])
assembled_payload += received_packet
deltimer(partial_packets["timeout"])
partial_packets = null
return json_decode(assembled_payload)
/datum/tgui/proc/clear_oversized_payload()
partial_packets = null
-5
View File
@@ -380,11 +380,6 @@
// Pass act type messages to tgui_act
if(type && copytext(type, 1, 5) == "act/")
var/act_type = copytext(type, 5)
var/id = href_list["packetId"]
if(!isnull(id))
payload = handle_packets(id, href_list["totalPackets"], href_list["packet"])
if(!payload)
return FALSE
#ifdef TGUI_DEBUGGING
log_tgui(user, "Action: [act_type] [href_list["payload"]], Window: [window.id], Source: [src_object]")
#endif
+5 -2
View File
@@ -407,7 +407,7 @@
"type" = message_type,
"count" = chunk_count,
"chunks" = list(),
"timeout" = addtimer(CALLBACK(src, PROC_REF(remove_oversized_payload), payload_id), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE)
"timeout" = addtimer(CALLBACK(src, PROC_REF(remove_oversized_payload), payload_id), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE)
)
/datum/tgui_window/proc/append_payload_chunk(payload_id, chunk)
@@ -421,9 +421,12 @@
var/message_type = payload["type"]
var/final_payload = chunks.Join()
remove_oversized_payload(payload_id)
if (!rustg_json_is_valid(final_payload))
log_tgui(usr, "Error: Invalid JSON")
return
on_message(message_type, json_decode(final_payload), list("type" = message_type, "payload" = final_payload, "tgui" = TRUE, "window_id" = id))
else
payload["timeout"] = addtimer(CALLBACK(src, PROC_REF(remove_oversized_payload), payload_id), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE)
payload["timeout"] = addtimer(CALLBACK(src, PROC_REF(remove_oversized_payload), payload_id), 10 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE)
/datum/tgui_window/proc/remove_oversized_payload(payload_id)
oversized_payloads -= payload_id