Move auto-reconnect logic into Client
This commit is contained in:
parent
41cd2153cf
commit
4e1f06b960
2 changed files with 34 additions and 49 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue