diff --git a/Twidder (Lab3)/__pycache__/database_helper.cpython-310.pyc b/Twidder (Lab3)/__pycache__/database_helper.cpython-310.pyc index a589a1c66f72efe21dc63cfcf42da73d2da85dd5..7e35810d1e1129c923a339515a845bc52bbdcae7 100644 Binary files a/Twidder (Lab3)/__pycache__/database_helper.cpython-310.pyc and b/Twidder (Lab3)/__pycache__/database_helper.cpython-310.pyc differ diff --git a/Twidder (Lab3)/database.db b/Twidder (Lab3)/database.db index 4213d44eb0fac01c7a52ea7879431312ace92b86..e782f056d664cc752ac1faf34ef066c94f2b9145 100644 Binary files a/Twidder (Lab3)/database.db and b/Twidder (Lab3)/database.db differ diff --git a/Twidder (Lab3)/database_helper.py b/Twidder (Lab3)/database_helper.py index 7eac6bdaa35947e244602a2cb9c9123debbb5fb2..877fefc84d1668faa95c898848537f2aa908a685 100644 --- a/Twidder (Lab3)/database_helper.py +++ b/Twidder (Lab3)/database_helper.py @@ -31,11 +31,34 @@ def authenticate(email, password): return False -def addToLoggedInUsers(token, email): +"""def addToLoggedInUsers(token, email): try: get_db().execute("INSERT into LOGGEDINUSERS values(?, ?)", [token, email]) get_db().commit() return True + except: + return False""" + +def addToLoggedInUsers(token, email): + try: + db = get_db() + cursor = db.cursor() + + # Check if the email already exists in the table + cursor.execute("SELECT * FROM LOGGEDINUSERS WHERE EMAIL=?", (email,)) + result = cursor.fetchone() + + if result is None: + print("First time putting user in LOGGEDINUSERS") + # If the email is not already in the table, insert a new row + cursor.execute("INSERT INTO LOGGEDINUSERS (TOKEN, EMAIL) VALUES (?, ?)", (token, email)) + else: + print("Second time putting user in LOGGEDINUSERS") + # If the email already exists in the table, update the corresponding token + cursor.execute("UPDATE LOGGEDINUSERS SET TOKEN=? WHERE EMAIL=?", (token, email)) + + db.commit() + return True except: return False diff --git a/Twidder (Lab3)/server.py b/Twidder (Lab3)/server.py index 3e61cae6dbd502afb197b65297b507a4cba9b49c..8b4cafc5917e95901e04e1a51e7c672a98d583e6 100644 --- a/Twidder (Lab3)/server.py +++ b/Twidder (Lab3)/server.py @@ -1,5 +1,5 @@ from flask import Flask, request, jsonify -from flask_sockets import Sockets +from flask_sock import Sock import waitress import database_helper @@ -8,15 +8,27 @@ import string import json import re -app = Flask(__name__) -sockets = Sockets(app) +app = Flask(__name__, template_folder='static') +sockets = Sock(app) -@sockets.route('/echo') -def echo_socket(ws): + +@sockets.route('/echo_connection') +def echo_connection_socket(ws): while True: - message = ws.receive() - print("message : ", message) - # ws.send(message) + token = ws.receive() + email = database_helper.tokenToEmail(token) + if email: + if email in loggedIn_for_ws: + old_ws = loggedIn_for_ws[email] + old_ws.send("Disconnect") + old_ws.close() + print(email, "first connection disconnected") + loggedIn_for_ws[email] = ws + else: + loggedIn_for_ws[email] = ws + else: + print("email error") + @app.route("/", methods = ['GET']) def hello_world(): @@ -62,6 +74,7 @@ def sign_in(): value = { "token" : token } + print("token : ", token) if database_helper.addToLoggedInUsers(token, data['email']): return jsonify(value), 201 else: @@ -233,7 +246,8 @@ def is_valid_email(email): if __name__ == '__main__': + # waitress.serve(app, host='0.0.0.0', port=5000, threads=4) #http://localhost:5000 + loggedIn_for_ws = {} app.debug = True - #waitress.serve(app, host='0.0.0.0', port=5000, threads=4) #http://localhost:5000 app.run() diff --git a/Twidder (Lab3)/static/client.html b/Twidder (Lab3)/static/client.html index 6ef54ed3680e60f6b2338a81e7135ebd5ad398e6..21b2419aed3343b33072ec9ad5b6f3ee70c038a4 100644 --- a/Twidder (Lab3)/static/client.html +++ b/Twidder (Lab3)/static/client.html @@ -6,6 +6,7 @@ <link href="/static/client.css" type="text/css" rel="stylesheet"> <script src="/static/client.js"></script> <script src="/static/serverstub.js"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.5.0/socket.io.js"></script> <script id="welcomeview" type="text/view"> <div id="center"> <img src="/static/wimage.png"> diff --git a/Twidder (Lab3)/static/client.js b/Twidder (Lab3)/static/client.js index 180f6a456e0e55b3bc8acd24a5dc75f85e3bf635..89997231b97281f5b94626ba342543f739de4170 100644 --- a/Twidder (Lab3)/static/client.js +++ b/Twidder (Lab3)/static/client.js @@ -23,15 +23,36 @@ window.onload = function() { //---------------------------------------WELCOME & PROFIL--------------------------------------- function displayWelcomeView() { - var ws = new WebSocket("ws://localhost:5000/echo") - ws.onopen = function(event) { - console.log("Connexion WebSocket établie !"); - ws.send("Hello, server!"); - }; document.getElementById("displaywelcome").innerHTML = document.getElementById("welcomeview").innerHTML; } function displayProfilView() { + let ws = new WebSocket('ws://' + window.location.host + '/echo_connection') + ws.onopen = function(event) { + console.log("WebSocket connection established !"); + ws.send(localStorage.getItem("token")); + }; + ws.onmessage = (event) => { + if (event.data == "Disconnect"){ + console.log("Disconnection") + displayWelcomeView(); + localStorage.removeItem("tab"); + localStorage.removeItem("token"); + localStorage.removeItem("browsed_email"); + localStorage.removeItem("email_username"); + localStorage.removeItem("refreshToken"); + localStorage.removeItem("refreshToken2"); + localStorage.removeItem("reloadHome"); + localStorage.removeItem("reloadBrowsed"); + localStorage.removeItem("browse_success"); + document.getElementById("displayprofil").innerHTML = ""; + document.getElementById("displaywelcome").innerHTML = document.getElementById("welcomeview").innerHTML; + document.body.style.backgroundColor = "#0F98B7"; + } + } + ws.onclose = function() { + console.log('WebSocket disconnected'); + }; document.getElementById("displayprofil").innerHTML = document.getElementById("profilview").innerHTML; document.getElementById("displaywelcome").innerHTML = ""; document.body.style.backgroundColor = "#fcd29f"; @@ -468,3 +489,13 @@ function fills_data(tab, data_user) { document.getElementById(tab + "_city").innerHTML = "City = " + data_user.data.city; document.getElementById(tab + "_gender").innerHTML = "Gender = " + data_user.data.gender; } + + + +//---------------------------------------WEBSOCKET--------------------------------------- + +/*let ws = new WebSocket('ws://' + window.location.host + '/echo_connection') + +ws.onmessage = (event) => { + console.log("event.data : ", event.data); +}*/ \ No newline at end of file