summaryrefslogtreecommitdiff
path: root/extension/src/debugPanel.ts
diff options
context:
space:
mode:
authorNate Sesti <sestinj@gmail.com>2023-06-02 14:09:50 -0400
committerNate Sesti <sestinj@gmail.com>2023-06-02 14:09:50 -0400
commite627b99a89d346d7ad88947182d110c4aeb3272f (patch)
tree09f0bd1cbfdec05615870d01a8cedeb7eb4afc51 /extension/src/debugPanel.ts
parent22c420cbf26293e145def3e90e7132b4a337a5a5 (diff)
parenta6a66f8a8b42eca861b05d6e7ccc0d0c2cfc8706 (diff)
downloadsncontinue-e627b99a89d346d7ad88947182d110c4aeb3272f.tar.gz
sncontinue-e627b99a89d346d7ad88947182d110c4aeb3272f.tar.bz2
sncontinue-e627b99a89d346d7ad88947182d110c4aeb3272f.zip
Merge branch 'main' into docs
Diffstat (limited to 'extension/src/debugPanel.ts')
-rw-r--r--extension/src/debugPanel.ts111
1 files changed, 111 insertions, 0 deletions
diff --git a/extension/src/debugPanel.ts b/extension/src/debugPanel.ts
index 66829836..87c33da1 100644
--- a/extension/src/debugPanel.ts
+++ b/extension/src/debugPanel.ts
@@ -16,6 +16,7 @@ import {
import { sendTelemetryEvent, TelemetryEvent } from "./telemetry";
import { RangeInFile, SerializedDebugContext } from "./client";
import { addFileSystemToDebugContext } from "./util/util";
+const WebSocket = require("ws");
class StreamManager {
private _fullText: string = "";
@@ -87,6 +88,49 @@ class StreamManager {
}
}
+let websocketConnections: { [url: string]: WebsocketConnection | undefined } =
+ {};
+
+class WebsocketConnection {
+ private _ws: WebSocket;
+ private _onMessage: (message: string) => void;
+ private _onOpen: () => void;
+ private _onClose: () => void;
+
+ constructor(
+ url: string,
+ onMessage: (message: string) => void,
+ onOpen: () => void,
+ onClose: () => void
+ ) {
+ this._ws = new WebSocket(url);
+ this._onMessage = onMessage;
+ this._onOpen = onOpen;
+ this._onClose = onClose;
+
+ this._ws.addEventListener("message", (event) => {
+ this._onMessage(event.data);
+ });
+ this._ws.addEventListener("close", () => {
+ this._onClose();
+ });
+ this._ws.addEventListener("open", () => {
+ this._onOpen();
+ });
+ }
+
+ public send(message: string) {
+ if (typeof message !== "string") {
+ message = JSON.stringify(message);
+ }
+ this._ws.send(message);
+ }
+
+ public close() {
+ this._ws.close();
+ }
+}
+
let streamManager = new StreamManager();
export let debugPanelWebview: vscode.Webview | undefined;
@@ -147,6 +191,39 @@ export function setupDebugPanel(
});
});
+ async function connectWebsocket(url: string) {
+ return new Promise((resolve, reject) => {
+ const onMessage = (message: any) => {
+ panel.webview.postMessage({
+ type: "websocketForwardingMessage",
+ url,
+ data: message,
+ });
+ };
+ const onOpen = () => {
+ panel.webview.postMessage({
+ type: "websocketForwardingOpen",
+ url,
+ });
+ resolve(null);
+ };
+ const onClose = () => {
+ websocketConnections[url] = undefined;
+ panel.webview.postMessage({
+ type: "websocketForwardingClose",
+ url,
+ });
+ };
+ const connection = new WebsocketConnection(
+ url,
+ onMessage,
+ onOpen,
+ onClose
+ );
+ websocketConnections[url] = connection;
+ });
+ }
+
panel.webview.onDidReceiveMessage(async (data) => {
switch (data.type) {
case "onLoad": {
@@ -156,6 +233,40 @@ export function setupDebugPanel(
apiUrl: getContinueServerUrl(),
sessionId,
});
+
+ // // Listen for changes to server URL in settings
+ // vscode.workspace.onDidChangeConfiguration((event) => {
+ // if (event.affectsConfiguration("continue.serverUrl")) {
+ // debugPanelWebview?.postMessage({
+ // type: "onLoad",
+ // vscMachineId: vscode.env.machineId,
+ // apiUrl: getContinueServerUrl(),
+ // sessionId,
+ // });
+ // }
+ // });
+
+ break;
+ }
+
+ case "websocketForwardingOpen": {
+ let url = data.url;
+ if (typeof websocketConnections[url] === "undefined") {
+ await connectWebsocket(url);
+ }
+ break;
+ }
+ case "websocketForwardingMessage": {
+ let url = data.url;
+ let connection = websocketConnections[url];
+ if (typeof connection === "undefined") {
+ await connectWebsocket(url);
+ }
+ connection = websocketConnections[url];
+ if (typeof connection === "undefined") {
+ throw new Error("Failed to connect websocket in VS Code Extension");
+ }
+ connection.send(data.message);
break;
}
case "listTenThings": {