experiment with json rpc on client
This commit is contained in:
+28
-14
@@ -1,8 +1,7 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { useState } from 'react';
|
import { useState, useEffect } from 'react';
|
||||||
import { MathJaxContext } from "better-react-mathjax";
|
import { MathJaxContext } from "better-react-mathjax";
|
||||||
|
import * as rpc from 'vscode-ws-jsonrpc';
|
||||||
import useWebSocket from 'react-use-websocket';
|
|
||||||
|
|
||||||
import '@fontsource/roboto/300.css';
|
import '@fontsource/roboto/300.css';
|
||||||
import '@fontsource/roboto/400.css';
|
import '@fontsource/roboto/400.css';
|
||||||
@@ -14,6 +13,7 @@ import { AppBar, CssBaseline, Toolbar, Typography } from '@mui/material';
|
|||||||
import Welcome from './components/Welcome';
|
import Welcome from './components/Welcome';
|
||||||
import Level from './components/Level';
|
import Level from './components/Level';
|
||||||
import GoodBye from './components/GoodBye';
|
import GoodBye from './components/GoodBye';
|
||||||
|
import useWebSocket from 'react-use-websocket';
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
const [title, setTitle] = useState("")
|
const [title, setTitle] = useState("")
|
||||||
@@ -22,9 +22,23 @@ function App() {
|
|||||||
const [nbLevels, setNbLevels] = useState(0)
|
const [nbLevels, setNbLevels] = useState(0)
|
||||||
const [curLevel, setCurLevel] = useState(0)
|
const [curLevel, setCurLevel] = useState(0)
|
||||||
const [finished, setFinished] = useState(false)
|
const [finished, setFinished] = useState(false)
|
||||||
|
const [rpcConnection, setRpcConnection] = useState(null)
|
||||||
|
|
||||||
const socketUrl = 'ws://' + window.location.host + '/websocket/'
|
const socketUrl = 'ws://' + window.location.host + '/websocket/'
|
||||||
const { sendJsonMessage, lastMessage, lastJsonMessage } = useWebSocket(socketUrl)
|
|
||||||
|
const { sendJsonMessage, getWebSocket } = useWebSocket(socketUrl, {
|
||||||
|
onOpen: function (ev) {
|
||||||
|
const logger = new rpc.ConsoleLogger();
|
||||||
|
const socket = rpc.toSocket(ev.target as WebSocket);
|
||||||
|
let rpcConnection = rpc.createWebSocketConnection(socket, logger)
|
||||||
|
setRpcConnection(rpcConnection);
|
||||||
|
rpcConnection.listen();
|
||||||
|
rpcConnection.onNotification("Hello!", () => {
|
||||||
|
console.log("Yes"); // This prints Hello World
|
||||||
|
});
|
||||||
|
rpcConnection.sendNotification("Hello!", 'Hello World');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
const mathJaxConfig = {
|
const mathJaxConfig = {
|
||||||
loader: {
|
loader: {
|
||||||
@@ -41,15 +55,15 @@ function App() {
|
|||||||
function startGame() {
|
function startGame() {
|
||||||
setCurLevel(1)
|
setCurLevel(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
let mainComponent;
|
// let mainComponent;
|
||||||
if (finished) {
|
// if (finished) {
|
||||||
mainComponent = <GoodBye message={conclusion} />
|
// mainComponent = <GoodBye message={conclusion} />
|
||||||
} else if (curLevel > 0) {
|
// } else if (curLevel > 0) {
|
||||||
mainComponent = <Level sendJsonMessage={sendJsonMessage} lastMessage={lastMessage} lastJsonMessage={lastJsonMessage} nbLevels={nbLevels} level={curLevel} setCurLevel={setCurLevel} setLevelTitle={setLevelTitle} setFinished={setFinished}/>
|
// mainComponent = <Level sendJsonMessage={sendJsonMessage} lastMessage={lastMessage} lastJsonMessage={lastJsonMessage} nbLevels={nbLevels} level={curLevel} setCurLevel={setCurLevel} setLevelTitle={setLevelTitle} setFinished={setFinished}/>
|
||||||
} else {
|
// } else {
|
||||||
mainComponent = <Welcome sendJsonMessage={sendJsonMessage} lastMessage={lastMessage} lastJsonMessage={lastJsonMessage} setNbLevels={setNbLevels} setTitle={setTitle} startGame={startGame} setConclusion={setConclusion}/>
|
// mainComponent = <Welcome sendJsonMessage={sendJsonMessage} lastMessage={lastMessage} lastJsonMessage={lastJsonMessage} setNbLevels={setNbLevels} setTitle={setTitle} startGame={startGame} setConclusion={setConclusion}/>
|
||||||
}
|
// }
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="App">
|
<div className="App">
|
||||||
@@ -65,7 +79,7 @@ function App() {
|
|||||||
</Typography>
|
</Typography>
|
||||||
</Toolbar>
|
</Toolbar>
|
||||||
</AppBar>
|
</AppBar>
|
||||||
{mainComponent}
|
{/* {mainComponent} */}
|
||||||
</MathJaxContext>
|
</MathJaxContext>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
Generated
+34
@@ -18,6 +18,7 @@
|
|||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-markdown": "^8.0.3",
|
"react-markdown": "^8.0.3",
|
||||||
"react-use-websocket": "^4.2.0",
|
"react-use-websocket": "^4.2.0",
|
||||||
|
"vscode-ws-jsonrpc": "^2.0.0",
|
||||||
"ws": "^8.9.0"
|
"ws": "^8.9.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -7567,6 +7568,26 @@
|
|||||||
"url": "https://opencollective.com/unified"
|
"url": "https://opencollective.com/unified"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/vscode-jsonrpc": {
|
||||||
|
"version": "8.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz",
|
||||||
|
"integrity": "sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/vscode-ws-jsonrpc": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/vscode-ws-jsonrpc/-/vscode-ws-jsonrpc-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-FgTx05ARqmh2gy9k/e4imvr+7wVSXzd8AXE/Rd9d/eDXQwJPbaa7w+PLiswo3MX5FY0Ujk143w2ezELN/Dp14Q==",
|
||||||
|
"dependencies": {
|
||||||
|
"vscode-jsonrpc": "^8.0.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=16.11.0",
|
||||||
|
"npm": ">=8.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/watchpack": {
|
"node_modules/watchpack": {
|
||||||
"version": "2.4.0",
|
"version": "2.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
|
||||||
@@ -13509,6 +13530,19 @@
|
|||||||
"unist-util-stringify-position": "^3.0.0"
|
"unist-util-stringify-position": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"vscode-jsonrpc": {
|
||||||
|
"version": "8.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.0.2.tgz",
|
||||||
|
"integrity": "sha512-RY7HwI/ydoC1Wwg4gJ3y6LpU9FJRZAUnTYMXthqhFXXu77ErDd/xkREpGuk4MyYkk4a+XDWAMqe0S3KkelYQEQ=="
|
||||||
|
},
|
||||||
|
"vscode-ws-jsonrpc": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/vscode-ws-jsonrpc/-/vscode-ws-jsonrpc-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-FgTx05ARqmh2gy9k/e4imvr+7wVSXzd8AXE/Rd9d/eDXQwJPbaa7w+PLiswo3MX5FY0Ujk143w2ezELN/Dp14Q==",
|
||||||
|
"requires": {
|
||||||
|
"vscode-jsonrpc": "^8.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"watchpack": {
|
"watchpack": {
|
||||||
"version": "2.4.0",
|
"version": "2.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
|
||||||
|
|||||||
+2
-1
@@ -14,6 +14,7 @@
|
|||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-markdown": "^8.0.3",
|
"react-markdown": "^8.0.3",
|
||||||
"react-use-websocket": "^4.2.0",
|
"react-use-websocket": "^4.2.0",
|
||||||
|
"vscode-ws-jsonrpc": "^2.0.0",
|
||||||
"ws": "^8.9.0"
|
"ws": "^8.9.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -28,10 +29,10 @@
|
|||||||
"concurrently": "^7.4.0",
|
"concurrently": "^7.4.0",
|
||||||
"css-loader": "^6.7.1",
|
"css-loader": "^6.7.1",
|
||||||
"nodemon": "^2.0.20",
|
"nodemon": "^2.0.20",
|
||||||
|
"react-refresh": "^0.14.0",
|
||||||
"style-loader": "^3.3.1",
|
"style-loader": "^3.3.1",
|
||||||
"ts-loader": "^9.4.1",
|
"ts-loader": "^9.4.1",
|
||||||
"typescript": "^4.8.4",
|
"typescript": "^4.8.4",
|
||||||
"react-refresh": "^0.14.0",
|
|
||||||
"webpack": "^5.74.0",
|
"webpack": "^5.74.0",
|
||||||
"webpack-cli": "^4.10.0",
|
"webpack-cli": "^4.10.0",
|
||||||
"webpack-dev-server": "^4.11.1",
|
"webpack-dev-server": "^4.11.1",
|
||||||
|
|||||||
Reference in New Issue
Block a user