mirror of
https://github.com/massbug/judge4c.git
synced 2025-05-18 07:16:34 +00:00
refactor(problem-editor): modify LSP connection logic to manage WebSocket state
This commit is contained in:
parent
1796d21a09
commit
09a8276d39
@ -32,7 +32,7 @@ export function CodeEditor() {
|
|||||||
hydrated,
|
hydrated,
|
||||||
editor,
|
editor,
|
||||||
setEditor,
|
setEditor,
|
||||||
setMonacoLanguageClient,
|
setWebSocket,
|
||||||
currentLang,
|
currentLang,
|
||||||
currentPath,
|
currentPath,
|
||||||
currentTheme,
|
currentTheme,
|
||||||
@ -52,19 +52,19 @@ export function CodeEditor() {
|
|||||||
if (monacoLanguageClientRef.current) {
|
if (monacoLanguageClientRef.current) {
|
||||||
monacoLanguageClientRef.current.stop();
|
monacoLanguageClientRef.current.stop();
|
||||||
monacoLanguageClientRef.current = null;
|
monacoLanguageClientRef.current = null;
|
||||||
setMonacoLanguageClient(null);
|
setWebSocket(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!currentEditorLanguageConfig || !currentLanguageServerConfig) return;
|
if (!currentEditorLanguageConfig || !currentLanguageServerConfig) return;
|
||||||
|
|
||||||
// Create a new language client
|
// Create a new language client
|
||||||
try {
|
try {
|
||||||
const monacoLanguageClient = await connectToLanguageServer(
|
const { client: monacoLanguageClient, webSocket } = await connectToLanguageServer(
|
||||||
currentEditorLanguageConfig,
|
currentEditorLanguageConfig,
|
||||||
currentLanguageServerConfig
|
currentLanguageServerConfig
|
||||||
);
|
);
|
||||||
monacoLanguageClientRef.current = monacoLanguageClient;
|
monacoLanguageClientRef.current = monacoLanguageClient;
|
||||||
setMonacoLanguageClient(monacoLanguageClient);
|
setWebSocket(webSocket);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Failed to connect to LSP:", error);
|
console.error("Failed to connect to LSP:", error);
|
||||||
}
|
}
|
||||||
@ -73,7 +73,7 @@ export function CodeEditor() {
|
|||||||
currentLang,
|
currentLang,
|
||||||
currentLanguageServerConfig,
|
currentLanguageServerConfig,
|
||||||
editor,
|
editor,
|
||||||
setMonacoLanguageClient,
|
setWebSocket,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Reconnect to the LSP whenever language or lspConfig changes
|
// Reconnect to the LSP whenever language or lspConfig changes
|
||||||
@ -87,10 +87,10 @@ export function CodeEditor() {
|
|||||||
if (monacoLanguageClientRef.current) {
|
if (monacoLanguageClientRef.current) {
|
||||||
monacoLanguageClientRef.current.stop();
|
monacoLanguageClientRef.current.stop();
|
||||||
monacoLanguageClientRef.current = null;
|
monacoLanguageClientRef.current = null;
|
||||||
setMonacoLanguageClient(null);
|
setWebSocket(null);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}, [setMonacoLanguageClient]);
|
}, [setWebSocket]);
|
||||||
|
|
||||||
const handleEditorWillMount = useCallback((monaco: Monaco) => {
|
const handleEditorWillMount = useCallback((monaco: Monaco) => {
|
||||||
shikiToMonaco(highlighter, monaco);
|
shikiToMonaco(highlighter, monaco);
|
||||||
|
Loading…
Reference in New Issue
Block a user