fix: remove duplicate ACK in handle_message to prevent message re-delivery#86
Open
octo-patch wants to merge 1 commit into
Open
fix: remove duplicate ACK in handle_message to prevent message re-delivery#86octo-patch wants to merge 1 commit into
octo-patch wants to merge 1 commit into
Conversation
…ivery The main() loop already sends an ACK for every incoming WebSocket message that contains a 'mid' header. handle_message() was sending a second identical ACK, causing the server to potentially interpret the duplicate as a delivery failure and re-send the same message with a new timestamp. This redundant ACK is the likely root cause of the duplicate message processing issue (related to shaxiu#66) where the bot generates and sends multiple replies for a single buyer message. Fixes shaxiu#66
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #66
Problem
The
main()loop already sends an ACK response for every incoming WebSocket message that contains amidheader (lines 654–667). However,handle_message()was sending a second, identical ACK at the start of every call before doing any processing.This means the server received two ACKs per message. Many WebSocket-based messaging protocols interpret a duplicate ACK as a sign that the original delivery failed, and respond by re-sending the same message with a new delivery timestamp. This can cause:
Solution
Remove the redundant ACK block (19 lines) from
handle_message(). Themain()loop already handles ACKs for all messages — including theapp-key,ua, anddtheader fields — so no functionality is lost.Testing
main()sends the ACK before callinghandle_message(), covering all cases.handle_heartbeat_response()and do not go throughhandle_message(), so they are unaffected.