package server; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import server.ServerClasses.*; import org.java_websocket.WebSocket; import server.tokens.AddEventToken; import server.tokens.AuthenticationToken; import server.tokens.DeleteFriendToken; import server.tokens.EventListToken; import server.tokens.FriendListToken; import server.tokens.FriendReqToken; import server.tokens.JoinEventToken; import server.tokens.LogoutToken; import server.tokens.RegistrationToken; import server.tokens.Token; import server.tokens.UserUpdateToken; public class TokenHandler implements Runnable { private DBManager dbm; private AuthenticationManager authman; public static Map<WebSocket, String> openConnections = new HashMap<WebSocket, String>(); Token token; String message; WebSocket connection; public TokenHandler(Token t, String msg, WebSocket conn) { dbm = new DBManager(); authman = new AuthenticationManager(dbm); //dbm.printUser(); //System.out.println("Database connection is ready!"); token = t; message = msg; connection = conn; } // The constructer to init the database connectionection when the server starts! public TokenHandler() { dbm = new DBManager(); authman = new AuthenticationManager(dbm); dbm.printUser(); System.out.println("Database connection is ready!"); } private void sendToken( Token tok, WebSocket connection ) { JSONReader reader = new JSONReader<Token>(); String answer = reader.JSONWriter( tok ); connection.send(answer); } public void run() { ParseToken(token, false); } public String ParseToken (Token t, boolean testing) { String result = null; if (dbm.isConnected) { JSONReader reader = new JSONReader<Token>(); //int recievedID = message.indexOf("Id") + 6; // Funktioniert nur mit einstlligen ids! //System.out.println("Recieved ID: " + recievedID); result = t.sTag; switch (t.sTag) { case "Authentication": AuthenticationToken auth = (AuthenticationToken)reader.readJson( message , AuthenticationToken.class ); //auth.sId = recievedID; HandleAuthToken(auth, connection); break; case "Registration": RegistrationToken reg = (RegistrationToken)reader.readJson( message , RegistrationToken.class ); HandleRegistToken( reg, connection ); break; case "UserUpdate": UserUpdateToken uut = (UserUpdateToken)reader.readJson( message, UserUpdateToken.class ); HandleUpdateToken ( uut, connection ); break; case "Logout": LogoutToken lot = (LogoutToken)reader.readJson( message, LogoutToken.class); HandleLogoutToken ( lot ); break; case "FriendList": FriendListToken flt = (FriendListToken)reader.readJson( message, FriendListToken.class ); HandleFriendListToken(flt, connection); //EventListToken get = (EventListToken)reader.readJson( message, EventListToken.class); HandleEvenListToken( flt, connection ); break; case "FriendRequest": FriendReqToken frt = (FriendReqToken)reader.readJson( message, FriendReqToken.class ); HandleFriendReqToken(frt, connection); break; case "AddEvent": AddEventToken cet = (AddEventToken)reader.readJson( message, AddEventToken.class); HandleCreateEventToken( cet ); break; case "AttendEvent": JoinEventToken aet = (JoinEventToken)reader.readJson( message, JoinEventToken.class); HandleAttendEventToken( aet ); break; case "DeleteFriend": DeleteFriendToken dft = (DeleteFriendToken) reader.readJson (message, DeleteFriendToken.class); HandleDeleteFriendToken ( dft ); break; /*case "EventList": EventListToken get = (EventListToken)reader.readJson( message, EventListToken.class); HandleEvenListToken( get, connection ); break;*/ default: System.out.println("ERROR: Token could not be identified!!"); result = "Undefinable"; } } dbm.Disconnect(); return result; } private void HandleAuthToken( AuthenticationToken auth, WebSocket connection ) { boolean result = authman.AuthenticateUser( auth ); System.out.println("Legit login: " + result); // write ID back auth.access = result; if (result == true) { auth.id = dbm.getUserID( auth.email ); dbm.UpdateUserOnline(Integer.parseInt(auth.id), true); openConnections.put(connection, auth.id); } sendToken(auth, connection); } private void HandleRegistToken ( RegistrationToken reg, WebSocket connection ) { authman.RegisterUser(reg); reg.result = true; // Write ID back if (reg.result == true) { reg.id = dbm.getUserID( reg.email ); } sendToken( reg , connection); } private void HandleUpdateToken ( UserUpdateToken uut, WebSocket connection ) { authman.UpdateUser( uut ); // Check if there is a open friendrequest for this user FriendReqToken frt = dbm.passOnFriendRequest( uut.id ); if ( frt != null ) { // Send that lucky person that new friendrequest sendToken(frt, connection); } } private void HandleLogoutToken( LogoutToken lot ) { dbm.UpdateUserOnline(Integer.parseInt(lot.id), false); } private void HandleFriendReqToken ( FriendReqToken frt, WebSocket connection ) { // The other friend accepted! Yeah! if(frt.accept == true){ dbm.addFriend( frt ); } else { // Request was just sent, store it for later dbm.storeFriendReq( frt ); } //sendToken( frt, connection); } private void HandleFriendListToken ( FriendListToken flt, WebSocket connection ) { ArrayList<User> friends = dbm.getUserfriends( flt.id ); flt.userList = friends; sendToken( flt, connection ); } private void HandleCreateEventToken( AddEventToken cet ) { dbm.createevent(cet); } private void HandleAttendEventToken( JoinEventToken elt ) { dbm.attendevent(elt.EventName); } private void HandleEvenListToken( FriendListToken flt, WebSocket connection ) { ArrayList<server.ServerClasses.Event> events = dbm.getEvents( flt.id ); EventListToken elt = new EventListToken(flt.id); elt.eventList = events; sendToken(elt, connection); } private void HandleDeleteFriendToken( DeleteFriendToken dft ) { dbm.deleteFriend(dft.name, dft.id); } }