diff --git a/Lab_3/Twidder/server.py b/Lab_3/Twidder/server.py index d9757754cc62be02dc30aaf08ab88222fb3190f6..d8b132cbeecff3417d820e9a1b25d4e9a0ba1be1 100644 --- a/Lab_3/Twidder/server.py +++ b/Lab_3/Twidder/server.py @@ -1,11 +1,9 @@ """Server""" -from flask import Flask, jsonify, request, make_response, render_template +from flask import Flask, jsonify, request, make_response from gevent.pywsgi import WSGIServer import uuid import database_helper import json - -from geventwebsocket.handler import WebSocketHandler from flask_sock import Sock from gevent import monkey monkey.patch_all() @@ -24,12 +22,15 @@ monkey.patch_all() #Why does localhost in URL not work? + app = Flask(__name__, static_url_path = '/static')#in case flask does not recognize folder sock = Sock(app) app.debug = True session = {'token': ("email", "wsObj")} + + @app.route('/') def root(): return app.send_static_file('client.html') @@ -77,24 +78,21 @@ def echo(socket): try: myEmail = json.loads(data)["email"] except: - # session[token?][1].close() return try: myToken = json.loads(data)["token"] except: - # session[token?][1].close() return - - print(session) # sign out if I am logged in somewhere else + print(session) for token in list(session.keys()): - if session[token][0] == myEmail and session[token][1] != "" and token != myToken: + if session[token][0] == myEmail and token != myToken: + if session[token][1] != "": + session[token][1].send(json.dumps({"action" : "signOut"})) + session[token][1].close() print("You got kicked out") - session[token][1].send(json.dumps({"action" : "signOut"})) - session[token][1].close() session.pop(token) - print(session) # Put socket in global dict so server knows my connection is open @@ -195,7 +193,6 @@ def sign_out(): tmp = token_has_error(token) if tmp[0]: return jsonify({}), tmp[1] - # Close my socket print(session) @@ -280,7 +277,6 @@ def get_user_data_by_email(email): return True, 400 if len(email) > 50: return True, 400 - # Attempting to find the data of the current user in the database data = database_helper.find_user(email) @@ -379,5 +375,5 @@ def post_message(): if __name__ == '__main__': # app.run(port=5000, debug=True) app.debug = True - http_server = WSGIServer(('127.0.0.1', 5000), app) # handler_class = WebSocketHandler + http_server = WSGIServer(('127.0.0.1', 5000), app) http_server.serve_forever() diff --git a/Lab_3/Twidder/static/client.js b/Lab_3/Twidder/static/client.js index de96a87139bf55d8f9be68ecf0a3eaec924b7b68..a4995c8c8e36ea8091923a9d74a35ceb0cb90c13 100644 --- a/Lab_3/Twidder/static/client.js +++ b/Lab_3/Twidder/static/client.js @@ -14,17 +14,13 @@ function connectWithSocket() { let token = localStorage.getItem("currentUser"); // Changes the view to profile view and loads user info - // document.getElementById("error").innerHTML = "You are signed in"; displayView(); setUserDetails("home"); - // Establish web socket - // if (socket.readyState !== WebSocket.CLOSED) { - // socket.close(); - // } - // socket.close(); + // Establish web socket socket = new WebSocket('ws://' + document.domain + ':5000/myServer/api'); + socket.onopen = function (event) { let myEmail = localStorage.getItem("homeEmail"); @@ -32,15 +28,18 @@ function connectWithSocket() { this.send(JSON.stringify({token: token, email: myEmail})); console.log("Nu har jag skickat"); } + socket.onmessage = function (event) { let response = JSON.parse(event.data); console.log("Nu fick jag svar"); switch (response["action"]) { case "signOut": + + // If old socket open, close it. socket.close(); console.log(response); - // hej + // Reset token in the localStorage localStorage.setItem("currentUser", ""); localStorage.setItem("homeEmail", ""); @@ -102,15 +101,11 @@ signOutRequest.onreadystatechange = function() { displayView(); } else if (this.status == 401) { - console.log("Error 401: You are not loged in"); - // todo - kanske ta bort - localStorage.setItem("currentUser", ""); + console.log("Error 401: You are not logged in"); displayView(); } else { console.log("Unknown error"); - // todo - kanske ta bort - localStorage.setItem("currentUser", ""); displayView(); } } @@ -250,7 +245,7 @@ messagesByTokenRequest.onreadystatechange = function() { let currentWall = JSON.parse(this.responseText); - // Fromating the text before putting to wall + // Formating the text before putting to wall let complete = ""; for (let i = 0; i < currentWall.data.length; i++) { complete += currentWall.data[i].person_who_posted + ': ' + currentWall.data[i].message + "</br>"; @@ -381,14 +376,10 @@ window.onload = function () { else { // Set correct view depending on if someone is signed in or not displayView(); - - // Load user details to home page and browse page - // setUserDetails("home"); - // setUserDetails("browse"); } - }; + // Function for setting user details, either for yourself or for some other user function setUserDetails(who) {