experiment with json rpc on client

pull/43/head
Alexander Bentkamp 2 years ago
parent 303e0d6e94
commit 796ebfeaab

@ -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: {
@ -42,14 +56,14 @@ function App() {
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>
) )

34
package-lock.json generated

@ -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",

@ -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",

Loading…
Cancel
Save