From 4d68f17a5892dc4a7fa098cb830c2593d7eba158 Mon Sep 17 00:00:00 2001 From: Benjamin Kraft Date: Tue, 15 Nov 2022 14:43:23 +0100 Subject: [PATCH] even better project setup --- package-lock.json | 428 -------------------------------- package.json | 1 + src/client.ts | 9 +- src/definitions/serialized.d.ts | 56 ----- src/definitions/settings.d.ts | 7 + src/game_standard.ts | 5 +- src/index.ts | 48 +--- src/lib/vector.ts | 90 ------- src/logger.ts | 8 +- src/manager.ts | 11 +- src/room.ts | 24 +- src/start.ts | 41 +++ tsconfig.json | 6 +- 13 files changed, 82 insertions(+), 652 deletions(-) delete mode 100644 package-lock.json delete mode 100644 src/lib/vector.ts create mode 100644 src/start.ts diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index b4adbeb..0000000 --- a/package-lock.json +++ /dev/null @@ -1,428 +0,0 @@ -{ - "name": "game-server", - "version": "2.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "game-server", - "version": "2.0", - "dependencies": { - "dotenv": "^16.0.3", - "https": "^1.0.0", - "ini": "^2.0.0", - "socket.io": "^4.4.1" - }, - "devDependencies": { - "@types/node": "^17.0.18", - "typescript": "^4.5.5" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" - }, - "node_modules/@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" - }, - "node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/engine.io": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", - "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", - "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", - "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==" - }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/socket.io": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.3.tgz", - "integrity": "sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg==", - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.2.0", - "socket.io-adapter": "~2.4.0", - "socket.io-parser": "~4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==" - }, - "node_modules/socket.io-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz", - "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - } - }, - "dependencies": { - "@socket.io/component-emitter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", - "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" - }, - "@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" - }, - "@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==" - }, - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" - }, - "engine.io": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", - "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", - "requires": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" - } - }, - "engine.io-parser": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", - "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==" - }, - "https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", - "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==" - }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "socket.io": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.3.tgz", - "integrity": "sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg==", - "requires": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.2.0", - "socket.io-adapter": "~2.4.0", - "socket.io-parser": "~4.2.0" - } - }, - "socket.io-adapter": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==" - }, - "socket.io-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz", - "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==", - "requires": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - } - }, - "typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "requires": {} - } - } -} diff --git a/package.json b/package.json index 43ce830..cf1776c 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "game-server", "version": "2.0", "private": true, + "type": "commonjs", "main": "out/index.js", "types": "out/index.d.ts", "dependencies": { diff --git a/src/client.ts b/src/client.ts index 67b0e96..9494723 100644 --- a/src/client.ts +++ b/src/client.ts @@ -1,7 +1,8 @@ -import {Room} from "./room" -import {ConnectionManager, serializeObject} from "./manager" -import {log} from "./logger"; -import SocketIO = require("socket.io"); +import {Room} from "./room.js" +import {ConnectionManager, serializeObject} from "./manager.js" +import {log} from "./logger.js"; +import * as SocketIO from "socket.io"; +import { Settings } from "./definitions/settings"; export class Client { diff --git a/src/definitions/serialized.d.ts b/src/definitions/serialized.d.ts index fd59dac..b7b6a04 100644 --- a/src/definitions/serialized.d.ts +++ b/src/definitions/serialized.d.ts @@ -1,10 +1,4 @@ declare namespace Serialized { - interface Game { - players: Player[] - balls: Ball[] - finished: boolean - paused: boolean - } interface Lobby { id: string @@ -23,54 +17,4 @@ declare namespace Serialized { isPlayer: boolean isSpectator: boolean } - - interface Ball { - pos: Vector - vel: Vector - color: Color - radius: number - runningUp: boolean - nextStep: Vector - } - - interface Player { - id: string - pos: Vector - dim: Vector - vel: Vector - color: Color - points: number - } - - interface Vector { - x: number, - y: number - } - - interface Color { - stroke: string - fill: string - } - - module Player { - interface Input { - up: boolean - down: boolean - } - - interface Side { - x: number - y: number - } - } - - enum Directions { - Top, - Right, - Bottom, - Left, - Forward, - Back, - Center - } } \ No newline at end of file diff --git a/src/definitions/settings.d.ts b/src/definitions/settings.d.ts index 545eb62..d269460 100644 --- a/src/definitions/settings.d.ts +++ b/src/definitions/settings.d.ts @@ -1,3 +1,5 @@ +import {ServerGame} from "../game_standard.js"; + declare module Settings { interface Global { project: Project @@ -19,4 +21,9 @@ declare module Settings { width: number height: number } + + interface Server { + useP2P: boolean + gameClass: typeof ServerGame + } } \ No newline at end of file diff --git a/src/game_standard.ts b/src/game_standard.ts index de008e1..defdf2d 100644 --- a/src/game_standard.ts +++ b/src/game_standard.ts @@ -1,5 +1,6 @@ -import {Room} from "./room" -import {Client} from "./client" +import {Room} from "./room.js" +import {Client} from "./client.js" +import { Settings } from "./definitions/settings.js"; export class ServerGame { diff --git a/src/index.ts b/src/index.ts index d95bddf..7fea5c2 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,45 +1,7 @@ 'use strict'; - -import {log} from "./logger"; -import {ConnectionManager} from "./manager"; - -import https = require('https'); -import {Server} from 'socket.io'; -import fs = require('fs'); - -export function GameServer(useP2P: boolean){ - let rootDir = __dirname + '/..'; - - require("dotenv").config(); - const httpsPort = parseInt(process.env["HTTPS_PORT"]); - - let cert = fs.readFileSync(rootDir + '/ssl_certificate/cert.pem'); - let key = fs.readFileSync(rootDir + '/ssl_certificate/key.pem'); - - let httpsServer = https.createServer({key: key, cert: cert}); - - let sIO = new Server(httpsServer, { - cors: { - origin: ["https://play.benjamin-kraft.local", "https://dev.play.benjamin-kraft.eu", "https://play.benjamin-kraft.eu"] - } - }); - if (useP2P){ - const p2p = require('socket.io-p2p-server').Server; - sIO.use(p2p); - } - - httpsServer.listen(httpsPort); - - let connectionManager = new ConnectionManager(sIO); - - // On new connection - sIO.on('connection', socket => connectionManager.newSocket(socket)); - - log('startup', null, null, 'Server is listening on port ' + httpsPort); -} - -export {Room} from "./room" -export {log} from "./logger" -export {Client} from "./client" -export {ServerGame} from "./game_standard" +export {StartServer} from "./start.js" +export {Room} from "./room.js" +export {log} from "./logger.js" +export {Client} from "./client.js" +export {ServerGame} from "./game_standard.js" diff --git a/src/lib/vector.ts b/src/lib/vector.ts deleted file mode 100644 index 79739b3..0000000 --- a/src/lib/vector.ts +++ /dev/null @@ -1,90 +0,0 @@ -export class Vector { - - x: number; - y: number; - - constructor(x: number, y: number) { - this.x = x; - this.y = y - } - - static fromAngle(angle: number) { - return new Vector(Math.cos(angle), Math.sin(angle)) - } - - static sub(v1: Vector, v2: Vector) { - return new Vector(v1.x - v2.x, v1.y - v2.y) - } - - static div(v1: Vector, divider: number): Vector { - return new Vector(v1.x / divider, v1.y / divider) - } - - add(other: Vector): Vector { - this.x += other.x; - this.y += other.y; - return this - } - - mult(scalar: number): Vector { - this.x *= scalar; - this.y *= scalar; - return this - } - - addMag(length: number): Vector { - this.setMag(this.mag() + length); - return this - } - - setMag(length: number): Vector { - let mag = this.mag(); - this.x /= mag; - this.y /= mag; - this.x *= length; - this.y *= length; - return this - } - - rotate(rad: number): Vector { - let r = this.rotated(rad); - this.x = r.x; - this.y = r.y; - return this - } - - copy(): Vector { - return new Vector(this.x, this.y) - } - - heading(): number { - let r = this.rotated(Math.PI / -2); - return Math.atan2(r.x, -r.y) - } - - mag() { - return Math.sqrt(this.x * this.x + this.y * this.y) - } - - serialized(): Serialized.Vector { - return { - x: this.x, - y: this.y - }; - } - - private rotated(rad: number): Vector { - let x = Math.cos(rad) * this.x - Math.sin(rad) * this.y, - y = Math.sin(rad) * this.x + Math.cos(rad) * this.y; - return new Vector(x, y) - } -} - -export let p = { - createVector: (x: number, y: number): Vector => { - return new Vector(x, y) - }, - dist: (x1: number, y1: number, x2: number, y2: number): number => { - return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)) - } -}; \ No newline at end of file diff --git a/src/logger.ts b/src/logger.ts index afcb454..2b4e936 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -1,8 +1,8 @@ -import {Room} from "./room" -import {Client} from "./client" +import {Room} from "./room.js" +import {Client} from "./client.js" -import fs = require('fs'); -import util = require('util'); +import * as fs from "fs"; +import * as util from "util"; let logFolder = "./logs"; diff --git a/src/manager.ts b/src/manager.ts index b70f18c..59c65d0 100644 --- a/src/manager.ts +++ b/src/manager.ts @@ -1,8 +1,9 @@ -import {Room} from "./room" -import {Client} from "./client" -import {log} from "./logger" -import fs = require("fs"); -import SocketIO = require("socket.io"); +import {Room} from "./room.js" +import {Client} from "./client.js" +import {log} from "./logger.js" +import * as fs from "fs"; +import * as SocketIO from "socket.io" +import { Settings } from "./definitions/settings"; export class ConnectionManager { diff --git a/src/room.ts b/src/room.ts index 430e5f9..b6d3036 100644 --- a/src/room.ts +++ b/src/room.ts @@ -1,7 +1,8 @@ -import {Client} from "./client" -import {ServerGame} from "./game_standard" -import {serializeObject} from "./manager"; +import {Client} from "./client.js" +import {ServerGame} from "./game_standard.js" +import {serializeObject} from "./manager.js"; import {Server} from "socket.io"; +import { Settings } from "./definitions/settings.js"; export class Room { @@ -15,6 +16,8 @@ export class Room { gameSettings: any; name: string; + static GameClass: typeof ServerGame + constructor(name: string, id: string, settings?: Settings.Global, io?: Server) { this.id = id; this.name = name; @@ -123,20 +126,7 @@ export class Room { } runGame(): void { - switch (this.gameName) { - case 'memory': - //this.runningGame = new Memory(this, this.settings); - break; - case 'pong': - //this.runningGame = new Pong(this, this.settings); - break; - case 'global-draw': - //this.runningGame = new GlobalDraw(this, this.settings); - break; - case 'chainreact': - //this.runningGame = new Chainreact(this, this.settings); - break; - } + this.runningGame = new Room.GameClass(this, this.settings); } toAll(event: string, ...args: any[]): void { diff --git a/src/start.ts b/src/start.ts new file mode 100644 index 0000000..575fa0f --- /dev/null +++ b/src/start.ts @@ -0,0 +1,41 @@ +import {ConnectionManager} from "./manager.js"; +import {log} from "./logger.js"; + +import https from 'https'; +import {Server} from 'socket.io'; +import fs from 'fs'; +import { Settings } from "./definitions/settings"; +import {Room} from "./room.js"; + +export function StartServer(settings: Settings.Server){ + let rootDir = __dirname + '/..'; + + require("dotenv").config(); + const httpsPort = parseInt(process.env["HTTPS_PORT"]); + + let cert = fs.readFileSync(rootDir + '/ssl_certificate/cert.pem'); + let key = fs.readFileSync(rootDir + '/ssl_certificate/key.pem'); + + let httpsServer = https.createServer({key: key, cert: cert}); + + let sIO = new Server(httpsServer, { + cors: { + origin: ["https://play.benjamin-kraft.local", "https://dev.play.benjamin-kraft.eu", "https://play.benjamin-kraft.eu"] + } + }); + if (settings.useP2P){ + const p2p = require('socket.io-p2p-server').Server; + sIO.use(p2p); + } + + httpsServer.listen(httpsPort); + + Room.GameClass = settings.gameClass; + + let connectionManager = new ConnectionManager(sIO); + + // On new connection + sIO.on('connection', socket => connectionManager.newSocket(socket)); + + log('startup', null, null, 'Server is listening on port ' + httpsPort); +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index ee39ff6..e8e5bb6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,8 @@ { "compilerOptions": { - "target": "ESNext", - "module": "ESNext", - "moduleResolution": "NodeNext", + "target": "ES2022", + "module": "Node16", + "moduleResolution": "Node", "esModuleInterop": true, "alwaysStrict": true,