From 2f9fbe3ff99fdd9acad9be3f6eab1aa67540735c Mon Sep 17 00:00:00 2001 From: Robin Steinberg Date: Tue, 24 Aug 2021 22:27:57 +0200 Subject: [PATCH] Initial commit --- .gitignore | 102 +++++++++++++++++++++++++++++++++++++++++++++ .vscode/tasks.json | 25 +++++++++++ package.json | 14 +++++++ src/app.ts | 71 +++++++++++++++++++++++++++++++ tsconfig.json | 10 +++++ 5 files changed, 222 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/tasks.json create mode 100644 package.json create mode 100644 src/app.ts create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8781662 --- /dev/null +++ b/.gitignore @@ -0,0 +1,102 @@ +dist/ + +node_modules/ +.node_modules/ +built/* +tests/cases/rwc/* +tests/cases/test262/* +tests/cases/perf/* +!tests/cases/webharness/compilerToString.js +test-args.txt +~*.docx +\#*\# +.\#* +tests/baselines/local/* +tests/baselines/local.old/* +tests/services/baselines/local/* +tests/baselines/prototyping/local/* +tests/baselines/rwc/* +tests/baselines/test262/* +tests/baselines/reference/projectOutput/* +tests/baselines/local/projectOutput/* +tests/baselines/reference/testresults.tap +tests/services/baselines/prototyping/local/* +tests/services/browser/typescriptServices.js +src/harness/*.js +src/compiler/diagnosticInformationMap.generated.ts +src/compiler/diagnosticMessages.generated.json +src/parser/diagnosticInformationMap.generated.ts +src/parser/diagnosticMessages.generated.json +rwc-report.html +*.swp +build.json +*.actual +tests/webTestServer.js +tests/webTestServer.js.map +tests/webhost/*.d.ts +tests/webhost/webtsc.js +tests/cases/**/*.js +!tests/cases/docker/*.js/ +tests/cases/**/*.js.map +*.config +scripts/eslint/built/ +scripts/debug.bat +scripts/run.bat +scripts/word2md.js +scripts/buildProtocol.js +scripts/ior.js +scripts/authors.js +scripts/configurePrerelease.js +scripts/configureLanguageServiceBuild.js +scripts/open-user-pr.js +scripts/open-cherry-pick-pr.js +scripts/processDiagnosticMessages.d.ts +scripts/processDiagnosticMessages.js +scripts/produceLKG.js +scripts/importDefinitelyTypedTests/importDefinitelyTypedTests.js +scripts/generateLocalizedDiagnosticMessages.js +scripts/request-pr-review.js +scripts/*.js.map +scripts/typings/ +coverage/ +internal/ +**/.DS_Store +.settings +**/.vs +**/.vscode/* +!**/.vscode/tasks.json +!**/.vscode/settings.template.json +!**/.vscode/launch.template.json +!**/.vscode/extensions.json +!tests/cases/projects/projectOption/**/node_modules +!tests/cases/projects/NodeModulesSearch/**/* +!tests/baselines/reference/project/nodeModules*/**/* +.idea +yarn.lock +yarn-error.log +.parallelperf.* +tests/cases/user/*/package-lock.json +tests/cases/user/*/node_modules/ +tests/cases/user/*/**/*.js +tests/cases/user/*/**/*.js.map +tests/cases/user/*/**/*.d.ts +!tests/cases/user/zone.js/ +!tests/cases/user/bignumber.js/ +!tests/cases/user/discord.js/ +tests/baselines/reference/dt +.failed-tests +TEST-results.xml +package-lock.json +tests/cases/user/npm/npm +tests/cases/user/TypeScript-React-Starter/TypeScript-React-Starter +tests/cases/user/TypeScript-Node-Starter/TypeScript-Node-Starter +tests/cases/user/TypeScript-React-Native-Starter/TypeScript-React-Native-Starter +tests/cases/user/TypeScript-Vue-Starter/TypeScript-Vue-Starter +tests/cases/user/TypeScript-WeChat-Starter/TypeScript-WeChat-Starter +tests/cases/user/create-react-app/create-react-app +tests/cases/user/fp-ts/fp-ts +tests/cases/user/webpack/webpack +tests/cases/user/puppeteer/puppeteer +tests/cases/user/axios-src/axios-src +tests/cases/user/prettier/prettier +.eslintcache diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..a0aeb2c --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,25 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "typescript", + "tsconfig": "tsconfig.json", + "problemMatcher": [ + "$tsc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "label": "tsc: Erstellen – tsconfig.json" + }, + { + "type": "npm", + "script": "build", + "group": "build", + "problemMatcher": [], + "label": "npm: build", + "detail": "tsc -p ./" + } + ] +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..83659bb --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "scripts": { + "build": "npm install && tsc -p ./" + }, + "devDependencies": { + "@tsconfig/node16": "^1.0.2", + "@types/node": "^16.7.1", + "@types/ws": "^7.4.7", + "typescript": "^4.3.5" + }, + "dependencies": { + "ws": "^8.2.0" + } +} diff --git a/src/app.ts b/src/app.ts new file mode 100644 index 0000000..4e64935 --- /dev/null +++ b/src/app.ts @@ -0,0 +1,71 @@ +import WebSocket from 'ws'; + +const wss = new WebSocket.Server({ port: 8081 }); +const receivers: WebSocket[] = []; +let sender: WebSocket | null = null; + +const paths = [] as string[]; + +wss.on('connection', ws => { + console.log('CONNECTION incoming'); + ws.once('message', message => { + const str = message.toString(); + switch (str) { + case 'SENDER': + setSender(ws); + break; + case 'RECEIVER': + addReceiver(ws) + break; + default: + paths.push(str); + break; + } + }); +}); + +console.log('READY'); + +function addReceiver(ws: WebSocket) { + console.log('RECEIVER registered'); + for (const path of paths) { + ws.send(path); + } + receivers.push(ws); + + ws.onclose = () => { + // Remove receiver when connection closes + for (const [i, recv] of receivers.entries()) { + if (ws === recv) { + receivers.splice(i, 1); + } + } + }; +} + +function setSender(ws: WebSocket) { + console.log('SENDER is being registered') + if (sender) { + console.log('Removing current sender...') + sender.close(); + clearPaths(); + } + + sender = ws; + ws.on('message', msg => processMessage(msg)); +} + +function processMessage(message: WebSocket.Data) { + const path = message.toString(); + console.log('PATH RECEIVED: ' + path); + paths.push(path); + + console.log('SENDING to ' + receivers.length, 'clients'); + receivers.forEach(r => r.send(path)); +} + +function clearPaths() { + paths.splice(0, paths.length); + receivers.forEach(r => r.send("CLEAR")); + console.log('Paths have been cleared'); +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..7c9e3a9 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@tsconfig/node16/tsconfig.json", + "compilerOptions": { + "sourceMap": true, + "outDir": "dist", + "moduleResolution": "node" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "**/*.spec.ts"] + } \ No newline at end of file