Explorar o código

Reconnect on rejoin room

RobinLinus %!s(int64=6) %!d(string=hai) anos
pai
achega
3601ace829
Modificáronse 1 ficheiros con 15 adicións e 3 borrados
  1. 15 3
      client/scripts/network.js

+ 15 - 3
client/scripts/network.js

@@ -4,6 +4,8 @@ class ServerConnection {
         this._connect();
         Events.on('beforeunload', e => this._disconnect(), false);
         Events.on('pagehide', e => this._disconnect(), false);
+        document.addEventListener('visibilitychange', e => this._onVisibilityChange());
+
     }
 
     _connect() {
@@ -71,6 +73,11 @@ class ServerConnection {
         clearTimeout(this._reconnectTimer);
         this._reconnectTimer = setTimeout(_ => this._connect(), 5000);
     }
+
+    _onVisibilityChange() {
+        if (document.hidden) return;
+        this._connect();
+    }
 }
 
 class Peer {
@@ -296,8 +303,13 @@ class RTCPeer extends Peer {
     _onConnectionStateChange(e) {
         console.log('RTC: state changed:', this._peer.connectionState);
         switch (this._peer.connectionState) {
-            case 'disconnected': this._onChannelClosed();
-            break;
+            case 'disconnected':
+                this._onChannelClosed();
+                break;
+            case 'failed':
+                this._peer = null;
+                this._onChannelClosed();
+                break;
         }
     }
 
@@ -312,7 +324,7 @@ class RTCPeer extends Peer {
     refresh() {
         // check if channel open. otherwise create one
         if (this._peer && this._channel && this._channel.readyState !== 'open') return;
-        this._createChannel(this._peerId, this._isCaller);
+        this._start(this._peerId, this._isCaller);
     }
 }