// 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():
},
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;
},
"&page=" +
// Discard potential "/?next=[...]" for page indication:
encodeURIComponent(this.$route.path.match(/\/game\/[a-zA-Z0-9]+/)[0]);
- this.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) {