Move auto-reconnect logic into Client

This commit is contained in:
Simon Ser 2021-01-22 18:44:06 +01:00
parent 41cd2153cf
commit 4e1f06b960
2 changed files with 34 additions and 49 deletions

View file

@ -12,6 +12,8 @@ const permanentCaps = [
"server-time",
];
const RECONNECT_DELAY_SEC = 10;
export default class Client extends EventTarget {
static Status = {
DISCONNECTED: "disconnected",
@ -21,8 +23,11 @@ export default class Client extends EventTarget {
};
status = Client.Status.DISCONNECTED;
ws = null;
nick = null;
availableCaps = {};
enabledCaps = {};
ws = null;
params = {
url: null,
username: null,
@ -31,9 +36,9 @@ export default class Client extends EventTarget {
pass: null,
saslPlain: null,
};
availableCaps = {};
enabledCaps = {};
batches = new Map();
autoReconnect = true;
reconnectTimeoutID = null;
constructor(params) {
super();
@ -44,7 +49,10 @@ export default class Client extends EventTarget {
}
reconnect() {
var autoReconnect = this.autoReconnect;
this.disconnect();
this.autoReconnect = autoReconnect;
this.setStatus(Client.Status.CONNECTING);
try {
@ -63,6 +71,14 @@ export default class Client extends EventTarget {
console.log("Connection closed");
this.ws = null;
this.setStatus(Client.Status.DISCONNECTED);
if (this.autoReconnect) {
console.info("Reconnecting to server in " + RECONNECT_DELAY_SEC + " seconds");
clearTimeout(this.reconnectTimeoutID);
this.reconnectTimeoutID = setTimeout(() => {
this.reconnect();
}, RECONNECT_DELAY_SEC * 1000);
}
});
this.ws.addEventListener("error", () => {
@ -71,6 +87,11 @@ export default class Client extends EventTarget {
}
disconnect() {
this.autoReconnect = false;
clearTimeout(this.reconnectTimeoutID);
this.reconnectTimeoutID = null;
if (this.ws) {
this.ws.close(1000);
}