package com.jenjinstudios.server.message;
import com.jenjinstudios.core.io.Message;
import com.jenjinstudios.server.net.ClientHandler;
import com.jenjinstudios.server.net.User;
import com.jenjinstudios.server.sql.Authenticator;
import com.jenjinstudios.server.sql.LoginException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Executes the necessary actions to deal with a login response.
*
* @author Caleb Brinkman
*/
@SuppressWarnings("unused")
public class ExecutableLoginRequest extends ServerExecutableMessage
{
private static final Logger LOGGER = Logger.getLogger(ExecutableLoginRequest.class.getName());
/** The SQL handler used by this executable message. */
private final Authenticator authenticator;
/**
* Construct a new ExecutableLoginRequest.
*
* @param clientHandler The handler which created this executable message.
* @param loginRequest The request sent by the client.
*/
public ExecutableLoginRequest(ClientHandler clientHandler, Message loginRequest) {
super(clientHandler, loginRequest);
authenticator = clientHandler.getServer().getAuthenticator();
}
@Override
public void runDelayed() {
}
@Override
public void runImmediate() {
ClientHandler handler = getClientHandler();
String username = (String) getMessage().getArgument("username");
String password = (String) getMessage().getArgument("password");
try
{
User user = authenticator.logInUser(username, password);
long loggedInTime = handler.getServer().getCycleStartTime();
handler.setLoggedInTime(loggedInTime);
queueLoginSuccessResponse(loggedInTime);
handler.setUser(user);
} catch (LoginException | NullPointerException e)
{
LOGGER.log(Level.FINEST, "User login failure: ", e);
queueLoginFailureResponse();
}
}
private void queueLoginSuccessResponse(long loggedInTime) {
Message loginResponse = getClientHandler().getMessageFactory().generateLoginResponse(true, loggedInTime);
getClientHandler().getMessageIO().queueOutgoingMessage(loginResponse);
}
private void queueLoginFailureResponse() {
ClientHandler clientHandler = getClientHandler();
ServerMessageFactory messageFactory = clientHandler.getMessageFactory();
Message loginResponse = messageFactory.generateLoginResponse(false, 0);
clientHandler.getMessageIO().queueOutgoingMessage(loginResponse);
}
}