MCPcopy Create free account
hub / github.com/bytebase/bytebase / connectWebSocket

Function connectWebSocket

frontend/src/react/components/monaco/lsp-client.ts:130–194  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

128};
129
130const connectWebSocket = () => {
131 if (conn.ws) {
132 return conn.ws;
133 }
134
135 const connect = (
136 resolve: (value: WebSocket | PromiseLike<WebSocket>) => void,
137 reject: (reason?: unknown) => void
138 ) => {
139 const ws = new WebSocket(conn.url);
140 const retries = conn.retries++;
141 emit();
142
143 switch (conn.state) {
144 case "closed":
145 reject("Connection is closed");
146 return;
147 case "ready":
148 case "reconnecting":
149 setConnState({ state: "reconnecting" });
150 break;
151 case "initial":
152 break;
153 }
154
155 sleep(progressiveDelay(retries)).then(() => {
156 const handleError = (code: number, reason: string) => {
157 if (conn.state === "closed" || conn.state === "ready") {
158 return;
159 }
160 if (conn.retries >= MAX_RETRIES) {
161 setConnState({ state: "closed" });
162 reject(
163 `${messages.disconnected()}: max retries exceeded (${MAX_RETRIES}). code=${code} reason="${reason}"`
164 );
165 return;
166 }
167 connect(resolve, reject);
168 };
169
170 const timer = setTimeout(() => {
171 handleError(-1, "timeout");
172 }, WEBSOCKET_TIMEOUT);
173
174 ws.addEventListener("open", () => {
175 clearTimeout(timer);
176 if (conn.state === "ready" || conn.state === "closed") {
177 return;
178 }
179 setConnState({ state: "ready", retries: 0 });
180 useHeartbeat(ws);
181 resolve(ws);
182 });
183
184 ws.addEventListener("close", (event) => {
185 clearTimeout(timer);
186 handleError(event.code, event.reason);
187 });

Callers 1

createLanguageClientFunction · 0.85

Calls 1

setConnStateFunction · 0.85

Tested by

no test coverage detected