Created
August 23, 2012 21:07
-
-
Save Justin42/3441755 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| public void login(final String username, final String password,final LoginListener loginListener) { | |
| // Logins performed synchronously in its own thread. | |
| Runnable login = new Runnable() { | |
| public void run() { | |
| if(networkHandler.connectTCP()) { | |
| IoSession session = networkHandler.getSession(); | |
| ClientData clientData = networkHandler.getClientData(); | |
| // Block this thread while waiting for reply | |
| session.getConfig().setUseReadOperation(true); | |
| // Ask for public key from server | |
| loginListener.loginStatus("Requesting public encryption key..."); | |
| Message request = new Message(Packets.PUBLIC_KEY_REQUEST); | |
| session.write(request); | |
| // Get the response message | |
| loginListener.loginStatus("Waiting for encryption key..."); | |
| Message response = (Message) session.read() | |
| .awaitUninterruptibly() | |
| .getMessage(); | |
| loginListener.loginStatus("Received encryption key"); | |
| PublicKey serverKey = Encryption.parseKey(response.getArg(0)); | |
| // Encrypt symetric key + login data with servers public key | |
| loginListener.loginStatus("Generating client key..."); | |
| clientData.setKey(Encryption.generateKey()); | |
| request = new Message(Packets.LOGIN); | |
| request.setEncrypted(clientData.getID(), serverKey); | |
| request.add(clientData.getKey().getEncoded()); | |
| request.add(username.getBytes()); | |
| request.add(password.getBytes()); | |
| session.write(request); | |
| // Wait for response | |
| loginListener.loginStatus("Waiting for login response..."); | |
| response = (Message) session.read() | |
| .awaitUninterruptibly() | |
| .getMessage(); | |
| // Check login response | |
| if(response.getCommand() == Packets.LOGIN_ACCEPTED) { | |
| clientData.setID(response.getArg(0)); // First argument should be our uID | |
| loginListener.loginSuccess(); | |
| } | |
| if(response.getCommand() == Packets.LOGIN_DENIED) { | |
| loginListener.loginFailure(new String(response.getArg(0))); // First arg should be reason | |
| } | |
| // Unblock | |
| session.getConfig().setUseReadOperation(false); | |
| } | |
| else loginListener.loginFailure("Could not connect to server"); | |
| } | |
| }; | |
| threadPool.execute(login); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment