Skip to content

Commit f606f3f

Browse files
committed
always call close-event even if manually closed + switch to observablev2
1 parent beca90d commit f606f3f

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

src/y-websocket.js

+10-8
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import * as decoding from 'lib0/decoding'
1212
import * as syncProtocol from 'y-protocols/sync'
1313
import * as authProtocol from 'y-protocols/auth'
1414
import * as awarenessProtocol from 'y-protocols/awareness'
15-
import { Observable } from 'lib0/observable'
15+
import { ObservableV2 } from 'lib0/observable'
1616
import * as math from 'lib0/math'
1717
import * as url from 'lib0/url'
1818
import * as env from 'lib0/environment'
@@ -130,9 +130,11 @@ const readMessage = (provider, buf, emitSynced) => {
130130
*
131131
* @param {WebsocketProvider} provider
132132
* @param {WebSocket} ws
133+
* @param {CloseEvent | null} event
133134
*/
134-
const closeWebsocketConnection = (provider, ws) => {
135+
const closeWebsocketConnection = (provider, ws, event) => {
135136
if (ws === provider.ws) {
137+
provider.emit('connection-close', [event, provider])
136138
provider.ws = null
137139
ws.close()
138140
provider.wsconnecting = false
@@ -189,8 +191,7 @@ const setupWS = (provider) => {
189191
provider.emit('connection-error', [event, provider])
190192
}
191193
websocket.onclose = (event) => {
192-
provider.emit('connection-close', [event, provider])
193-
closeWebsocketConnection(provider, websocket)
194+
closeWebsocketConnection(provider, websocket, event)
194195
}
195196
websocket.onopen = () => {
196197
provider.wsLastMessageReceived = time.getUnixTime()
@@ -249,9 +250,9 @@ const broadcastMessage = (provider, buf) => {
249250
* const doc = new Y.Doc()
250251
* const provider = new WebsocketProvider('http://localhost:1234', 'my-document-name', doc)
251252
*
252-
* @extends {Observable<string>}
253+
* @extends {ObservableV2<{ 'connection-close': (event: CloseEvent | null, provider: WebsocketProvider) => any, 'status': (event: { status: 'connected' | 'disconnected' | 'connecting' }) => any, 'connection-error': (event: Event, provider: WebsocketProvider) => any, 'sync': (state: boolean) => any }>}
253254
*/
254-
export class WebsocketProvider extends Observable {
255+
export class WebsocketProvider extends ObservableV2 {
255256
/**
256257
* @param {string} serverUrl
257258
* @param {string} roomname
@@ -391,7 +392,7 @@ export class WebsocketProvider extends Observable {
391392
) {
392393
// no message received in a long time - not even your own awareness
393394
// updates (which are updated every 15 seconds)
394-
closeWebsocketConnection(this, /** @type {WebSocket} */ (this.ws))
395+
closeWebsocketConnection(this, /** @type {WebSocket} */ (this.ws), null)
395396
}
396397
}, messageReconnectTimeout / 10))
397398
if (connect) {
@@ -415,6 +416,7 @@ export class WebsocketProvider extends Observable {
415416
set synced (state) {
416417
if (this._synced !== state) {
417418
this._synced = state
419+
// @ts-ignore
418420
this.emit('synced', [state])
419421
this.emit('sync', [state])
420422
}
@@ -498,7 +500,7 @@ export class WebsocketProvider extends Observable {
498500
this.shouldConnect = false
499501
this.disconnectBc()
500502
if (this.ws !== null) {
501-
closeWebsocketConnection(this, this.ws)
503+
closeWebsocketConnection(this, this.ws, null)
502504
}
503505
}
504506

0 commit comments

Comments
 (0)