mirror of
https://github.com/tsl0922/ttyd.git
synced 2025-12-22 11:54:19 +01:00
html: handle websocket error
This commit is contained in:
@@ -45,6 +45,7 @@ export class Xterm extends Component<Props> {
|
|||||||
private title: string;
|
private title: string;
|
||||||
private resizeTimeout: number;
|
private resizeTimeout: number;
|
||||||
private backoff: backoff.Backoff;
|
private backoff: backoff.Backoff;
|
||||||
|
private backoffLock = false;
|
||||||
|
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
@@ -58,10 +59,12 @@ export class Xterm extends Component<Props> {
|
|||||||
maxDelay: 10000,
|
maxDelay: 10000,
|
||||||
});
|
});
|
||||||
this.backoff.on('ready', () => {
|
this.backoff.on('ready', () => {
|
||||||
|
this.backoffLock = false;
|
||||||
this.openTerminal();
|
this.openTerminal();
|
||||||
});
|
});
|
||||||
this.backoff.on('backoff', (_, delay: number) => {
|
this.backoff.on('backoff', (_, delay: number) => {
|
||||||
console.log(`[ttyd] will attempt to reconnect websocket in ${delay}ms`);
|
console.log(`[ttyd] will attempt to reconnect websocket in ${delay}ms`);
|
||||||
|
this.backoffLock = true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,6 +125,7 @@ export class Xterm extends Component<Props> {
|
|||||||
socket.onopen = this.onSocketOpen;
|
socket.onopen = this.onSocketOpen;
|
||||||
socket.onmessage = this.onSocketData;
|
socket.onmessage = this.onSocketData;
|
||||||
socket.onclose = this.onSocketClose;
|
socket.onclose = this.onSocketClose;
|
||||||
|
socket.onerror = this.onSocketError;
|
||||||
|
|
||||||
terminal.loadAddon(fitAddon);
|
terminal.loadAddon(fitAddon);
|
||||||
terminal.loadAddon(overlayAddon);
|
terminal.loadAddon(overlayAddon);
|
||||||
@@ -148,10 +152,18 @@ export class Xterm extends Component<Props> {
|
|||||||
window.addEventListener('beforeunload', this.onWindowUnload);
|
window.addEventListener('beforeunload', this.onWindowUnload);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@bind
|
||||||
|
private reconnect() {
|
||||||
|
if (!this.backoffLock) {
|
||||||
|
this.backoff.backoff();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@bind
|
@bind
|
||||||
private onSocketOpen() {
|
private onSocketOpen() {
|
||||||
console.log('[ttyd] Websocket connection opened');
|
console.log('[ttyd] Websocket connection opened');
|
||||||
this.backoff.reset();
|
this.backoff.reset();
|
||||||
|
|
||||||
const { socket, textEncoder, fitAddon } = this;
|
const { socket, textEncoder, fitAddon } = this;
|
||||||
const authToken = window.tty_auth_token;
|
const authToken = window.tty_auth_token;
|
||||||
|
|
||||||
@@ -174,10 +186,15 @@ export class Xterm extends Component<Props> {
|
|||||||
|
|
||||||
// 1000: CLOSE_NORMAL
|
// 1000: CLOSE_NORMAL
|
||||||
if (event.code !== 1000) {
|
if (event.code !== 1000) {
|
||||||
this.backoff.backoff();
|
this.reconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@bind
|
||||||
|
private onSocketError() {
|
||||||
|
this.reconnect();
|
||||||
|
}
|
||||||
|
|
||||||
@bind
|
@bind
|
||||||
private onSocketData(event: MessageEvent) {
|
private onSocketData(event: MessageEvent) {
|
||||||
const { terminal, textDecoder, zmodemAddon } = this;
|
const { terminal, textDecoder, zmodemAddon } = this;
|
||||||
|
|||||||
2
src/index.html
vendored
2
src/index.html
vendored
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user