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