diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index c562224c736..ab2d5659913 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "6.4.3" +#define TGS_DMAPI_VERSION "6.4.4" // All functions and datums outside this document are subject to change with any version and should not be relied on. diff --git a/code/modules/tgs/v4/api.dm b/code/modules/tgs/v4/api.dm index 2f05c386338..b9a75c4abb4 100644 --- a/code/modules/tgs/v4/api.dm +++ b/code/modules/tgs/v4/api.dm @@ -263,7 +263,12 @@ for(var/I in channels) var/datum/tgs_chat_channel/channel = I ids += channel.id + message = UpgradeDeprecatedChatMessage(message) + + if (!length(channels)) + return + message = list("message" = message.text, "channelIds" = ids) if(intercepted_message_queue) intercepted_message_queue += list(message) @@ -276,7 +281,12 @@ var/datum/tgs_chat_channel/channel = I if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only))) channels += channel.id + message = UpgradeDeprecatedChatMessage(message) + + if (!length(channels)) + return + message = list("message" = message.text, "channelIds" = channels) if(intercepted_message_queue) intercepted_message_queue += list(message) diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 517240f12f8..926ea10a8f2 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -166,6 +166,10 @@ ids += channel.id message = UpgradeDeprecatedChatMessage(message) + + if (!length(channels)) + return + message = message._interop_serialize() message[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = ids if(intercepted_message_queue) @@ -181,6 +185,10 @@ channels += channel.id message = UpgradeDeprecatedChatMessage(message) + + if (!length(channels)) + return + message = message._interop_serialize() message[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channels if(intercepted_message_queue) @@ -199,6 +207,7 @@ /datum/tgs_api/v5/ChatChannelInfo() RequireInitialBridgeResponse() + WaitForReattach(TRUE) return chat_channels.Copy() /datum/tgs_api/v5/proc/DecodeChannels(chat_update_json) diff --git a/code/modules/tgs/v5/bridge.dm b/code/modules/tgs/v5/bridge.dm index b3cf7759397..37f58bcdf63 100644 --- a/code/modules/tgs/v5/bridge.dm +++ b/code/modules/tgs/v5/bridge.dm @@ -59,18 +59,22 @@ var/json = json_encode(data) return json -/datum/tgs_api/v5/proc/PerformBridgeRequest(bridge_request) +/datum/tgs_api/v5/proc/WaitForReattach(require_channels = FALSE) if(detached) // Wait up to one minute for(var/i in 1 to 600) sleep(1) - if(!detached) + if(!detached && (!require_channels || length(chat_channels))) break - // dad went out for milk cigarettes 20 years ago... + // dad went out for milk and cigarettes 20 years ago... + // yes, this affects all other waiters, intentional if(i == 600) detached = FALSE +/datum/tgs_api/v5/proc/PerformBridgeRequest(bridge_request) + WaitForReattach(FALSE) + // This is an infinite sleep until we get a response var/export_response = world.Export(bridge_request) if(!export_response) diff --git a/code/modules/tgs/v5/topic.dm b/code/modules/tgs/v5/topic.dm index 28fcc14aef8..3779db6237a 100644 --- a/code/modules/tgs/v5/topic.dm +++ b/code/modules/tgs/v5/topic.dm @@ -71,6 +71,7 @@ var/list/event_call = list(event_type) if (event_type == TGS_EVENT_WATCHDOG_DETACH) detached = TRUE + chat_channels.Cut() // https://github.com/tgstation/tgstation-server/issues/1490 if(event_parameters) event_call += event_parameters