X-Git-Url: https://git.auder.net/?p=vchess.git;a=blobdiff_plain;f=client%2Fsrc%2Fviews%2FGame.vue;h=1071ece83f0f9fce229bcddd8801fb5ece0e5573;hp=c3f211984e3b0b649e8cff54dac618ba1cee4ada;hb=bae751bc6bc548791772c3ff5883a03deeb77264;hpb=16d06164d56332bd00fb22acc5b2b2997b942d73 diff --git a/client/src/views/Game.vue b/client/src/views/Game.vue index c3f21198..1071ece8 100644 --- a/client/src/views/Game.vue +++ b/client/src/views/Game.vue @@ -236,8 +236,7 @@ export default { // If newmove got no pingback, send again: opponentGotMove: false, connexionString: "", - reopenTimeout: 0, - reconnectTimeout: 0, + socketCloseListener: 0, // Incomplete info games: show move played moveNotation: "", // Intervals from setInterval(): @@ -290,13 +289,14 @@ export default { }, methods: { cleanBeforeDestroy: function() { + clearInterval(this.socketCloseListener); document.removeEventListener('visibilitychange', this.visibilityChange); window.removeEventListener('focus', this.onFocus); window.removeEventListener('blur', this.onBlur); if (!!this.askLastate) clearInterval(this.askLastate); if (!!this.retrySendmove) clearInterval(this.retrySendmove); if (!!this.clockUpdate) clearInterval(this.clockUpdate); - clearTimeout(this.reopenTimeout); + this.conn.removeEventListener("message", this.socketMessageListener); this.send("disconnect"); this.conn = null; }, @@ -409,41 +409,30 @@ export default { "&page=" + // Discard potential "/?next=[...]" for page indication: encodeURIComponent(this.$route.path.match(/\/game\/[a-zA-Z0-9]+/)[0]); - openConnection(); - }, - openConnection: function() { this.conn = new WebSocket(this.connexionString); - const onOpen = () => { - this.reconnectTimeout = 250; - const oppSid = this.getOppsid(); - if (!!oppSid) this.requestLastate(oppSid); //in case of - }; - this.conn.onopen = onOpen; - this.conn.onmessage = this.socketMessageListener; - const closeConnection = () => { - this.reopenTimeout = setTimeout( - () => { - this.openConnection(); - this.reconnectTimeout = Math.min(2*this.reconnectTimeout, 30000); - }, - this.reconnectTimeout - ); - }; - this.conn.onerror = closeConnection; - this.conn.onclose = closeConnection; + this.conn.addEventListener("message", this.socketMessageListener); + this.socketCloseListener = setInterval( + () => { + if (this.conn.readyState == 3) { + this.conn.removeEventListener( + "message", this.socketMessageListener); + this.conn = new WebSocket(this.connexionString); + this.conn.addEventListener("message", this.socketMessageListener); + const oppSid = this.getOppsid(); + if (!!oppSid) this.requestLastate(oppSid); //in case of + } + }, + 1000 + ); // Socket init required before loading remote game: const socketInit = callback => { if (this.conn.readyState == 1) // 1 == OPEN state callback(); - else { + else // Socket not ready yet (initial loading) // NOTE: first arg is Websocket object, unused here: - this.conn.onopen = () => { - onOpen(); - callback(); - }; - } + this.conn.onopen = () => callback(); }; this.fetchGame((game) => { if (!!game) {