Renderer/src/main/java/electrosphere/net/server/protocol/AuthProtocol.java
2025-05-15 12:37:16 -04:00

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;
}
}
}