Selaa lähdekoodia

Fixed more issues with socket not removing callbacks and backend being spammed.

KrisVos130 8 vuotta sitten
vanhempi
commit
4888a95451
3 muutettua tiedostoa jossa 49 lisäystä ja 12 poistoa
  1. 3 3
      frontend/App.vue
  2. 45 9
      frontend/io.js
  3. 1 0
      frontend/main.js

+ 3 - 3
frontend/App.vue

@@ -68,13 +68,13 @@
 				_this.username = username;
 				_this.userId = userId;
 			});
-			io.onConnect(() => {
+			io.onConnect(true, () => {
 				_this.socketConnected = true;
 			});
-			io.onConnectError(() => {
+			io.onConnectError(true, () => {
 				_this.socketConnected = false;
 			});
-			io.onDisconnect(() => {
+			io.onDisconnect(true, () => {
 				_this.socketConnected = false;
 			});
 			lofig.get('serverDomain', res => {

+ 45 - 9
frontend/io.js

@@ -1,28 +1,50 @@
 let callbacks = [];
+let callbacksPersist = [];
 let onConnectCallbacks = [];
 let onDisconnectCallbacks = [];
 let onConnectErrorCallbacks = [];
+let onConnectCallbacksPersist = [];
+let onDisconnectCallbacksPersist = [];
+let onConnectErrorCallbacksPersist = [];
 
 export default {
 
 	ready: false,
 	socket: null,
 
-	getSocket: function (cb) {
-		if (this.ready) cb(this.socket);
-		else callbacks.push(cb);
+	getSocket: function () {
+		if (arguments[0] === true) {
+			if (this.ready) arguments[1](this.socket);
+			else callbacksPersist.push(arguments[1]);
+		} else {
+			if (this.ready) arguments[0](this.socket);
+			else callbacks.push(arguments[0]);
+		}
 	},
 
-	onConnect: (cb) => {
-		onConnectCallbacks.push(cb);
+	onConnect: function() {
+		if (arguments[0] === true) {
+			onConnectCallbacksPersist.push(arguments[1]);
+		} else onConnectCallbacks.push(arguments[0]);
 	},
 
-	onDisconnect: (cb) => {
-		onDisconnectCallbacks.push(cb);
+	onDisconnect: function() {
+		if (arguments[0] === true) {
+			onDisconnectCallbacksPersist.push(arguments[1]);
+		} else onDisconnectCallbacks.push(arguments[0]);
 	},
 
-	onConnectError: (cb) => {
-		onConnectErrorCallbacks.push(cb);
+	onConnectError: function() {
+		if (arguments[0] === true) {
+			onConnectErrorCallbacksPersist.push(arguments[1]);
+		} else onConnectErrorCallbacks.push(arguments[0]);
+	},
+
+	clear: () => {
+		onConnectCallbacks = [];
+		onDisconnectCallbacks = [];
+		onConnectErrorCallbacks = [];
+		callbacks = [];
 	},
 
 	removeAllListeners: function () {
@@ -39,21 +61,35 @@ export default {
 			onConnectCallbacks.forEach((cb) => {
 				cb();
 			});
+			onConnectCallbacksPersist.forEach((cb) => {
+				cb();
+			});
 		});
 		this.socket.on('disconnect', () => {
 			onDisconnectCallbacks.forEach((cb) => {
 				cb();
 			});
+			onDisconnectCallbacksPersist.forEach((cb) => {
+				cb();
+			});
 		});
 		this.socket.on('connect_error', () => {
 			onConnectErrorCallbacks.forEach((cb) => {
 				cb();
 			});
+			onConnectErrorCallbacksPersist.forEach((cb) => {
+				cb();
+			});
 		});
 		this.ready = true;
 		callbacks.forEach(callback => {
 			callback(this.socket);
 		});
+
+		callbacksPersist.forEach(callback => {
+			callback(this.socket);
+		});
 		callbacks = [];
+		callbacksPersist = [];
 	}
 }

+ 1 - 0
frontend/main.js

@@ -42,6 +42,7 @@ router.beforeEach(transition => {
 	}
 	if (window.socket) {
 		io.removeAllListeners();
+		io.clear();
 	}
 	if (transition.to.loginRequired || transition.to.adminRequired) {
 		auth.getStatus((authenticated, role) => {