Use LoginState everywhere

This commit is contained in:
P0nk
2024-09-28 07:02:05 +02:00
parent ec39f0fa06
commit 93bbe868cb
7 changed files with 27 additions and 25 deletions

View File

@@ -86,10 +86,6 @@ public class Client extends ChannelInboundHandlerAdapter {
private static final int MAX_FAILED_LOGIN_ATTEMPTS = 5;
private static final int MAX_CHR_SLOTS = 15;
public static final int LOGIN_NOTLOGGEDIN = 0;
public static final int LOGIN_SERVER_TRANSITION = 1;
public static final int LOGIN_LOGGEDIN = 2;
private final Type type;
private final long sessionId;
private final PacketProcessor packetProcessor;
@@ -460,11 +456,11 @@ public class Client extends ChannelInboundHandlerAdapter {
public boolean finishLogin() {
encoderLock.lock();
try {
if (getLoginState() > LOGIN_NOTLOGGEDIN) { // 0 = LOGIN_NOTLOGGEDIN, 1= LOGIN_SERVER_TRANSITION, 2 = LOGIN_LOGGEDIN
if (getLoginState() > LoginState.NOT_LOGGED_IN) { // 0 = LOGIN_NOTLOGGEDIN, 1= LOGIN_SERVER_TRANSITION, 2 = LOGIN_LOGGEDIN
loggedIn = false;
return false;
}
updateLoginState(Client.LOGIN_LOGGEDIN);
updateLoginState(LoginState.LOGGED_IN);
} finally {
encoderLock.unlock();
}
@@ -621,7 +617,7 @@ public class Client extends ChannelInboundHandlerAdapter {
e.printStackTrace();
}
if (newState == LOGIN_NOTLOGGEDIN) {
if (newState == LoginState.NOT_LOGGED_IN) {
loggedIn = false;
serverTransition = false;
setAccID(0);
@@ -682,19 +678,19 @@ public class Client extends ChannelInboundHandlerAdapter {
}
state = rs.getInt("loggedin");
if (state == LOGIN_SERVER_TRANSITION) {
if (state == LoginState.SERVER_TRANSITION) {
if (rs.getTimestamp("lastlogin").getTime() + 30000 < Server.getInstance().getCurrentTime()) {
int accountId = accId;
state = LOGIN_NOTLOGGEDIN;
updateLoginState(Client.LOGIN_NOTLOGGEDIN); // ACCID = 0, issue found thanks to Tochi & K u ssss o & Thora & Omo Oppa
state = LoginState.NOT_LOGGED_IN;
updateLoginState(LoginState.NOT_LOGGED_IN); // ACCID = 0, issue found thanks to Tochi & K u ssss o & Thora & Omo Oppa
this.setAccID(accountId);
}
}
}
}
if (state == LOGIN_LOGGEDIN) {
if (state == LoginState.LOGGED_IN) {
loggedIn = true;
} else if (state == LOGIN_SERVER_TRANSITION) {
} else if (state == LoginState.SERVER_TRANSITION) {
try (PreparedStatement ps2 = con.prepareStatement("UPDATE accounts SET loggedin = 0 WHERE id = ?")) {
ps2.setInt(1, getAccID());
ps2.executeUpdate();
@@ -746,7 +742,7 @@ public class Client extends ChannelInboundHandlerAdapter {
}
public void setCharacterOnSessionTransitionState(int cid) {
this.updateLoginState(Client.LOGIN_SERVER_TRANSITION);
this.updateLoginState(LoginState.SERVER_TRANSITION);
this.inTransition = true;
Server.getInstance().setCharacteridInTransition(this, cid);
}
@@ -822,7 +818,7 @@ public class Client extends ChannelInboundHandlerAdapter {
if (lastPong < pingedAt) {
if (ioChannel.isActive()) {
log.info("Disconnected {} due to idling. Reason: {}", remoteAddress, event.state());
updateLoginState(Client.LOGIN_NOTLOGGEDIN);
updateLoginState(LoginState.NOT_LOGGED_IN);
disconnectSession();
}
}

View File

@@ -28,6 +28,7 @@ import client.Client;
import client.Disease;
import client.Family;
import client.FamilyEntry;
import client.LoginState;
import client.Mount;
import client.SkillFactory;
import client.inventory.Equip;
@@ -174,7 +175,7 @@ public final class PlayerLoggedinHandler extends AbstractPacketHandler {
boolean allowLogin = true;
/* is this check really necessary?
if (state == Client.LOGIN_SERVER_TRANSITION || state == Client.LOGIN_NOTLOGGEDIN) {
if (state == LoginState.SERVER_TRANSITION || state == LoginState.NOT_LOGGED_IN) {
List<String> charNames = c.loadCharacterNames(c.getWorld());
if(!newcomer) {
charNames.remove(player.getName());
@@ -193,11 +194,11 @@ public final class PlayerLoggedinHandler extends AbstractPacketHandler {
if (tryAcquireAccount(accId)) { // Sync this to prevent wrong login state for double loggedin handling
try {
int state = c.getLoginState();
if (state != Client.LOGIN_SERVER_TRANSITION || !allowLogin) {
if (state != LoginState.SERVER_TRANSITION || !allowLogin) {
c.setPlayer(null);
c.setAccID(0);
if (state == Client.LOGIN_LOGGEDIN) {
if (state == LoginState.LOGGED_IN) {
throw new GameViolationException("Attempt to log in when already logged in");
} else {
c.sendPacket(PacketCreator.getAfterLoginError(7));
@@ -205,7 +206,7 @@ public final class PlayerLoggedinHandler extends AbstractPacketHandler {
return;
}
c.updateLoginState(Client.LOGIN_LOGGEDIN);
c.updateLoginState(LoginState.LOGGED_IN);
} finally {
releaseAccount(accId);
}

View File

@@ -22,6 +22,7 @@
package net.server.handlers.login;
import client.Client;
import client.LoginState;
import net.AbstractPacketHandler;
import net.packet.InPacket;
import net.server.coordinator.session.SessionCoordinator;
@@ -58,7 +59,7 @@ public final class AfterLoginHandler extends AbstractPacketHandler {
}
} else if (c2 == 0 && c3 == 5) {
SessionCoordinator.getInstance().closeSession(c, false);
c.updateLoginState(Client.LOGIN_NOTLOGGEDIN);
c.updateLoginState(LoginState.NOT_LOGGED_IN);
}
}
}

View File

@@ -24,6 +24,7 @@ package net.server.handlers.login;
import client.Character;
import client.Client;
import client.DefaultDates;
import client.LoginState;
import config.YamlConfig;
import constants.game.GameConstants;
import database.account.Account;
@@ -110,7 +111,7 @@ public final class LoginPasswordHandler implements PacketHandler {
c.setAccount(account);
if (c.getLoginState(account) > Client.LOGIN_NOTLOGGEDIN) {
if (c.getLoginState(account) > LoginState.NOT_LOGGED_IN) {
c.sendPacket(PacketCreator.getLoginFailed(7));
return;
}

View File

@@ -22,6 +22,7 @@
package net.server.handlers.login;
import client.Client;
import client.LoginState;
import net.AbstractPacketHandler;
import net.packet.InPacket;
import net.server.coordinator.session.SessionCoordinator;
@@ -44,7 +45,7 @@ public final class RegisterPinHandler extends AbstractPacketHandler {
boolean cancel = p.readByte() == 0;
if (cancel) {
SessionCoordinator.getInstance().closeSession(c, false);
c.updateLoginState(Client.LOGIN_NOTLOGGEDIN);
c.updateLoginState(LoginState.NOT_LOGGED_IN);
return;
}
@@ -54,6 +55,6 @@ public final class RegisterPinHandler extends AbstractPacketHandler {
c.sendPacket(PacketCreator.pinRegistered());
SessionCoordinator.getInstance().closeSession(c, false);
c.updateLoginState(Client.LOGIN_NOTLOGGEDIN);
c.updateLoginState(LoginState.NOT_LOGGED_IN);
}
}

View File

@@ -24,6 +24,7 @@ package net.server.handlers.login;
import client.Client;
import client.Gender;
import client.LoginState;
import net.AbstractPacketHandler;
import net.packet.InPacket;
import net.server.Server;
@@ -73,7 +74,7 @@ public class SetGenderHandler extends AbstractPacketHandler {
private void close(Client c) {
SessionCoordinator.getInstance().closeSession(c, false);
c.updateLoginState(Client.LOGIN_NOTLOGGEDIN);
c.updateLoginState(LoginState.NOT_LOGGED_IN);
}
}

View File

@@ -2,6 +2,7 @@ package service;
import client.BuddyList;
import client.Client;
import client.LoginState;
import client.inventory.InventoryType;
import config.YamlConfig;
import constants.id.MapId;
@@ -171,11 +172,11 @@ public class TransitionService {
if (!c.isInTransition() && c.isLoggedIn()) {
c.updateLoginState(Client.LOGIN_NOTLOGGEDIN);
c.updateLoginState(LoginState.NOT_LOGGED_IN);
c.clear();
} else {
if (!Server.getInstance().hasCharacteridInTransition(c)) {
c.updateLoginState(Client.LOGIN_NOTLOGGEDIN);
c.updateLoginState(LoginState.NOT_LOGGED_IN);
}
c.clearEngines();