From ee7b18cf90dd497d8b03282116204885840af536 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Victor=20L=C3=B6fgren?= <victor.l0fgr3n@gmail.com> Date: Sun, 4 Apr 2021 16:33:41 +0200 Subject: [PATCH] #39: Add first socketio --- client/package-lock.json | 88 +++++++++++++++++++++++++++++++++++++++ client/package.json | 2 + client/src/App.tsx | 3 ++ server/app/__init__.py | 7 +++- server/app/sockets.py | 13 ++++++ server/configmodule.py | 1 + server/main.py | 23 ++-------- server/requirements.txt | Bin 2106 -> 2308 bytes server/tests/__init__.py | 2 +- 9 files changed, 117 insertions(+), 22 deletions(-) create mode 100644 server/app/sockets.py diff --git a/client/package-lock.json b/client/package-lock.json index babf4067..7edbd634 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -2318,6 +2318,11 @@ "@types/node": "*" } }, + "@types/component-emitter": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", + "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" + }, "@types/enzyme": { "version": "3.10.8", "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.10.8.tgz", @@ -2526,6 +2531,11 @@ "@types/node": "*" } }, + "@types/socket.io-client": { + "version": "1.4.36", + "resolved": "https://registry.npmjs.org/@types/socket.io-client/-/socket.io-client-1.4.36.tgz", + "integrity": "sha512-ZJWjtFBeBy1kRSYpVbeGYTElf6BqPQUkXDlHHD4k/42byCN5Rh027f4yARHCink9sKAkbtGZXEAmR0ZCnc2/Ag==" + }, "@types/source-list-map": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", @@ -3909,6 +3919,11 @@ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -3964,6 +3979,11 @@ } } }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" + }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -5928,6 +5948,30 @@ "once": "^1.4.0" } }, + "engine.io-client": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-5.0.0.tgz", + "integrity": "sha512-e6GK0Fqvq45Nu/j7YdIVqXtDPvlsggAcfml3QiEiGdJ1qeh7IQU6knxSN3+yy9BmbnXtIfjo1hK4MFyHKdc9mQ==", + "requires": { + "base64-arraybuffer": "0.1.4", + "component-emitter": "~1.3.0", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.1", + "has-cors": "1.1.0", + "parseqs": "0.0.6", + "parseuri": "0.0.6", + "ws": "~7.4.2", + "yeast": "0.1.2" + } + }, + "engine.io-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", + "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "requires": { + "base64-arraybuffer": "0.1.4" + } + }, "enhanced-resolve": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", @@ -7845,6 +7889,11 @@ "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -11816,6 +11865,16 @@ } } }, + "parseqs": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", + "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + }, + "parseuri": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", + "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -15008,6 +15067,30 @@ } } }, + "socket.io-client": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.0.0.tgz", + "integrity": "sha512-27yQxmXJAEYF19Ygyl8FPJ0if0wegpSmkIIbrWJeI7n7ST1JyH8bbD5v3fjjGY5cfCanACJ3dARUAyiVFNrlTQ==", + "requires": { + "@types/component-emitter": "^1.2.10", + "backo2": "~1.0.2", + "component-emitter": "~1.3.0", + "debug": "~4.3.1", + "engine.io-client": "~5.0.0", + "parseuri": "0.0.6", + "socket.io-parser": "~4.0.4" + } + }, + "socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + } + }, "sockjs": { "version": "0.3.20", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", @@ -17951,6 +18034,11 @@ } } }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/client/package.json b/client/package.json index e5fbde97..6ae23b2e 100644 --- a/client/package.json +++ b/client/package.json @@ -14,6 +14,7 @@ "@types/node": "^12.19.16", "@types/react": "^17.0.1", "@types/react-dom": "^17.0.0", + "@types/socket.io-client": "^1.4.36", "axios": "^0.21.1", "formik": "^2.2.6", "react": "^17.0.1", @@ -24,6 +25,7 @@ "react-scripts": "4.0.2", "redux": "^4.0.5", "redux-devtools-extension": "^2.13.8", + "socket.io-client": "^4.0.0", "styled-components": "^5.2.1", "typescript": "^4.1.3", "web-vitals": "^1.1.0", diff --git a/client/src/App.tsx b/client/src/App.tsx index d3e92beb..33268c68 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,9 +1,12 @@ import { createMuiTheme, MuiThemeProvider, StylesProvider } from '@material-ui/core' import React from 'react' +import io from 'socket.io-client' import { ThemeProvider } from 'styled-components' import Main from './Main' import { Wrapper } from './styled' +const socket = io('localhost:5000') + const theme = createMuiTheme({ palette: { primary: { diff --git a/server/app/__init__.py b/server/app/__init__.py index 7b5a8add..5f0a8b52 100644 --- a/server/app/__init__.py +++ b/server/app/__init__.py @@ -14,6 +14,11 @@ def create_app(config_name="configmodule.DevelopmentConfig"): bcrypt.init_app(app) jwt.init_app(app) db.init_app(app) + db.create_all() + + from .sockets import sio + + sio.init_app(app) from app.apis import flask_api @@ -25,7 +30,7 @@ def create_app(config_name="configmodule.DevelopmentConfig"): if rp != "/" and rp.endswith("/"): return redirect(rp[:-1]) - return app + return app, sio def identity(payload): diff --git a/server/app/sockets.py b/server/app/sockets.py new file mode 100644 index 00000000..598d10f5 --- /dev/null +++ b/server/app/sockets.py @@ -0,0 +1,13 @@ +from flask_socketio import SocketIO + +sio = SocketIO(cors_allowed_origins="http://localhost:3000") + + +@sio.on("connect") +def connect(): + print("A client connected!") + + +@sio.on("message") +def handle_message(data): + print("received message" + data) diff --git a/server/configmodule.py b/server/configmodule.py index f7c2935f..35afc88a 100644 --- a/server/configmodule.py +++ b/server/configmodule.py @@ -16,6 +16,7 @@ class Config: class DevelopmentConfig(Config): DEBUG = True SQLALCHEMY_DATABASE_URI = "sqlite:///database.db" + SQLALCHEMY_TRACK_MODIFICATIONS = False class TestingConfig(Config): diff --git a/server/main.py b/server/main.py index cb616855..bf4a2393 100644 --- a/server/main.py +++ b/server/main.py @@ -1,22 +1,5 @@ -from app import create_app, db - -# Development port -DEFAULT_DEV_PORT = 5000 - -# Production port -DEFAULT_PRO_PORT = 8080 +from app import create_app if __name__ == "__main__": - app = create_app("configmodule.DevelopmentConfig") - with app.app_context(): - db.create_all() - app.run(port=5000) - # CONFIG = "configmodule.DevelopmentConfig" - - # if "production-teknik8" in os.environ: - # CONFIG = "configmodule.ProductionConfig" - - # if "configmodule.DevelopmentConfig" == CONFIG: - # app.run(port=DEFAULT_DEV_PORT) - # else: - # app.run(host="0.0.0.0", port=DEFAULT_PRO_PORT) + app, sio = create_app("configmodule.DevelopmentConfig") + sio.run(app, port=5000) diff --git a/server/requirements.txt b/server/requirements.txt index 463ef4fe07f14b03b7771a25842170c8903f73f7..c64222b754a34a97ff5c2f57bd017ac682dbd42c 100644 GIT binary patch delta 236 zcmdlb&?2-Ugt<PQA(f#Fi1Qdq7;J&ih{2FS4~&f%cp11DkmYq5%7H4A7>XJ48Il>Y zfozB#1F#MV3DHvolmnTW16Knw6{NxdY-%P$3Q#tY!FF>jb09M-SaS1bwsyvlDxlc~ oKwWx3jO;EGpol44KSEU|*yX7VMGR>`^OAwOK)wK}G={4N0R1N>^#A|> delta 23 ecmZn>+9j|dgn9ER<|t-X0|q??lg*m!?Ti3d7zRfG diff --git a/server/tests/__init__.py b/server/tests/__init__.py index 0b0deaf0..c5b8f20d 100644 --- a/server/tests/__init__.py +++ b/server/tests/__init__.py @@ -4,7 +4,7 @@ from app import create_app, db @pytest.fixture def app(): - app = create_app("configmodule.TestingConfig") + app, _ = create_app("configmodule.TestingConfig") """ with app.app_context(): -- GitLab