Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Index: java/server/l2/authserver/network/l2/c2s/RequestAuthLogin.java
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- --- java/server/l2/authserver/network/l2/c2s/RequestAuthLogin.java (revision 4dc091beb5a6ba0bf0285559f65c702d64b96dfb)
- +++ java/server/l2/authserver/network/l2/c2s/RequestAuthLogin.java (date 1549815978305)
- @@ -1,10 +1,14 @@
- package l2.authserver.network.l2.c2s;
- import l2.authserver.Config;
- +import l2.authserver.GameServerManager;
- import l2.authserver.IpBanManager;
- import l2.authserver.accounts.Account;
- import l2.authserver.accounts.SessionManager;
- import l2.authserver.crypt.PasswordHash;
- +import l2.authserver.network.gamecomm.GameServer;
- +import l2.authserver.network.gamecomm.as2gs.GetAccountInfo;
- +import l2.authserver.network.gamecomm.as2gs.KickPlayer;
- import l2.authserver.network.l2.L2LoginClient;
- import l2.authserver.network.l2.s2c.LoginFail;
- import l2.authserver.network.l2.s2c.LoginOk;
- @@ -107,6 +111,20 @@
- client.close(LoginFail.LoginFailReason.REASON_ATTEMPTED_RESTRICTED_IP);
- return;
- }
- +
- + for (GameServer gs : GameServerManager.getInstance().getGameServers()) {
- + if (gs.getProtocol() < 2 || !gs.isAuthed()) continue;
- + gs.sendPacket(new GetAccountInfo(user));
- + }
- +
- + for(GameServer gs : GameServerManager.getInstance().getGameServers()) {
- + if(gs.accountAlreadyInGame(user)) {
- + gs.sendPacket(new KickPlayer(user));
- + client.close(LoginFail.LoginFailReason.REASON_ACCOUNT_IN_USE);
- + return;
- + }
- + }
- +
- account.setLastAccess(currentTime);
- account.setLastIP(client.getIpAddress());
- Log.LogAccount(account);
- Index: java/server/l2/authserver/network/gamecomm/gs2as/PlayerAuthRequest.java
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- --- java/server/l2/authserver/network/gamecomm/gs2as/PlayerAuthRequest.java (revision 4dc091beb5a6ba0bf0285559f65c702d64b96dfb)
- +++ java/server/l2/authserver/network/gamecomm/gs2as/PlayerAuthRequest.java (date 1549809434195)
- @@ -28,8 +28,7 @@
- {
- SessionKey skey = new SessionKey(loginOkId1, loginOkId2, playOkId1, playOkId2);
- SessionManager.Session session = SessionManager.getInstance().closeSession(skey);
- - if(session == null || !session.getAccount().getLogin().equals(account))
- - {
- + if (session == null || !session.getAccount().getLogin().equals(account)) {
- sendPacket(new PlayerAuthResponse(account));
- return;
- }
- Index: java/server/l2/authserver/network/l2/c2s/RequestServerLogin.java
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- --- java/server/l2/authserver/network/l2/c2s/RequestServerLogin.java (revision 4dc091beb5a6ba0bf0285559f65c702d64b96dfb)
- +++ java/server/l2/authserver/network/l2/c2s/RequestServerLogin.java (date 1549810358296)
- @@ -45,11 +45,13 @@
- client.close(LoginFail.LoginFailReason.REASON_ACCESS_FAILED);
- return;
- }
- +
- if(gs.isGmOnly() && account.getAccessLevel() < 100)
- {
- client.close(LoginFail.LoginFailReason.REASON_SERVER_MAINTENANCE);
- return;
- }
- +
- account.setLastServer(_serverId);
- account.update();
- client.close(new PlayOk(skey));
- Index: java/server/l2/authserver/accounts/Account.java
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- --- java/server/l2/authserver/accounts/Account.java (revision 4dc091beb5a6ba0bf0285559f65c702d64b96dfb)
- +++ java/server/l2/authserver/accounts/Account.java (date 1549808766532)
- @@ -3,6 +3,10 @@
- import l2.authserver.database.L2DatabaseFactory;
- import l2.commons.dbutils.DbUtils;
- import l2.commons.net.utils.NetList;
- +import org.apache.commons.lang3.tuple.ImmutablePair;
- +import org.apache.commons.lang3.tuple.Pair;
- +import org.napile.primitive.maps.IntObjectMap;
- +import org.napile.primitive.maps.impl.HashIntObjectMap;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- @@ -25,6 +29,8 @@
- private int lastAccess;
- private int lastServer;
- private String email;
- +
- + private IntObjectMap<Pair<Integer, int[]>> _serversInfo = new HashIntObjectMap<Pair<Integer, int[]>>(2);
- public Account(String login)
- {
- @@ -110,7 +116,17 @@
- {
- this.lastServer = lastServer;
- }
- -
- +
- + public void addAccountInfo(int serverId, int size, int[] deleteChars)
- + {
- + _serversInfo.put(serverId, new ImmutablePair<Integer, int[]>(size, deleteChars));
- + }
- +
- + public Pair<Integer, int[]> getAccountInfo(int serverId) {
- + return (Pair)_serversInfo.get(serverId);
- + }
- +
- +
- @Override
- public String toString()
- {
- Index: java/server/l2/authserver/accounts/SessionManager.java
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- --- java/server/l2/authserver/accounts/SessionManager.java (revision 4dc091beb5a6ba0bf0285559f65c702d64b96dfb)
- +++ java/server/l2/authserver/accounts/SessionManager.java (date 1549814900661)
- @@ -1,14 +1,15 @@
- package l2.authserver.accounts;
- +import l2.authserver.GameServerManager;
- import l2.authserver.ThreadPoolManager;
- +import l2.authserver.network.gamecomm.GameServer;
- +import l2.authserver.network.l2.L2LoginClient;
- import l2.authserver.network.l2.SessionKey;
- import l2.commons.threading.RunnableImpl;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- -import java.util.HashMap;
- -import java.util.Iterator;
- -import java.util.Map;
- +import java.util.*;
- import java.util.concurrent.locks.Lock;
- import java.util.concurrent.locks.ReentrantLock;
- @@ -18,6 +19,11 @@
- private static final SessionManager _instance = new SessionManager();
- private final Map<SessionKey, Session> sessions = new HashMap<>();
- private final Lock lock = new ReentrantLock();
- +
- + public static enum AuthLoginResult
- + {
- + INVALID_PASSWORD, ACCOUNT_BANNED, ALREADY_ON_LS, ALREADY_ON_GS, AUTH_SUCCESS, SYSTEM_ERROR, TCARD_REQUIRED
- + }
- private SessionManager()
- {
- @@ -93,7 +99,14 @@
- }
- return null;
- }
- -
- +
- + public boolean isAccountOnGameserver(String account) {
- + if(getSessionByName(account) != null)
- + return true;
- +
- + return false;
- + }
- +
- public final class Session
- {
- private final Account account;
- Index: java/server/l2/gameserver/network/authcomm/PacketHandler.java
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- --- java/server/l2/gameserver/network/authcomm/PacketHandler.java (revision 4dc091beb5a6ba0bf0285559f65c702d64b96dfb)
- +++ java/server/l2/gameserver/network/authcomm/PacketHandler.java (date 1549810953812)
- @@ -36,6 +36,14 @@
- packet = new KickPlayer();
- break;
- }
- + case 4: {
- + packet = new GetAccountInfo();
- + break;
- + }
- + case 5: {
- + packet = new GetAccountInfo();
- + break;
- + }
- case 8: {
- packet = new ChangeSecondaryPasswordResponse();
- break;
- Index: java/server/l2/authserver/network/gamecomm/GameServer.java
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- --- java/server/l2/authserver/network/gamecomm/GameServer.java (revision 4dc091beb5a6ba0bf0285559f65c702d64b96dfb)
- +++ java/server/l2/authserver/network/gamecomm/GameServer.java (date 1549815674532)
- @@ -5,12 +5,15 @@
- import java.net.InetAddress;
- import java.net.UnknownHostException;
- +import java.util.ArrayList;
- +import java.util.List;
- import java.util.concurrent.atomic.AtomicInteger;
- public class GameServer
- {
- private static final Logger _log = Logger.getLogger(GameServer.class);
- private final AtomicInteger _port = new AtomicInteger(0);
- + private List<String> accountsOnGameserver = new ArrayList<String>();
- private int _id;
- private String _internalHost;
- private String _externalHost;
- @@ -137,12 +140,21 @@
- public void addAccount(String account)
- {
- - ++_playersIngame;
- + _playersIngame++;
- + accountsOnGameserver.add(account);
- }
- public void removeAccount(String account)
- {
- - --_playersIngame;
- + _playersIngame--;
- + accountsOnGameserver.remove(account);
- + }
- +
- + public boolean accountAlreadyInGame(String account) {
- + if(accountsOnGameserver.contains(account))
- + return true;
- +
- + return false;
- }
- public void setDown()
- @@ -230,4 +242,8 @@
- {
- _protocol = protocol;
- }
- +
- + public int getProtocol() {
- + return _protocol;
- + }
- }
- \ No newline at end of file
- Index: java/server/l2/gameserver/network/authcomm/as2gs/KickPlayer.java
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- --- java/server/l2/gameserver/network/authcomm/as2gs/KickPlayer.java (revision 4dc091beb5a6ba0bf0285559f65c702d64b96dfb)
- +++ java/server/l2/gameserver/network/authcomm/as2gs/KickPlayer.java (date 1549817716981)
- @@ -10,6 +10,7 @@
- public class KickPlayer extends ReceivablePacket
- {
- String account;
- + private final Object kickPlayer = new Object();
- @Override
- public void readImpl()
- @@ -33,7 +34,7 @@
- if(activeChar != null)
- {
- activeChar.sendPacket(Msg.ANOTHER_PERSON_HAS_LOGGED_IN_WITH_THE_SAME_ACCOUNT);
- - activeChar.kick();
- + activeChar.logout();
- }
- else
- {
- Index: java/server/l2/gameserver/network/authcomm/as2gs/GetAccountInfo.java
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- --- java/server/l2/gameserver/network/authcomm/as2gs/GetAccountInfo.java (date 1549808979325)
- +++ java/server/l2/gameserver/network/authcomm/as2gs/GetAccountInfo.java (date 1549808979325)
- @@ -0,0 +1,65 @@
- +package l2.gameserver.network.authcomm.as2gs;
- +
- +import l2.gameserver.Config;
- +import l2.gameserver.database.DatabaseFactory;
- +import l2.gameserver.network.authcomm.AuthServerCommunication;
- +import l2.gameserver.network.authcomm.ReceivablePacket;
- +
- +import l2.gameserver.network.authcomm.gs2as.SetAccountInfo;
- +import org.napile.primitive.Containers;
- +import org.napile.primitive.lists.IntList;
- +import org.napile.primitive.lists.impl.ArrayIntList;
- +import org.slf4j.Logger;
- +import org.slf4j.LoggerFactory;
- +
- +import java.sql.Connection;
- +import java.sql.PreparedStatement;
- +import java.sql.ResultSet;
- +import java.sql.SQLException;
- +
- +public class GetAccountInfo extends ReceivablePacket
- +{
- + private static final Logger _log = LoggerFactory.getLogger(GetAccountInfo.class);
- + private String _account;
- +
- + @Override
- + protected void readImpl()
- + {
- + _account = readS();
- + }
- +
- + @Override
- + protected void runImpl()
- + {
- + int playerSize = 0;
- + IntList deleteChars = Containers.EMPTY_INT_LIST;
- +
- + try (Connection con = DatabaseFactory.getInstance().getConnection();
- + PreparedStatement statement = con.prepareStatement("SELECT deletetime FROM characters WHERE account_name=?"))
- + {
- + statement.setString(1, _account);
- +
- + try (ResultSet rset = statement.executeQuery())
- + {
- + while (rset.next())
- + {
- + playerSize ++;
- + int d = rset.getInt("deletetime");
- + if (d > 0)
- + {
- + if (deleteChars.isEmpty())
- + deleteChars = new ArrayIntList(3);
- +
- + deleteChars.add(d + Config.DELETE_DAYS * 24 * 60 * 60);
- + }
- + }
- + }
- + }
- + catch (SQLException e)
- + {
- + _log.error("GetAccountInfo:runImpl() ", e);
- + }
- +
- + AuthServerCommunication.getInstance().sendPacket(new SetAccountInfo(_account, playerSize, deleteChars.toArray()));
- + }
- +}
- \ No newline at end of file
- Index: java/server/l2/gameserver/network/authcomm/as2gs/PlayerAuthResponse.java
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- --- java/server/l2/gameserver/network/authcomm/as2gs/PlayerAuthResponse.java (revision 4dc091beb5a6ba0bf0285559f65c702d64b96dfb)
- +++ java/server/l2/gameserver/network/authcomm/as2gs/PlayerAuthResponse.java (date 1549817892174)
- @@ -20,7 +20,7 @@
- private int playOkId2;
- private int loginOkId1;
- private int loginOkId2;
- -
- +
- @Override
- public void readImpl()
- {
- @@ -34,7 +34,7 @@
- loginOkId2 = readD();
- }
- }
- -
- +
- @Override
- protected void runImpl()
- {
- @@ -73,4 +73,4 @@
- client.close(new LoginFail(LoginFail.ACCESS_FAILED_TRY_LATER));
- }
- }
- -}
- \ No newline at end of file
- +}
- Index: java/server/l2/gameserver/network/authcomm/gs2as/SetAccountInfo.java
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- --- java/server/l2/gameserver/network/authcomm/gs2as/SetAccountInfo.java (date 1549808971205)
- +++ java/server/l2/gameserver/network/authcomm/gs2as/SetAccountInfo.java (date 1549808971205)
- @@ -0,0 +1,28 @@
- +package l2.gameserver.network.authcomm.gs2as;
- +
- +import l2.gameserver.network.authcomm.SendablePacket;
- +
- +public class SetAccountInfo extends SendablePacket
- +{
- + private String _account;
- + private int _size;
- + private int[] _deleteChars;
- +
- + public SetAccountInfo(String account, int size, int[] deleteChars)
- + {
- + _account = account;
- + _size = size;
- + _deleteChars = deleteChars;
- + }
- +
- + @Override
- + protected void writeImpl()
- + {
- + writeC(5);
- + writeS(_account);
- + writeC(_size);
- + writeD(_deleteChars.length);
- + for (int i : _deleteChars)
- + writeD(i);
- + }
- +}
- \ No newline at end of file
- Index: java/server/l2/authserver/network/gamecomm/gs2as/GetAccountInfo.java
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- --- java/server/l2/authserver/network/gamecomm/gs2as/GetAccountInfo.java (date 1549807502937)
- +++ java/server/l2/authserver/network/gamecomm/gs2as/GetAccountInfo.java (date 1549807502937)
- @@ -0,0 +1,19 @@
- +package l2.authserver.network.gamecomm.gs2as;
- +
- +import l2.authserver.network.gamecomm.SendablePacket;
- +
- +public class GetAccountInfo
- + extends SendablePacket {
- + private String _name;
- +
- + public GetAccountInfo(String name) {
- + _name = name;
- + }
- +
- + @Override
- + protected void writeImpl() {
- + writeC(0x04);
- + writeS(_name);
- + }
- +}
- +
- Index: java/server/l2/authserver/network/gamecomm/gs2as/SetAccountInfo.java
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- --- java/server/l2/authserver/network/gamecomm/gs2as/SetAccountInfo.java (date 1549807598404)
- +++ java/server/l2/authserver/network/gamecomm/gs2as/SetAccountInfo.java (date 1549807598404)
- @@ -0,0 +1,39 @@
- +package l2.authserver.network.gamecomm.gs2as;
- +
- +import l2.authserver.accounts.SessionManager;
- +import l2.authserver.network.gamecomm.GameServer;
- +import l2.authserver.network.gamecomm.ReceivablePacket;
- +import org.apache.commons.lang3.ArrayUtils;
- +
- +public class SetAccountInfo extends ReceivablePacket {
- + private String _account;
- + private int _size;
- + private int[] _deleteChars;
- +
- + @Override
- + protected void readImpl() {
- + _account = readS();
- + _size = readC();
- + int size = readD();
- + if (size > 7 || size <= 0) {
- + _deleteChars = ArrayUtils.EMPTY_INT_ARRAY;
- + } else {
- + _deleteChars = new int[size];
- + for (int i = 0; i < _deleteChars.length; ++i) {
- + _deleteChars[i] = readD();
- + }
- + }
- + }
- +
- + @Override
- + protected void runImpl() {
- + GameServer gs = getGameServer();
- + if (gs.isAuthed()) {
- + SessionManager.Session session = SessionManager.getInstance().getSessionByName(_account);
- + if (session == null) {
- + return;
- + }
- + session.getAccount().addAccountInfo(gs.getId(), _size, _deleteChars);
- + }
- + }
- +}
- \ No newline at end of file
- Index: java/server/l2/authserver/network/gamecomm/as2gs/GetAccountInfo.java
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- --- java/server/l2/authserver/network/gamecomm/as2gs/GetAccountInfo.java (date 1549807491182)
- +++ java/server/l2/authserver/network/gamecomm/as2gs/GetAccountInfo.java (date 1549807491182)
- @@ -0,0 +1,18 @@
- +package l2.authserver.network.gamecomm.as2gs;
- +
- +import l2.authserver.network.gamecomm.SendablePacket;
- +
- +public class GetAccountInfo
- + extends SendablePacket {
- + private String _name;
- +
- + public GetAccountInfo(String name) {
- + _name = name;
- + }
- +
- + @Override
- + protected void writeImpl() {
- + writeC(0x04);
- + writeS(_name);
- + }
- +}
- \ No newline at end of file
- Index: java/server/l2/authserver/network/gamecomm/PacketHandler.java
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- --- java/server/l2/authserver/network/gamecomm/PacketHandler.java (revision 4dc091beb5a6ba0bf0285559f65c702d64b96dfb)
- +++ java/server/l2/authserver/network/gamecomm/PacketHandler.java (date 1549808805243)
- @@ -1,14 +1,6 @@
- package l2.authserver.network.gamecomm;
- -import l2.authserver.network.gamecomm.gs2as.AuthRequest;
- -import l2.authserver.network.gamecomm.gs2as.ChangeAccessLevel;
- -import l2.authserver.network.gamecomm.gs2as.IGPwdCng;
- -import l2.authserver.network.gamecomm.gs2as.OnlineStatus;
- -import l2.authserver.network.gamecomm.gs2as.PingResponse;
- -import l2.authserver.network.gamecomm.gs2as.PlayerAuthRequest;
- -import l2.authserver.network.gamecomm.gs2as.PlayerInGame;
- -import l2.authserver.network.gamecomm.gs2as.PlayerLogout;
- -import l2.authserver.network.gamecomm.gs2as.ChangeSecondaryPassword;
- +import l2.authserver.network.gamecomm.gs2as.*;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- @@ -49,6 +41,10 @@
- case 4:
- packet = new PlayerLogout();
- break;
- + case 5: {
- + packet = new SetAccountInfo();
- + return packet;
- + }
- case 13:
- packet = new ChangeSecondaryPassword();
- break;
- Index: java/server/l2/gameserver/model/Player.java
- IDEA additional info:
- Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
- <+>UTF-8
- ===================================================================
- --- java/server/l2/gameserver/model/Player.java (revision 4dc091beb5a6ba0bf0285559f65c702d64b96dfb)
- +++ java/server/l2/gameserver/model/Player.java (date 1549817756677)
- @@ -1141,7 +1141,7 @@
- prepareToLogout();
- deleteMe();
- }
- -
- +
- public void restart()
- {
- if(_connection != null)
Advertisement
Add Comment
Please, Sign In to add comment