diff --git a/src/app/page.tsx b/src/app/page.tsx
index 3eee014..3fd1ab6 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,101 +1,88 @@
-import Image from "next/image";
+"use client";
+
+import {
+ toSocket,
+ WebSocketMessageReader,
+ WebSocketMessageWriter,
+} from "vscode-ws-jsonrpc";
+import { useEffect } from "react";
+import dynamic from "next/dynamic";
+import normalizeUrl from "normalize-url";
+import { Skeleton } from "@/components/ui/skeleton";
+
+const DynamicEditor = dynamic(
+ async () => {
+ const monaco = await import("monaco-editor");
+ const { loader, Editor } = await import("@monaco-editor/react");
+
+ loader.config({ monaco });
+
+ return Editor;
+ },
+ { ssr: false }
+);
export default function Home() {
- return (
-
-
-
-
- -
- Get started by editing{" "}
-
- src/app/page.tsx
-
- .
-
- - Save and see your changes instantly.
-
+ useEffect(() => {
+ const url = normalizeUrl("ws://localhost:4594/clangd");
+ const webSocket = new WebSocket(url);
-
-
-
+ webSocket.onopen = async () => {
+ const socket = toSocket(webSocket);
+ const reader = new WebSocketMessageReader(socket);
+ const writer = new WebSocketMessageWriter(socket);
+
+ const { MonacoLanguageClient } = await import("monaco-languageclient");
+ const { ErrorAction, CloseAction } = await import(
+ "vscode-languageclient"
+ );
+
+ const languageClient = new MonacoLanguageClient({
+ name: "C Language Client",
+ clientOptions: {
+ documentSelector: ["c"],
+ errorHandler: {
+ error: () => ({ action: ErrorAction.Continue }),
+ closed: () => ({ action: CloseAction.DoNotRestart }),
+ },
+ },
+ connectionProvider: {
+ get: () => Promise.resolve({ reader, writer }),
+ },
+ });
+
+ languageClient.start();
+ reader.onClose(() => languageClient.stop());
+ };
+
+ webSocket.onerror = (event) => {
+ console.error("WebSocket error observed:", event);
+ };
+
+ webSocket.onclose = (event) => {
+ console.log("WebSocket closed:", event);
+ };
+
+ return () => {
+ webSocket.close();
+ };
+ }, []);
+
+ return (
+
+ {
+ markers.forEach((marker) =>
+ console.log("onValidate:", marker.message)
+ );
+ }}
+ options={{ automaticLayout: true }}
+ loading={}
+ />
);
}