Skip to content

Commit a64491a

Browse files
committed
Fix message wrapping for Redis distribution
1 parent 99beb9e commit a64491a

File tree

4 files changed

+31
-6
lines changed

4 files changed

+31
-6
lines changed

CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
66
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
77

8-
## Version 0.6.0 - 2024-02-xx
8+
## Version 0.5.1 - 2024-01-31
99

1010
### Fixed
1111

12-
- tbd
12+
- Fix message wrapping for Redis distribution (`kind: ws`)
1313

1414
## Version 0.5.0 - 2024-01-29
1515

src/socket/ws.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,8 @@ class SocketWSServer extends SocketServer {
127127
}
128128

129129
async broadcast({ service, event, data, tenant, contexts, socket, remote }) {
130-
if (!data) {
130+
const eventMessage = !data;
131+
if (eventMessage) {
131132
const message = JSON.parse(event);
132133
data = message.data;
133134
tenant = message.tenant;
@@ -150,7 +151,7 @@ class SocketWSServer extends SocketServer {
150151
}
151152
});
152153
if (clients.length > 0 || remote) {
153-
const message = !data ? event : JSON.stringify({ event, data, tenant, contexts });
154+
const message = eventMessage ? event : JSON.stringify({ event, data, tenant, contexts });
154155
for (const client of clients) {
155156
await client.send(message);
156157
}

test/_env/util/ws.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,13 @@ async function emitEvent(socket, event, data) {
4242
});
4343
}
4444

45-
async function waitForEvent(socket, event) {
45+
async function waitForEvent(socket, event, cb) {
4646
return new Promise((resolve) => {
4747
socket.on("message", (message) => {
4848
const payload = JSON.parse(message);
4949
if (payload.event === event) {
5050
resolve(payload.data);
51+
cb && cb(payload);
5152
}
5253
});
5354
});

test/redis_ws.test.js

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ describe("Redis", () => {
3737
});
3838

3939
test("Redis adapter", async () => {
40-
const waitResultPromise = waitForEvent(socket, "received");
40+
const messages = [];
41+
const waitResultPromise = waitForEvent(socket, "received", (message) => {
42+
messages.push(message);
43+
});
4144
const waitNoResultPromise = waitForNoEvent(socketOtherTenant, "received");
4245
await emitEvent(socket, "message", { text: "test" });
4346
const waitResult = await waitResultPromise;
@@ -53,5 +56,25 @@ describe("Redis", () => {
5356
"websocket/chat",
5457
`{"event":"received","data":{"text":"test","user":"alice"},"tenant":"t1"}`,
5558
);
59+
60+
// Duplicated because Redis mock publishes to same client (not done for real Redis)
61+
expect(messages).toEqual([
62+
{
63+
data: {
64+
text: "test",
65+
user: "alice",
66+
},
67+
event: "received",
68+
tenant: "t1",
69+
},
70+
{
71+
data: {
72+
text: "test",
73+
user: "alice",
74+
},
75+
event: "received",
76+
tenant: "t1",
77+
},
78+
]);
5679
});
5780
});

0 commit comments

Comments
 (0)