Skip to content

Commit 5a2eb92

Browse files
committed
Return socket
1 parent fd2bcb9 commit 5a2eb92

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

src/client.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ async function initAddons(term: Terminal): Promise<void> {
8585
term.unicode.activeVersion = '11';
8686
}
8787

88-
async function initiateRemoteTerminal(terminal: Terminal) {
88+
async function initiateRemoteTerminal(terminal: Terminal): Promise<void | ReconnectingWebSocket> {
8989
updateTerminalSize(terminal);
9090

9191
const ReconnectingWebSocket = (await import("reconnecting-websocket")).default;
@@ -110,7 +110,8 @@ async function initiateRemoteTerminal(terminal: Terminal) {
110110
socketURL += serverProcessId;
111111

112112
await initiateRemoteCommunicationChannelSocket(protocol);
113-
let socket = new ReconnectingWebSocket(socketURL, [], webSocketSettings);
113+
114+
const socket = new ReconnectingWebSocket(socketURL, [], webSocketSettings);
114115
socket.onopen = async () => {
115116
outputDialog.close();
116117
(document.querySelector(".xterm-helper-textarea") as HTMLTextAreaElement).focus();
@@ -121,9 +122,11 @@ async function initiateRemoteTerminal(terminal: Terminal) {
121122
socket.onclose = handleDisconnected;
122123
//@ts-ignore
123124
socket.onerror = handleDisconnected;
125+
126+
return socket;
124127
}
125128

126-
async function createTerminal(element: HTMLElement, toDispose: DisposableCollection): Promise<void> {
129+
async function createTerminal(element: HTMLElement, toDispose: DisposableCollection): Promise<{ terminal: Terminal; socket: ReconnectingWebSocket }> {
127130
// Clean terminal
128131
while (element.children.length) {
129132
element.removeChild(element.children[0]);
@@ -185,10 +188,16 @@ async function createTerminal(element: HTMLElement, toDispose: DisposableCollect
185188
updateTerminalSize(term);
186189
term.focus();
187190

188-
await initiateRemoteTerminal(term);
191+
const terminalSocket = await initiateRemoteTerminal(term);
192+
193+
if (!terminalSocket) {
194+
throw new Error("Couldn't set up a remote connection to the terminal process");
195+
}
189196

190197
const debouncedUpdateTerminalSize = debounce(() => updateTerminalSize(term), 200, true);
191198
window.onresize = () => debouncedUpdateTerminalSize();
199+
200+
return { terminal: term, socket: terminalSocket };
192201
}
193202

194203
const reloadButton = document.createElement("button");
@@ -291,8 +300,7 @@ window.gitpod.ideService = {
291300
})
292301
const terminalContainer = document.getElementById("terminal-container");
293302
if (terminalContainer && !terminalContainer.classList.contains("init")) {
294-
createTerminal(terminalContainer, toDispose);
295-
terminalContainer.classList.add("init");
303+
createTerminal(terminalContainer, toDispose).then(() => terminalContainer.classList.add("init"));
296304
}
297305
return toDispose;
298306
}

0 commit comments

Comments
 (0)