Skip to content

Commit 3db56dc

Browse files
committed
Remove handled fragmented messages from the map
We should remove handled fragmented messages from fragmentedMessages map to free it up. This PR includes this fix. Also, FragmentedClientMessageHandlerTest is enhanced to check the the map's size before and after merging and handling the end fragment.
1 parent e585515 commit 3db56dc

File tree

2 files changed

+13
-13
lines changed

2 files changed

+13
-13
lines changed

src/network/ClientConnection.ts

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -244,19 +244,15 @@ export class FragmentedClientMessageHandler {
244244
clientMessage.dropFragmentationFrame();
245245
if (fragmentationFrame.hasBeginFragmentFlag()) {
246246
this.fragmentedMessages.set(fragmentationId, clientMessage);
247-
} else if (fragmentationFrame.hasEndFragmentFlag()) {
248-
const mergedMessage = this.mergeIntoExistingClientMessage(fragmentationId, clientMessage);
249-
callback(mergedMessage);
250247
} else {
251-
this.mergeIntoExistingClientMessage(fragmentationId, clientMessage);
248+
const existingMessage = this.fragmentedMessages.get(fragmentationId);
249+
existingMessage.merge(clientMessage);
250+
if (fragmentationFrame.hasEndFragmentFlag()) {
251+
callback(existingMessage);
252+
this.fragmentedMessages.delete(fragmentationId);
253+
}
252254
}
253255
}
254-
255-
private mergeIntoExistingClientMessage(fragmentationId: number, clientMessage: ClientMessage): ClientMessage {
256-
const existingMessage = this.fragmentedMessages.get(fragmentationId);
257-
existingMessage.merge(clientMessage);
258-
return existingMessage;
259-
}
260256
}
261257

262258
export class ClientConnection {

test/connection/FragmentedClientMessageHandlerTest.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const ClientMessageReader = require('../../lib/network/ClientConnection').Client
2424
const cm = require('../../lib/ClientMessage');
2525
const FixSizedTypesCodec = require('../../lib/codec/builtin/FixSizedTypesCodec').FixSizedTypesCodec;
2626

27-
describe('FragmentedClientMessageHandler', function () {
27+
describe('FragmentedClientMessageHandlerTest', function () {
2828

2929
let reader;
3030
let handler;
@@ -62,15 +62,19 @@ describe('FragmentedClientMessageHandler', function () {
6262

6363
// Should merge with the above message
6464
handler.handleFragmentedMessage(fragment1, () => done(new Error("It should just merge.")));
65+
expect(handler.fragmentedMessages.size).to.equal(1);
6566
compareMessages(fragments[1].startFrame.next, endFrame.next);
6667
endFrame = fragmentedMessage.endFrame;
6768

6869
// Should merge with the above message and run the callback
70+
let isCalled = false;
6971
handler.handleFragmentedMessage(fragment2, () => {
7072
compareMessages(fragments[2].startFrame.next, endFrame.next);
71-
done();
73+
isCalled = true;
7274
});
73-
75+
expect(isCalled).to.be.true;
76+
expect(handler.fragmentedMessages.size).to.equal(0);
77+
done();
7478
});
7579

7680
const compareMessages = (frame1, frame2) => {

0 commit comments

Comments
 (0)