summaryrefslogtreecommitdiff
path: root/extension/react-app/src/hooks/vscodeMessenger.ts
diff options
context:
space:
mode:
authorNate Sesti <sestinj@gmail.com>2023-05-31 16:13:01 -0400
committerNate Sesti <sestinj@gmail.com>2023-05-31 16:13:01 -0400
commitb2ddcd0e96aaf7604d197809de7f47dd51072ff2 (patch)
tree6036f665f401d86b13d910f91aadacb7411806e5 /extension/react-app/src/hooks/vscodeMessenger.ts
parent8d59100b3194cc8d122708523226968899efb5e1 (diff)
downloadsncontinue-b2ddcd0e96aaf7604d197809de7f47dd51072ff2.tar.gz
sncontinue-b2ddcd0e96aaf7604d197809de7f47dd51072ff2.tar.bz2
sncontinue-b2ddcd0e96aaf7604d197809de7f47dd51072ff2.zip
checkpoint! protocol reform and it works now
Diffstat (limited to 'extension/react-app/src/hooks/vscodeMessenger.ts')
-rw-r--r--extension/react-app/src/hooks/vscodeMessenger.ts68
1 files changed, 68 insertions, 0 deletions
diff --git a/extension/react-app/src/hooks/vscodeMessenger.ts b/extension/react-app/src/hooks/vscodeMessenger.ts
new file mode 100644
index 00000000..746c4302
--- /dev/null
+++ b/extension/react-app/src/hooks/vscodeMessenger.ts
@@ -0,0 +1,68 @@
+import { postVscMessage } from "../vscode";
+// import { Messenger } from "../../../src/util/messenger";
+import { Messenger } from "./messenger";
+
+export class VscodeMessenger extends Messenger {
+ serverUrl: string;
+
+ constructor(serverUrl: string) {
+ super();
+ this.serverUrl = serverUrl;
+ postVscMessage("websocketForwardingOpen", { url: this.serverUrl });
+ }
+
+ send(messageType: string, data: object) {
+ postVscMessage("websocketForwardingMessage", {
+ message: { messageType, data },
+ url: this.serverUrl,
+ });
+ }
+
+ onMessageType(messageType: string, callback: (data: object) => void): void {
+ window.addEventListener("message", (event: any) => {
+ if (event.data.type === "websocketForwardingMessage") {
+ if (event.data.message.messageType === messageType) {
+ callback(event.data.message.data);
+ }
+ }
+ });
+ }
+
+ onMessage(callback: (messageType: string, data: any) => void): void {
+ window.addEventListener("message", (event: any) => {
+ if (event.data.type === "websocketForwardingMessage") {
+ callback(event.data.message.messageType, event.data.message.data);
+ }
+ });
+ }
+
+ sendAndReceive(messageType: string, data: any): Promise<any> {
+ return new Promise((resolve) => {
+ const handler = (event: any) => {
+ if (event.data.type === "websocketForwardingMessage") {
+ if (event.data.message.messageType === messageType) {
+ window.removeEventListener("message", handler);
+ resolve(event.data.message.data);
+ }
+ }
+ };
+ window.addEventListener("message", handler);
+ this.send(messageType, data);
+ });
+ }
+
+ onOpen(callback: () => void): void {
+ window.addEventListener("message", (event: any) => {
+ if (event.data.type === "websocketForwardingOpen") {
+ callback();
+ }
+ });
+ }
+ onClose(callback: () => void): void {
+ window.addEventListener("message", (event: any) => {
+ if (event.data.type === "websocketForwardingClose") {
+ callback();
+ }
+ });
+ }
+}