Skip to content

Commit 78acfa4

Browse files
authored
feat(websocket): add ability to remove listener (tauri-apps#2027)
1 parent 0b3b3a2 commit 78acfa4

File tree

3 files changed

+16
-6
lines changed

3 files changed

+16
-6
lines changed

.changes/cleanup-fn-websocket.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
websocket-js: minor
3+
websocket: minor
4+
---
5+
6+
`addListener` now returns a cleanup function instead of `void` to remove the listener.

plugins/websocket/api-iife.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

plugins/websocket/guest-js/index.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ export type Message =
5858

5959
export default class WebSocket {
6060
id: number
61-
private readonly listeners: Array<(arg: Message) => void>
61+
private readonly listeners: Set<(arg: Message) => void>
6262

63-
constructor(id: number, listeners: Array<(arg: Message) => void>) {
63+
constructor(id: number, listeners: Set<(arg: Message) => void>) {
6464
this.id = id
6565
this.listeners = listeners
6666
}
@@ -69,7 +69,7 @@ export default class WebSocket {
6969
url: string,
7070
config?: ConnectionConfig
7171
): Promise<WebSocket> {
72-
const listeners: Array<(arg: Message) => void> = []
72+
const listeners: Set<(arg: Message) => void> = new Set()
7373

7474
const onMessage = new Channel<Message>()
7575
onMessage.onmessage = (message: Message): void => {
@@ -89,8 +89,12 @@ export default class WebSocket {
8989
}).then((id) => new WebSocket(id, listeners))
9090
}
9191

92-
addListener(cb: (arg: Message) => void): void {
93-
this.listeners.push(cb)
92+
addListener(cb: (arg: Message) => void): () => void {
93+
this.listeners.add(cb)
94+
95+
return () => {
96+
this.listeners.delete(cb)
97+
}
9498
}
9599

96100
async send(message: Message | string | number[]): Promise<void> {

0 commit comments

Comments
 (0)