62 lines
2.5 KiB
Java
62 lines
2.5 KiB
Java
package electrosphere.net.server.protocol;
|
|
|
|
import electrosphere.auth.AuthenticationManager;
|
|
import electrosphere.engine.Globals;
|
|
import electrosphere.net.parser.net.message.AuthMessage;
|
|
import electrosphere.net.parser.net.message.PlayerMessage;
|
|
import electrosphere.net.server.ServerConnectionHandler;
|
|
import electrosphere.net.server.player.Player;
|
|
import electrosphere.net.template.ServerProtocolTemplate;
|
|
|
|
/**
|
|
* The server protocol for authorization packets
|
|
*/
|
|
public class AuthProtocol implements ServerProtocolTemplate<AuthMessage> {
|
|
|
|
@Override
|
|
public AuthMessage handleAsyncMessage(ServerConnectionHandler connectionHandler, AuthMessage message) {
|
|
switch(message.getMessageSubtype()){
|
|
case AUTHDETAILS:
|
|
//auth check
|
|
int loginId = Globals.authenticationManager.authenticate(message.getuser(), message.getpass());
|
|
if(loginId != AuthenticationManager.INVALID_LOGIN){
|
|
//TODO: actually set connection/protocol to authenticated
|
|
connectionHandler.addMessagetoOutgoingQueue(AuthMessage.constructAuthSuccessMessage());
|
|
Player newPlayer = new Player(connectionHandler, loginId);
|
|
Globals.playerManager.registerPlayer(newPlayer);
|
|
//there is a race condition here where if a local non-server client connects first then it breaks
|
|
if(connectionHandler.getIPAddress().contains("127.0.0.1") && Globals.RUN_CLIENT == true && Globals.clientState.clientPlayer == null){
|
|
Globals.clientState.clientPlayer = newPlayer;
|
|
}
|
|
connectionHandler.addMessagetoOutgoingQueue(PlayerMessage.constructSet_IDMessage(connectionHandler.getPlayerId()));
|
|
} else {
|
|
connectionHandler.addMessagetoOutgoingQueue(AuthMessage.constructAuthFailureMessage());
|
|
}
|
|
break;
|
|
case AUTHREQUEST:
|
|
//silently drop
|
|
break;
|
|
case AUTHSUCCESS:
|
|
//silently drop
|
|
break;
|
|
case AUTHFAILURE:
|
|
//silently drop
|
|
break;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public void handleSyncMessage(ServerConnectionHandler connectionHandler, AuthMessage message) {
|
|
switch(message.getMessageSubtype()){
|
|
case AUTHDETAILS:
|
|
case AUTHREQUEST:
|
|
case AUTHSUCCESS:
|
|
case AUTHFAILURE:
|
|
//silently drop
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|