Skip to content
Snippets Groups Projects
Commit ccc877b1 authored by Nicolas Pope's avatar Nicolas Pope
Browse files

Fix duplicate intervals

parent 92dd588e
No related branches found
No related tags found
1 merge request!2Generate statistics every second
Pipeline #57410 passed
...@@ -119,13 +119,14 @@ export class Peer { ...@@ -119,13 +119,14 @@ export class Peer {
} }
const close = () => { const close = () => {
this.emit("disconnect", this);
this.status = kDisconnected; this.status = kDisconnected;
Peer.removePeer(this); Peer.removePeer(this);
this.emit("disconnect", this);
} }
const error = (e) => { const error = (e) => {
console.error("Socket error: ", e); console.error("Socket error: ", e);
Peer.removePeer(this);
this.sock.close(); this.sock.close();
this.status = kDisconnected; this.status = kDisconnected;
} }
...@@ -346,11 +347,15 @@ export class Peer { ...@@ -346,11 +347,15 @@ export class Peer {
/** /**
* Closes the socket * Closes the socket
*/ */
close() { async close() {
if (this.status === kDisconnected) return;
return new Promise(resolve => {
this.on("disconnect", resolve);
if(!isw3c(this.sock)){ if(!isw3c(this.sock)){
this.sock.close(); this.sock.close();
} }
this.status = kDisconnected; });
} }
getUuid(): string { getUuid(): string {
...@@ -361,7 +366,7 @@ export class Peer { ...@@ -361,7 +366,7 @@ export class Peer {
static addPeer(p: Peer) { static addPeer(p: Peer) {
Peer.peers.set(p.string_id, p); Peer.peers.set(p.string_id, p);
if (Peer.peers.size === 1) { if (Peer.peers.size === 1 && !Peer.interval) {
Peer.interval = setInterval(() => { Peer.interval = setInterval(() => {
for (const [id, peer] of Peer.peers) { for (const [id, peer] of Peer.peers) {
peer.updateStatistics(); peer.updateStatistics();
......
...@@ -9,6 +9,7 @@ describe("Peer class", () => { ...@@ -9,6 +9,7 @@ describe("Peer class", () => {
let clientPeer: Peer; let clientPeer: Peer;
let serverPeer: Peer; let serverPeer: Peer;
let wss: WebSocket.Server; let wss: WebSocket.Server;
let conn: WebSocket;
beforeEach(async () => { beforeEach(async () => {
return new Promise((resolve) => { return new Promise((resolve) => {
...@@ -18,7 +19,7 @@ describe("Peer class", () => { ...@@ -18,7 +19,7 @@ describe("Peer class", () => {
serverPeer = new Peer(ws, true); serverPeer = new Peer(ws, true);
}); });
const conn = new WebSocket('ws://127.0.0.1:9003'); conn = new WebSocket('ws://127.0.0.1:9003');
clientPeer = new Peer(conn); clientPeer = new Peer(conn);
clientPeer.on('connect', () => { clientPeer.on('connect', () => {
resolve(true); resolve(true);
...@@ -27,9 +28,9 @@ describe("Peer class", () => { ...@@ -27,9 +28,9 @@ describe("Peer class", () => {
}); });
afterEach(async () => { afterEach(async () => {
await clientPeer.close();
await serverPeer.close();
return new Promise((resolve) => { return new Promise((resolve) => {
clientPeer.close();
serverPeer.close();
wss.close(() => { wss.close(() => {
resolve(true); resolve(true);
}); });
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment