+ // Initialize connection
+ this.conn = new WebSocket(this.connexionString);
+ this.conn.onopen = () => {
+ this.reconnectTimeout = 250;
+ connectAndPoll();
+ };
+ 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;
+ },
+ cleanBeforeDestroy: function() {
+ document.removeEventListener('visibilitychange', this.visibilityChange);
+ window.removeEventListener('focus', this.onFocus);
+ window.removeEventListener('blur', this.onBlur);
+ window.removeEventListener("beforeunload", this.cleanBeforeDestroy);
+ clearTimeout(this.reopenTimeout);
+ this.send("disconnect");
+ this.conn = null;
+ },
+ getRandomnessClass: function(pc) {
+ const opts = pc.options;
+ if (opts.randomness === undefined && opts.random === undefined)
+ return {};
+ if (opts.randomness !== undefined)
+ return { ["random-" + opts.randomness]: true };
+ return { ["random-" + (opts.random ? 2 : 0)]: true };
+ },
+ anonymousCount: function() {
+ let count = 0;
+ Object.values(this.people).forEach(p => {
+ // Do not cound people who did not send their identity yet:
+ count += (!p.name && p.id === 0) ? 1 : 0;
+ });
+ return count;