From 6f54448533e65042305705b7a9df3ed7327d8eec Mon Sep 17 00:00:00 2001
From: ComeF2 <123363885+ComeF2@users.noreply.github.com>
Date: Mon, 27 Feb 2023 16:11:14 +0100
Subject: [PATCH] Fini step 3

---
 Twidder (Lab3)/database.db      | Bin 36864 -> 36864 bytes
 Twidder (Lab3)/server.py        |  24 ++++++++++++++++++++++++
 Twidder (Lab3)/static/client.js |   3 ++-
 3 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/Twidder (Lab3)/database.db b/Twidder (Lab3)/database.db
index e782f056d664cc752ac1faf34ef066c94f2b9145..bd4569e38b3cb72f36be9709fc76c9f269776383 100644
GIT binary patch
delta 61
zcmZozz|^pSX@WE($3z)tMvjdMN&YGkL8ay4p`pp8Mq%z=!5%&qSruW~86G)-xl!f8
RCOPR*=6NNXpZQBU003k%6x;v+

delta 61
zcmZozz|^pSX@WE(<3t%}M#hZ^N&YH{8J=eOX3h~AW|?l@&MwC3J|>pwX@0)WuGwxC
R$tG^eVI{?zpZQBU002Qn6Py45

diff --git a/Twidder (Lab3)/server.py b/Twidder (Lab3)/server.py
index 8b4cafc..e3056fa 100644
--- a/Twidder (Lab3)/server.py	
+++ b/Twidder (Lab3)/server.py	
@@ -29,6 +29,19 @@ def echo_connection_socket(ws):
         else:
             print("email error")
 
+@sockets.route("/profil_view")
+def socket_connection(ws):
+    while True:
+        token = ws.receive()
+        email = database_helper.tokenToEmail(token)
+        if email:
+            if email in loggedIn_for_ws:
+                loggedIn_for_ws[email] = ws
+                print("loggedIn_for_ws : ", loggedIn_for_ws)
+            else:
+                print("ERROR : ", email, " not connected")
+        else:
+            print("ERROR : ", email, " not found")
 
 @app.route("/", methods = ['GET'])
 def hello_world():
@@ -76,6 +89,7 @@ def sign_in():
             }
             print("token : ", token)
             if database_helper.addToLoggedInUsers(token, data['email']):
+                check_reconnection(data['email'])
                 return jsonify(value), 201
             else:
                 return "", 409
@@ -244,6 +258,16 @@ def is_valid_email(email):
     pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
     return re.match(pattern, email) is not None
 
+def check_reconnection(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] = -1
+    else:
+        loggedIn_for_ws[email] = -1
+    
 
 if __name__ == '__main__':
     # waitress.serve(app, host='0.0.0.0', port=5000, threads=4)  #http://localhost:5000
diff --git a/Twidder (Lab3)/static/client.js b/Twidder (Lab3)/static/client.js
index 8999723..b4e5786 100644
--- a/Twidder (Lab3)/static/client.js	
+++ b/Twidder (Lab3)/static/client.js	
@@ -27,7 +27,8 @@ function displayWelcomeView() {
 }
 
 function displayProfilView() {
-  let ws = new WebSocket('ws://' + window.location.host + '/echo_connection')
+  //let ws = new WebSocket('ws://' + window.location.host + '/echo_connection')
+  let ws = new WebSocket('ws://' + window.location.host + '/profil_view')
   ws.onopen = function(event) {
     console.log("WebSocket connection established !");
     ws.send(localStorage.getItem("token"));
-- 
GitLab