Removed L2 prefix from LoginServer class name.
This commit is contained in:
parent
fee32f388d
commit
dad8a4b8c9
@ -83,7 +83,7 @@
|
|||||||
<attribute name="Built-Date" value="${time.stamp}" />
|
<attribute name="Built-Date" value="${time.stamp}" />
|
||||||
<attribute name="Implementation-URL" value="http://www.l2jmobius.com/" />
|
<attribute name="Implementation-URL" value="http://www.l2jmobius.com/" />
|
||||||
<attribute name="Class-Path" value="${manifest.libs}" />
|
<attribute name="Class-Path" value="${manifest.libs}" />
|
||||||
<attribute name="Main-Class" value="com.l2jmobius.loginserver.L2LoginServer" />
|
<attribute name="Main-Class" value="com.l2jmobius.loginserver.LoginServer" />
|
||||||
</manifest>
|
</manifest>
|
||||||
</jar>
|
</jar>
|
||||||
<jar destfile="${build.dist.game}/GameServer.jar" level="9">
|
<jar destfile="${build.dist.game}/GameServer.jar" level="9">
|
||||||
|
@ -79,7 +79,7 @@ public class LoginServerThread extends Thread
|
|||||||
protected static final Logger LOGGER = Logger.getLogger(LoginServerThread.class.getName());
|
protected static final Logger LOGGER = Logger.getLogger(LoginServerThread.class.getName());
|
||||||
protected static final Logger ACCOUNTING_LOGGER = Logger.getLogger("accounting");
|
protected static final Logger ACCOUNTING_LOGGER = Logger.getLogger("accounting");
|
||||||
|
|
||||||
/** @see com.l2jmobius.loginserver.L2LoginServer#PROTOCOL_REV */
|
/** @see com.l2jmobius.loginserver.LoginServer#PROTOCOL_REV */
|
||||||
private static final int REVISION = 0x0106;
|
private static final int REVISION = 0x0106;
|
||||||
private final String _hostname;
|
private final String _hostname;
|
||||||
private final int _port;
|
private final int _port;
|
||||||
|
@ -139,8 +139,8 @@ public class GameServerThread extends Thread
|
|||||||
_gsi.setDown();
|
_gsi.setDown();
|
||||||
LOGGER.info("Server [" + getServerId() + "] " + GameServerTable.getInstance().getServerNameById(getServerId()) + " is now set as disconnected");
|
LOGGER.info("Server [" + getServerId() + "] " + GameServerTable.getInstance().getServerNameById(getServerId()) + " is now set as disconnected");
|
||||||
}
|
}
|
||||||
L2LoginServer.getInstance().getGameServerListener().removeGameServer(this);
|
LoginServer.getInstance().getGameServerListener().removeGameServer(this);
|
||||||
L2LoginServer.getInstance().getGameServerListener().removeFloodProtection(_connectionIp);
|
LoginServer.getInstance().getGameServerListener().removeFloodProtection(_connectionIp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,26 +36,26 @@ import com.l2jmobius.loginserver.network.ClientNetworkManager;
|
|||||||
/**
|
/**
|
||||||
* @author KenM
|
* @author KenM
|
||||||
*/
|
*/
|
||||||
public final class L2LoginServer
|
public final class LoginServer
|
||||||
{
|
{
|
||||||
private final Logger LOGGER = Logger.getLogger(L2LoginServer.class.getName());
|
private final Logger LOGGER = Logger.getLogger(LoginServer.class.getName());
|
||||||
|
|
||||||
public static final int PROTOCOL_REV = 0x0106;
|
public static final int PROTOCOL_REV = 0x0106;
|
||||||
private static L2LoginServer _instance;
|
private static LoginServer _instance;
|
||||||
private GameServerListener _gameServerListener;
|
private GameServerListener _gameServerListener;
|
||||||
private Thread _restartLoginServer;
|
private Thread _restartLoginServer;
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception
|
public static void main(String[] args) throws Exception
|
||||||
{
|
{
|
||||||
new L2LoginServer();
|
new LoginServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static L2LoginServer getInstance()
|
public static LoginServer getInstance()
|
||||||
{
|
{
|
||||||
return _instance;
|
return _instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
private L2LoginServer() throws Exception
|
private LoginServer() throws Exception
|
||||||
{
|
{
|
||||||
_instance = this;
|
_instance = this;
|
||||||
Server.serverMode = Server.MODE_LOGINSERVER;
|
Server.serverMode = Server.MODE_LOGINSERVER;
|
@ -17,7 +17,7 @@
|
|||||||
package com.l2jmobius.loginserver.network.loginserverpackets;
|
package com.l2jmobius.loginserver.network.loginserverpackets;
|
||||||
|
|
||||||
import com.l2jmobius.commons.network.BaseSendablePacket;
|
import com.l2jmobius.commons.network.BaseSendablePacket;
|
||||||
import com.l2jmobius.loginserver.L2LoginServer;
|
import com.l2jmobius.loginserver.LoginServer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author -Wooden-
|
* @author -Wooden-
|
||||||
@ -33,7 +33,7 @@ public class InitLS extends BaseSendablePacket
|
|||||||
public InitLS(byte[] publickey)
|
public InitLS(byte[] publickey)
|
||||||
{
|
{
|
||||||
writeC(0x00);
|
writeC(0x00);
|
||||||
writeD(L2LoginServer.PROTOCOL_REV);
|
writeD(LoginServer.PROTOCOL_REV);
|
||||||
writeD(publickey.length);
|
writeD(publickey.length);
|
||||||
writeB(publickey);
|
writeB(publickey);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
<listEntry value="/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/loginserver/L2LoginServer.java"/>
|
<listEntry value="/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/loginserver/LoginServer.java"/>
|
||||||
</listAttribute>
|
</listAttribute>
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
<listEntry value="1"/>
|
<listEntry value="1"/>
|
||||||
@ -13,7 +13,7 @@
|
|||||||
</listAttribute>
|
</listAttribute>
|
||||||
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
|
||||||
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.l2jmobius.loginserver.L2LoginServer"/>
|
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.l2jmobius.loginserver.LoginServer"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="L2J_Mobius_1.0_Ertheia"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="L2J_Mobius_1.0_Ertheia"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:L2J_Mobius_1.0_Ertheia}/dist/login/"/>
|
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:L2J_Mobius_1.0_Ertheia}/dist/login/"/>
|
||||||
</launchConfiguration>
|
</launchConfiguration>
|
||||||
|
@ -83,7 +83,7 @@
|
|||||||
<attribute name="Built-Date" value="${time.stamp}" />
|
<attribute name="Built-Date" value="${time.stamp}" />
|
||||||
<attribute name="Implementation-URL" value="http://www.l2jmobius.com/" />
|
<attribute name="Implementation-URL" value="http://www.l2jmobius.com/" />
|
||||||
<attribute name="Class-Path" value="${manifest.libs}" />
|
<attribute name="Class-Path" value="${manifest.libs}" />
|
||||||
<attribute name="Main-Class" value="com.l2jmobius.loginserver.L2LoginServer" />
|
<attribute name="Main-Class" value="com.l2jmobius.loginserver.LoginServer" />
|
||||||
</manifest>
|
</manifest>
|
||||||
</jar>
|
</jar>
|
||||||
<jar destfile="${build.dist.game}/GameServer.jar" level="9">
|
<jar destfile="${build.dist.game}/GameServer.jar" level="9">
|
||||||
|
@ -79,7 +79,7 @@ public class LoginServerThread extends Thread
|
|||||||
protected static final Logger LOGGER = Logger.getLogger(LoginServerThread.class.getName());
|
protected static final Logger LOGGER = Logger.getLogger(LoginServerThread.class.getName());
|
||||||
protected static final Logger ACCOUNTING_LOGGER = Logger.getLogger("accounting");
|
protected static final Logger ACCOUNTING_LOGGER = Logger.getLogger("accounting");
|
||||||
|
|
||||||
/** @see com.l2jmobius.loginserver.L2LoginServer#PROTOCOL_REV */
|
/** @see com.l2jmobius.loginserver.LoginServer#PROTOCOL_REV */
|
||||||
private static final int REVISION = 0x0106;
|
private static final int REVISION = 0x0106;
|
||||||
private final String _hostname;
|
private final String _hostname;
|
||||||
private final int _port;
|
private final int _port;
|
||||||
|
@ -139,8 +139,8 @@ public class GameServerThread extends Thread
|
|||||||
_gsi.setDown();
|
_gsi.setDown();
|
||||||
LOGGER.info("Server [" + getServerId() + "] " + GameServerTable.getInstance().getServerNameById(getServerId()) + " is now set as disconnected");
|
LOGGER.info("Server [" + getServerId() + "] " + GameServerTable.getInstance().getServerNameById(getServerId()) + " is now set as disconnected");
|
||||||
}
|
}
|
||||||
L2LoginServer.getInstance().getGameServerListener().removeGameServer(this);
|
LoginServer.getInstance().getGameServerListener().removeGameServer(this);
|
||||||
L2LoginServer.getInstance().getGameServerListener().removeFloodProtection(_connectionIp);
|
LoginServer.getInstance().getGameServerListener().removeFloodProtection(_connectionIp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,26 +36,26 @@ import com.l2jmobius.loginserver.network.ClientNetworkManager;
|
|||||||
/**
|
/**
|
||||||
* @author KenM
|
* @author KenM
|
||||||
*/
|
*/
|
||||||
public final class L2LoginServer
|
public final class LoginServer
|
||||||
{
|
{
|
||||||
private final Logger LOGGER = Logger.getLogger(L2LoginServer.class.getName());
|
private final Logger LOGGER = Logger.getLogger(LoginServer.class.getName());
|
||||||
|
|
||||||
public static final int PROTOCOL_REV = 0x0106;
|
public static final int PROTOCOL_REV = 0x0106;
|
||||||
private static L2LoginServer _instance;
|
private static LoginServer _instance;
|
||||||
private GameServerListener _gameServerListener;
|
private GameServerListener _gameServerListener;
|
||||||
private Thread _restartLoginServer;
|
private Thread _restartLoginServer;
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception
|
public static void main(String[] args) throws Exception
|
||||||
{
|
{
|
||||||
new L2LoginServer();
|
new LoginServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static L2LoginServer getInstance()
|
public static LoginServer getInstance()
|
||||||
{
|
{
|
||||||
return _instance;
|
return _instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
private L2LoginServer() throws Exception
|
private LoginServer() throws Exception
|
||||||
{
|
{
|
||||||
_instance = this;
|
_instance = this;
|
||||||
Server.serverMode = Server.MODE_LOGINSERVER;
|
Server.serverMode = Server.MODE_LOGINSERVER;
|
@ -17,7 +17,7 @@
|
|||||||
package com.l2jmobius.loginserver.network.loginserverpackets;
|
package com.l2jmobius.loginserver.network.loginserverpackets;
|
||||||
|
|
||||||
import com.l2jmobius.commons.network.BaseSendablePacket;
|
import com.l2jmobius.commons.network.BaseSendablePacket;
|
||||||
import com.l2jmobius.loginserver.L2LoginServer;
|
import com.l2jmobius.loginserver.LoginServer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author -Wooden-
|
* @author -Wooden-
|
||||||
@ -33,7 +33,7 @@ public class InitLS extends BaseSendablePacket
|
|||||||
public InitLS(byte[] publickey)
|
public InitLS(byte[] publickey)
|
||||||
{
|
{
|
||||||
writeC(0x00);
|
writeC(0x00);
|
||||||
writeD(L2LoginServer.PROTOCOL_REV);
|
writeD(LoginServer.PROTOCOL_REV);
|
||||||
writeD(publickey.length);
|
writeD(publickey.length);
|
||||||
writeB(publickey);
|
writeB(publickey);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
<listEntry value="/L2J_Mobius_2.5_Underground/java/com/l2jmobius/loginserver/L2LoginServer.java"/>
|
<listEntry value="/L2J_Mobius_2.5_Underground/java/com/l2jmobius/loginserver/LoginServer.java"/>
|
||||||
</listAttribute>
|
</listAttribute>
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
<listEntry value="1"/>
|
<listEntry value="1"/>
|
||||||
@ -13,7 +13,7 @@
|
|||||||
</listAttribute>
|
</listAttribute>
|
||||||
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
|
||||||
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.l2jmobius.loginserver.L2LoginServer"/>
|
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.l2jmobius.loginserver.LoginServer"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="L2J_Mobius_2.5_Underground"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="L2J_Mobius_2.5_Underground"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:L2J_Mobius_2.5_Underground}/dist/login/"/>
|
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:L2J_Mobius_2.5_Underground}/dist/login/"/>
|
||||||
</launchConfiguration>
|
</launchConfiguration>
|
||||||
|
@ -83,7 +83,7 @@
|
|||||||
<attribute name="Built-Date" value="${time.stamp}" />
|
<attribute name="Built-Date" value="${time.stamp}" />
|
||||||
<attribute name="Implementation-URL" value="http://www.l2jmobius.com/" />
|
<attribute name="Implementation-URL" value="http://www.l2jmobius.com/" />
|
||||||
<attribute name="Class-Path" value="${manifest.libs}" />
|
<attribute name="Class-Path" value="${manifest.libs}" />
|
||||||
<attribute name="Main-Class" value="com.l2jmobius.loginserver.L2LoginServer" />
|
<attribute name="Main-Class" value="com.l2jmobius.loginserver.LoginServer" />
|
||||||
</manifest>
|
</manifest>
|
||||||
</jar>
|
</jar>
|
||||||
<jar destfile="${build.dist.game}/GameServer.jar" level="9">
|
<jar destfile="${build.dist.game}/GameServer.jar" level="9">
|
||||||
|
@ -80,7 +80,7 @@ public class LoginServerThread extends Thread
|
|||||||
protected static final Logger ACCOUNTING_LOGGER = Logger.getLogger("accounting");
|
protected static final Logger ACCOUNTING_LOGGER = Logger.getLogger("accounting");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see com.l2jmobius.loginserver.L2LoginServer#PROTOCOL_REV
|
* @see com.l2jmobius.loginserver.LoginServer#PROTOCOL_REV
|
||||||
*/
|
*/
|
||||||
private static final int REVISION = 0x0106;
|
private static final int REVISION = 0x0106;
|
||||||
private final String _hostname;
|
private final String _hostname;
|
||||||
|
@ -139,8 +139,8 @@ public class GameServerThread extends Thread
|
|||||||
_gsi.setDown();
|
_gsi.setDown();
|
||||||
LOGGER.info("Server [" + getServerId() + "] " + GameServerTable.getInstance().getServerNameById(getServerId()) + " is now set as disconnected");
|
LOGGER.info("Server [" + getServerId() + "] " + GameServerTable.getInstance().getServerNameById(getServerId()) + " is now set as disconnected");
|
||||||
}
|
}
|
||||||
L2LoginServer.getInstance().getGameServerListener().removeGameServer(this);
|
LoginServer.getInstance().getGameServerListener().removeGameServer(this);
|
||||||
L2LoginServer.getInstance().getGameServerListener().removeFloodProtection(_connectionIp);
|
LoginServer.getInstance().getGameServerListener().removeFloodProtection(_connectionIp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,26 +36,26 @@ import com.l2jmobius.loginserver.network.ClientNetworkManager;
|
|||||||
/**
|
/**
|
||||||
* @author KenM
|
* @author KenM
|
||||||
*/
|
*/
|
||||||
public final class L2LoginServer
|
public final class LoginServer
|
||||||
{
|
{
|
||||||
private final Logger LOGGER = Logger.getLogger(L2LoginServer.class.getName());
|
private final Logger LOGGER = Logger.getLogger(LoginServer.class.getName());
|
||||||
|
|
||||||
public static final int PROTOCOL_REV = 0x0106;
|
public static final int PROTOCOL_REV = 0x0106;
|
||||||
private static L2LoginServer _instance;
|
private static LoginServer _instance;
|
||||||
private GameServerListener _gameServerListener;
|
private GameServerListener _gameServerListener;
|
||||||
private Thread _restartLoginServer;
|
private Thread _restartLoginServer;
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception
|
public static void main(String[] args) throws Exception
|
||||||
{
|
{
|
||||||
new L2LoginServer();
|
new LoginServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static L2LoginServer getInstance()
|
public static LoginServer getInstance()
|
||||||
{
|
{
|
||||||
return _instance;
|
return _instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
private L2LoginServer() throws Exception
|
private LoginServer() throws Exception
|
||||||
{
|
{
|
||||||
_instance = this;
|
_instance = this;
|
||||||
Server.serverMode = Server.MODE_LOGINSERVER;
|
Server.serverMode = Server.MODE_LOGINSERVER;
|
@ -17,7 +17,7 @@
|
|||||||
package com.l2jmobius.loginserver.network.loginserverpackets;
|
package com.l2jmobius.loginserver.network.loginserverpackets;
|
||||||
|
|
||||||
import com.l2jmobius.commons.network.BaseSendablePacket;
|
import com.l2jmobius.commons.network.BaseSendablePacket;
|
||||||
import com.l2jmobius.loginserver.L2LoginServer;
|
import com.l2jmobius.loginserver.LoginServer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author -Wooden-
|
* @author -Wooden-
|
||||||
@ -33,7 +33,7 @@ public class InitLS extends BaseSendablePacket
|
|||||||
public InitLS(byte[] publickey)
|
public InitLS(byte[] publickey)
|
||||||
{
|
{
|
||||||
writeC(0x00);
|
writeC(0x00);
|
||||||
writeD(L2LoginServer.PROTOCOL_REV);
|
writeD(LoginServer.PROTOCOL_REV);
|
||||||
writeD(publickey.length);
|
writeD(publickey.length);
|
||||||
writeB(publickey);
|
writeB(publickey);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
<listEntry value="/L2J_Mobius_3.0_Helios/java/com/l2jmobius/loginserver/L2LoginServer.java"/>
|
<listEntry value="/L2J_Mobius_3.0_Helios/java/com/l2jmobius/loginserver/LoginServer.java"/>
|
||||||
</listAttribute>
|
</listAttribute>
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
<listEntry value="1"/>
|
<listEntry value="1"/>
|
||||||
@ -13,7 +13,7 @@
|
|||||||
</listAttribute>
|
</listAttribute>
|
||||||
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
|
||||||
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.l2jmobius.loginserver.L2LoginServer"/>
|
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.l2jmobius.loginserver.LoginServer"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="L2J_Mobius_3.0_Helios"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="L2J_Mobius_3.0_Helios"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:L2J_Mobius_3.0_Helios}/dist/login/"/>
|
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:L2J_Mobius_3.0_Helios}/dist/login/"/>
|
||||||
</launchConfiguration>
|
</launchConfiguration>
|
||||||
|
@ -83,7 +83,7 @@
|
|||||||
<attribute name="Built-Date" value="${time.stamp}" />
|
<attribute name="Built-Date" value="${time.stamp}" />
|
||||||
<attribute name="Implementation-URL" value="http://www.l2jmobius.com/" />
|
<attribute name="Implementation-URL" value="http://www.l2jmobius.com/" />
|
||||||
<attribute name="Class-Path" value="${manifest.libs}" />
|
<attribute name="Class-Path" value="${manifest.libs}" />
|
||||||
<attribute name="Main-Class" value="com.l2jmobius.loginserver.L2LoginServer" />
|
<attribute name="Main-Class" value="com.l2jmobius.loginserver.LoginServer" />
|
||||||
</manifest>
|
</manifest>
|
||||||
</jar>
|
</jar>
|
||||||
<jar destfile="${build.dist.game}/GameServer.jar" level="9">
|
<jar destfile="${build.dist.game}/GameServer.jar" level="9">
|
||||||
|
@ -80,7 +80,7 @@ public class LoginServerThread extends Thread
|
|||||||
protected static final Logger ACCOUNTING_LOGGER = Logger.getLogger("accounting");
|
protected static final Logger ACCOUNTING_LOGGER = Logger.getLogger("accounting");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see com.l2jmobius.loginserver.L2LoginServer#PROTOCOL_REV
|
* @see com.l2jmobius.loginserver.LoginServer#PROTOCOL_REV
|
||||||
*/
|
*/
|
||||||
private static final int REVISION = 0x0106;
|
private static final int REVISION = 0x0106;
|
||||||
private final String _hostname;
|
private final String _hostname;
|
||||||
|
@ -139,8 +139,8 @@ public class GameServerThread extends Thread
|
|||||||
_gsi.setDown();
|
_gsi.setDown();
|
||||||
LOGGER.info("Server [" + getServerId() + "] " + GameServerTable.getInstance().getServerNameById(getServerId()) + " is now set as disconnected");
|
LOGGER.info("Server [" + getServerId() + "] " + GameServerTable.getInstance().getServerNameById(getServerId()) + " is now set as disconnected");
|
||||||
}
|
}
|
||||||
L2LoginServer.getInstance().getGameServerListener().removeGameServer(this);
|
LoginServer.getInstance().getGameServerListener().removeGameServer(this);
|
||||||
L2LoginServer.getInstance().getGameServerListener().removeFloodProtection(_connectionIp);
|
LoginServer.getInstance().getGameServerListener().removeFloodProtection(_connectionIp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,26 +36,26 @@ import com.l2jmobius.loginserver.network.ClientNetworkManager;
|
|||||||
/**
|
/**
|
||||||
* @author KenM
|
* @author KenM
|
||||||
*/
|
*/
|
||||||
public final class L2LoginServer
|
public final class LoginServer
|
||||||
{
|
{
|
||||||
private final Logger LOGGER = Logger.getLogger(L2LoginServer.class.getName());
|
private final Logger LOGGER = Logger.getLogger(LoginServer.class.getName());
|
||||||
|
|
||||||
public static final int PROTOCOL_REV = 0x0106;
|
public static final int PROTOCOL_REV = 0x0106;
|
||||||
private static L2LoginServer _instance;
|
private static LoginServer _instance;
|
||||||
private GameServerListener _gameServerListener;
|
private GameServerListener _gameServerListener;
|
||||||
private Thread _restartLoginServer;
|
private Thread _restartLoginServer;
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception
|
public static void main(String[] args) throws Exception
|
||||||
{
|
{
|
||||||
new L2LoginServer();
|
new LoginServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static L2LoginServer getInstance()
|
public static LoginServer getInstance()
|
||||||
{
|
{
|
||||||
return _instance;
|
return _instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
private L2LoginServer() throws Exception
|
private LoginServer() throws Exception
|
||||||
{
|
{
|
||||||
_instance = this;
|
_instance = this;
|
||||||
Server.serverMode = Server.MODE_LOGINSERVER;
|
Server.serverMode = Server.MODE_LOGINSERVER;
|
@ -17,7 +17,7 @@
|
|||||||
package com.l2jmobius.loginserver.network.loginserverpackets;
|
package com.l2jmobius.loginserver.network.loginserverpackets;
|
||||||
|
|
||||||
import com.l2jmobius.commons.network.BaseSendablePacket;
|
import com.l2jmobius.commons.network.BaseSendablePacket;
|
||||||
import com.l2jmobius.loginserver.L2LoginServer;
|
import com.l2jmobius.loginserver.LoginServer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author -Wooden-
|
* @author -Wooden-
|
||||||
@ -33,7 +33,7 @@ public class InitLS extends BaseSendablePacket
|
|||||||
public InitLS(byte[] publickey)
|
public InitLS(byte[] publickey)
|
||||||
{
|
{
|
||||||
writeC(0x00);
|
writeC(0x00);
|
||||||
writeD(L2LoginServer.PROTOCOL_REV);
|
writeD(LoginServer.PROTOCOL_REV);
|
||||||
writeD(publickey.length);
|
writeD(publickey.length);
|
||||||
writeB(publickey);
|
writeB(publickey);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
<listEntry value="/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/loginserver/L2LoginServer.java"/>
|
<listEntry value="/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/loginserver/LoginServer.java"/>
|
||||||
</listAttribute>
|
</listAttribute>
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
<listEntry value="1"/>
|
<listEntry value="1"/>
|
||||||
@ -13,7 +13,7 @@
|
|||||||
</listAttribute>
|
</listAttribute>
|
||||||
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
|
||||||
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.l2jmobius.loginserver.L2LoginServer"/>
|
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.l2jmobius.loginserver.LoginServer"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="L2J_Mobius_4.0_GrandCrusade"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="L2J_Mobius_4.0_GrandCrusade"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:L2J_Mobius_4.0_GrandCrusade}/dist/login/"/>
|
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:L2J_Mobius_4.0_GrandCrusade}/dist/login/"/>
|
||||||
</launchConfiguration>
|
</launchConfiguration>
|
||||||
|
@ -80,7 +80,7 @@
|
|||||||
<attribute name="Built-Date" value="${time.stamp}" />
|
<attribute name="Built-Date" value="${time.stamp}" />
|
||||||
<attribute name="Implementation-URL" value="http://www.l2jmobius.com/" />
|
<attribute name="Implementation-URL" value="http://www.l2jmobius.com/" />
|
||||||
<attribute name="Class-Path" value="${manifest.libs}" />
|
<attribute name="Class-Path" value="${manifest.libs}" />
|
||||||
<attribute name="Main-Class" value="com.l2jmobius.loginserver.L2LoginServer" />
|
<attribute name="Main-Class" value="com.l2jmobius.loginserver.LoginServer" />
|
||||||
</manifest>
|
</manifest>
|
||||||
</jar>
|
</jar>
|
||||||
<jar destfile="${build.dist.game}/GameServer.jar" level="9">
|
<jar destfile="${build.dist.game}/GameServer.jar" level="9">
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
err=1
|
err=1
|
||||||
until [ $err == 0 ];
|
until [ $err == 0 ];
|
||||||
do
|
do
|
||||||
java -Dfile.encoding=UTF-8 -Djava.util.logging.config.file=config/others/log.cfg -Xms128m -Xmx128m -cp lib/*:LoginServer.jar com.l2jmobius.loginserver.L2LoginServer > log/stdout.log 2>&1
|
java -Dfile.encoding=UTF-8 -Djava.util.logging.config.file=config/others/log.cfg -Xms128m -Xmx128m -cp lib/*:LoginServer.jar com.l2jmobius.loginserver.LoginServer > log/stdout.log 2>&1
|
||||||
err=$?
|
err=$?
|
||||||
# /etc/init.d/mysql restart
|
# /etc/init.d/mysql restart
|
||||||
sleep 10;
|
sleep 10;
|
||||||
|
@ -5,7 +5,7 @@ title L2J Mobius - Login Server Console
|
|||||||
echo Starting Login Server.
|
echo Starting Login Server.
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
java -version:1.8 -server -Dfile.encoding=UTF-8 -Djava.util.logging.config.file=config/others/log.cfg -Xms128m -Xmx256m -cp ./lib/*;LoginServer.jar com.l2jmobius.loginserver.L2LoginServer
|
java -version:1.8 -server -Dfile.encoding=UTF-8 -Djava.util.logging.config.file=config/others/log.cfg -Xms128m -Xmx256m -cp ./lib/*;LoginServer.jar com.l2jmobius.loginserver.LoginServer
|
||||||
|
|
||||||
if ERRORLEVEL 2 goto restart
|
if ERRORLEVEL 2 goto restart
|
||||||
if ERRORLEVEL 1 goto error
|
if ERRORLEVEL 1 goto error
|
||||||
|
@ -219,8 +219,8 @@ public class GameServerThread extends Thread
|
|||||||
LOGGER.info("Server [" + getServerId() + "] " + GameServerTable.getInstance().getServerNameById(getServerId()) + " is now set as disconnected");
|
LOGGER.info("Server [" + getServerId() + "] " + GameServerTable.getInstance().getServerNameById(getServerId()) + " is now set as disconnected");
|
||||||
}
|
}
|
||||||
|
|
||||||
L2LoginServer.getInstance().getGameServerListener().removeGameServer(this);
|
LoginServer.getInstance().getGameServerListener().removeGameServer(this);
|
||||||
L2LoginServer.getInstance().getGameServerListener().removeFloodProtection(_connectionIp);
|
LoginServer.getInstance().getGameServerListener().removeFloodProtection(_connectionIp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,13 +35,13 @@ import com.l2jmobius.commons.mmocore.SelectorThread;
|
|||||||
import com.l2jmobius.commons.util.Util;
|
import com.l2jmobius.commons.util.Util;
|
||||||
import com.l2jmobius.status.Status;
|
import com.l2jmobius.status.Status;
|
||||||
|
|
||||||
public class L2LoginServer
|
public class LoginServer
|
||||||
{
|
{
|
||||||
private final Logger LOGGER = Logger.getLogger(L2LoginServer.class.getName());
|
private final Logger LOGGER = Logger.getLogger(LoginServer.class.getName());
|
||||||
|
|
||||||
public static final int PROTOCOL_REV = 0x0102;
|
public static final int PROTOCOL_REV = 0x0102;
|
||||||
|
|
||||||
private static L2LoginServer _instance;
|
private static LoginServer _instance;
|
||||||
|
|
||||||
private GameServerListener _gameServerListener;
|
private GameServerListener _gameServerListener;
|
||||||
private SelectorThread<L2LoginClient> _selectorThread;
|
private SelectorThread<L2LoginClient> _selectorThread;
|
||||||
@ -49,15 +49,15 @@ public class L2LoginServer
|
|||||||
|
|
||||||
public static void main(String[] args)
|
public static void main(String[] args)
|
||||||
{
|
{
|
||||||
_instance = new L2LoginServer();
|
_instance = new LoginServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static L2LoginServer getInstance()
|
public static LoginServer getInstance()
|
||||||
{
|
{
|
||||||
return _instance;
|
return _instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public L2LoginServer()
|
public LoginServer()
|
||||||
{
|
{
|
||||||
_instance = this;
|
_instance = this;
|
||||||
Server.serverMode = Server.MODE_LOGINSERVER;
|
Server.serverMode = Server.MODE_LOGINSERVER;
|
@ -16,7 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.l2jmobius.loginserver.network.loginserverpackets;
|
package com.l2jmobius.loginserver.network.loginserverpackets;
|
||||||
|
|
||||||
import com.l2jmobius.loginserver.L2LoginServer;
|
import com.l2jmobius.loginserver.LoginServer;
|
||||||
import com.l2jmobius.loginserver.network.serverpackets.ServerBasePacket;
|
import com.l2jmobius.loginserver.network.serverpackets.ServerBasePacket;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -33,7 +33,7 @@ public class InitLS extends ServerBasePacket
|
|||||||
public InitLS(byte[] publickey)
|
public InitLS(byte[] publickey)
|
||||||
{
|
{
|
||||||
writeC(0x00);
|
writeC(0x00);
|
||||||
writeD(L2LoginServer.PROTOCOL_REV);
|
writeD(LoginServer.PROTOCOL_REV);
|
||||||
writeD(publickey.length);
|
writeD(publickey.length);
|
||||||
writeB(publickey);
|
writeB(publickey);
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ import java.util.logging.Logger;
|
|||||||
|
|
||||||
import com.l2jmobius.Config;
|
import com.l2jmobius.Config;
|
||||||
import com.l2jmobius.loginserver.GameServerTable;
|
import com.l2jmobius.loginserver.GameServerTable;
|
||||||
import com.l2jmobius.loginserver.L2LoginServer;
|
import com.l2jmobius.loginserver.LoginServer;
|
||||||
import com.l2jmobius.loginserver.LoginController;
|
import com.l2jmobius.loginserver.LoginController;
|
||||||
|
|
||||||
public class LoginStatusThread extends Thread
|
public class LoginStatusThread extends Thread
|
||||||
@ -243,14 +243,14 @@ public class LoginStatusThread extends Thread
|
|||||||
}
|
}
|
||||||
else if (_usrCommand.startsWith("shutdown"))
|
else if (_usrCommand.startsWith("shutdown"))
|
||||||
{
|
{
|
||||||
L2LoginServer.getInstance().shutdown(false);
|
LoginServer.getInstance().shutdown(false);
|
||||||
_print.println("Bye Bye!");
|
_print.println("Bye Bye!");
|
||||||
_print.flush();
|
_print.flush();
|
||||||
_cSocket.close();
|
_cSocket.close();
|
||||||
}
|
}
|
||||||
else if (_usrCommand.startsWith("restart"))
|
else if (_usrCommand.startsWith("restart"))
|
||||||
{
|
{
|
||||||
L2LoginServer.getInstance().shutdown(true);
|
LoginServer.getInstance().shutdown(true);
|
||||||
_print.println("Bye Bye!");
|
_print.println("Bye Bye!");
|
||||||
_print.flush();
|
_print.flush();
|
||||||
_cSocket.close();
|
_cSocket.close();
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
<listEntry value="/L2J_Mobius_C6_Interlude/java/com/l2jmobius/loginserver/L2LoginServer.java"/>
|
<listEntry value="/L2J_Mobius_C6_Interlude/java/com/l2jmobius/loginserver/LoginServer.java"/>
|
||||||
</listAttribute>
|
</listAttribute>
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
<listEntry value="1"/>
|
<listEntry value="1"/>
|
||||||
@ -13,7 +13,7 @@
|
|||||||
</listAttribute>
|
</listAttribute>
|
||||||
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
|
||||||
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.l2jmobius.loginserver.L2LoginServer"/>
|
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.l2jmobius.loginserver.LoginServer"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="L2J_Mobius_C6_Interlude"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="L2J_Mobius_C6_Interlude"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:L2J_Mobius_C6_Interlude}/dist/login/"/>
|
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:L2J_Mobius_C6_Interlude}/dist/login/"/>
|
||||||
</launchConfiguration>
|
</launchConfiguration>
|
||||||
|
@ -83,7 +83,7 @@
|
|||||||
<attribute name="Built-Date" value="${time.stamp}" />
|
<attribute name="Built-Date" value="${time.stamp}" />
|
||||||
<attribute name="Implementation-URL" value="http://www.l2jmobius.com/" />
|
<attribute name="Implementation-URL" value="http://www.l2jmobius.com/" />
|
||||||
<attribute name="Class-Path" value="${manifest.libs}" />
|
<attribute name="Class-Path" value="${manifest.libs}" />
|
||||||
<attribute name="Main-Class" value="com.l2jmobius.loginserver.L2LoginServer" />
|
<attribute name="Main-Class" value="com.l2jmobius.loginserver.LoginServer" />
|
||||||
</manifest>
|
</manifest>
|
||||||
</jar>
|
</jar>
|
||||||
<jar destfile="${build.dist.game}/GameServer.jar" level="9">
|
<jar destfile="${build.dist.game}/GameServer.jar" level="9">
|
||||||
|
@ -79,7 +79,7 @@ public class LoginServerThread extends Thread
|
|||||||
protected static final Logger LOGGER = Logger.getLogger(LoginServerThread.class.getName());
|
protected static final Logger LOGGER = Logger.getLogger(LoginServerThread.class.getName());
|
||||||
protected static final Logger ACCOUNTING_LOGGER = Logger.getLogger("accounting");
|
protected static final Logger ACCOUNTING_LOGGER = Logger.getLogger("accounting");
|
||||||
|
|
||||||
/** @see com.l2jmobius.loginserver.L2LoginServer#PROTOCOL_REV */
|
/** @see com.l2jmobius.loginserver.LoginServer#PROTOCOL_REV */
|
||||||
private static final int REVISION = 0x0106;
|
private static final int REVISION = 0x0106;
|
||||||
private final String _hostname;
|
private final String _hostname;
|
||||||
private final int _port;
|
private final int _port;
|
||||||
|
@ -139,8 +139,8 @@ public class GameServerThread extends Thread
|
|||||||
_gsi.setDown();
|
_gsi.setDown();
|
||||||
LOGGER.info("Server [" + getServerId() + "] " + GameServerTable.getInstance().getServerNameById(getServerId()) + " is now set as disconnected");
|
LOGGER.info("Server [" + getServerId() + "] " + GameServerTable.getInstance().getServerNameById(getServerId()) + " is now set as disconnected");
|
||||||
}
|
}
|
||||||
L2LoginServer.getInstance().getGameServerListener().removeGameServer(this);
|
LoginServer.getInstance().getGameServerListener().removeGameServer(this);
|
||||||
L2LoginServer.getInstance().getGameServerListener().removeFloodProtection(_connectionIp);
|
LoginServer.getInstance().getGameServerListener().removeFloodProtection(_connectionIp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,216 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the L2J Mobius project.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.l2jmobius.loginserver;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.LineNumberReader;
|
|
||||||
import java.net.UnknownHostException;
|
|
||||||
import java.security.GeneralSecurityException;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.LogManager;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import com.l2jmobius.Config;
|
|
||||||
import com.l2jmobius.Server;
|
|
||||||
import com.l2jmobius.commons.database.DatabaseFactory;
|
|
||||||
import com.l2jmobius.loginserver.network.ClientNetworkManager;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author KenM
|
|
||||||
*/
|
|
||||||
public final class L2LoginServer
|
|
||||||
{
|
|
||||||
private final Logger LOGGER = Logger.getLogger(L2LoginServer.class.getName());
|
|
||||||
|
|
||||||
public static final int PROTOCOL_REV = 0x0106;
|
|
||||||
private static L2LoginServer _instance;
|
|
||||||
private GameServerListener _gameServerListener;
|
|
||||||
private Thread _restartLoginServer;
|
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception
|
|
||||||
{
|
|
||||||
new L2LoginServer();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static L2LoginServer getInstance()
|
|
||||||
{
|
|
||||||
return _instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private L2LoginServer() throws Exception
|
|
||||||
{
|
|
||||||
_instance = this;
|
|
||||||
Server.serverMode = Server.MODE_LOGINSERVER;
|
|
||||||
|
|
||||||
// Local Constants
|
|
||||||
final String LOG_FOLDER = "log"; // Name of folder for log file
|
|
||||||
final String LOG_NAME = "./log.cfg"; // Name of log file
|
|
||||||
|
|
||||||
/*** Main ***/
|
|
||||||
// Create log folder
|
|
||||||
final File logFolder = new File(".", LOG_FOLDER);
|
|
||||||
logFolder.mkdir();
|
|
||||||
|
|
||||||
// Create input stream for log file -- or store file data into memory
|
|
||||||
|
|
||||||
try (InputStream is = new FileInputStream(new File(LOG_NAME)))
|
|
||||||
{
|
|
||||||
LogManager.getLogManager().readConfiguration(is);
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
LOGGER.warning(getClass().getSimpleName() + ": " + e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load Config
|
|
||||||
Config.load();
|
|
||||||
|
|
||||||
// Prepare Database
|
|
||||||
DatabaseFactory.getInstance();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
LoginController.load();
|
|
||||||
}
|
|
||||||
catch (GeneralSecurityException e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.SEVERE, "FATAL: Failed initializing LoginController. Reason: " + e.getMessage(), e);
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
GameServerTable.getInstance();
|
|
||||||
|
|
||||||
loadBanFile();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_gameServerListener = new GameServerListener();
|
|
||||||
_gameServerListener.start();
|
|
||||||
LOGGER.info("Listening for GameServers on " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.SEVERE, "FATAL: Failed to start the Game Server Listener. Reason: " + e.getMessage(), e);
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
|
||||||
}
|
|
||||||
|
|
||||||
public GameServerListener getGameServerListener()
|
|
||||||
{
|
|
||||||
return _gameServerListener;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loadBanFile()
|
|
||||||
{
|
|
||||||
final File bannedFile = new File("./banned_ip.cfg");
|
|
||||||
if (bannedFile.exists() && bannedFile.isFile())
|
|
||||||
{
|
|
||||||
try (FileInputStream fis = new FileInputStream(bannedFile);
|
|
||||||
InputStreamReader is = new InputStreamReader(fis);
|
|
||||||
LineNumberReader lnr = new LineNumberReader(is))
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
lnr.lines()
|
|
||||||
.map(String::trim)
|
|
||||||
.filter(l -> !l.isEmpty() && (l.charAt(0) != '#'))
|
|
||||||
.forEach(line -> {
|
|
||||||
String[] parts = line.split("#", 2); // address[ duration][ # comments]
|
|
||||||
line = parts[0];
|
|
||||||
parts = line.split("\\s+"); // durations might be aligned via multiple spaces
|
|
||||||
final String address = parts[0];
|
|
||||||
long duration = 0;
|
|
||||||
|
|
||||||
if (parts.length > 1)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
duration = Long.parseLong(parts[1]);
|
|
||||||
}
|
|
||||||
catch (NumberFormatException nfe)
|
|
||||||
{
|
|
||||||
LOGGER.warning("Skipped: Incorrect ban duration (" + parts[1] + ") on (" + bannedFile.getName() + "). Line: " + lnr.getLineNumber());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
LoginController.getInstance().addBanForAddress(address, duration);
|
|
||||||
}
|
|
||||||
catch (UnknownHostException e)
|
|
||||||
{
|
|
||||||
LOGGER.warning("Skipped: Invalid address (" + address + ") on (" + bannedFile.getName() + "). Line: " + lnr.getLineNumber());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.WARNING, "Error while reading the bans file (" + bannedFile.getName() + "). Details: " + e.getMessage(), e);
|
|
||||||
}
|
|
||||||
LOGGER.info("Loaded " + LoginController.getInstance().getBannedIps().size() + " IP Bans.");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOGGER.warning("IP Bans file (" + bannedFile.getName() + ") is missing or is a directory, skipped.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Config.LOGIN_SERVER_SCHEDULE_RESTART)
|
|
||||||
{
|
|
||||||
LOGGER.info("Scheduled LS restart after " + Config.LOGIN_SERVER_SCHEDULE_RESTART_TIME + " hours");
|
|
||||||
_restartLoginServer = new LoginServerRestart();
|
|
||||||
_restartLoginServer.setDaemon(true);
|
|
||||||
_restartLoginServer.start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class LoginServerRestart extends Thread
|
|
||||||
{
|
|
||||||
public LoginServerRestart()
|
|
||||||
{
|
|
||||||
setName("LoginServerRestart");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
while (!isInterrupted())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Thread.sleep(Config.LOGIN_SERVER_SCHEDULE_RESTART_TIME * 3600000);
|
|
||||||
}
|
|
||||||
catch (InterruptedException e)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
shutdown(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void shutdown(boolean restart)
|
|
||||||
{
|
|
||||||
Runtime.getRuntime().exit(restart ? 2 : 0);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,216 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the L2J Mobius project.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.l2jmobius.loginserver;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.LineNumberReader;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.security.GeneralSecurityException;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.LogManager;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import com.l2jmobius.Config;
|
||||||
|
import com.l2jmobius.Server;
|
||||||
|
import com.l2jmobius.commons.database.DatabaseFactory;
|
||||||
|
import com.l2jmobius.loginserver.network.ClientNetworkManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author KenM
|
||||||
|
*/
|
||||||
|
public final class LoginServer
|
||||||
|
{
|
||||||
|
private final Logger LOGGER = Logger.getLogger(LoginServer.class.getName());
|
||||||
|
|
||||||
|
public static final int PROTOCOL_REV = 0x0106;
|
||||||
|
private static LoginServer _instance;
|
||||||
|
private GameServerListener _gameServerListener;
|
||||||
|
private Thread _restartLoginServer;
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception
|
||||||
|
{
|
||||||
|
new LoginServer();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LoginServer getInstance()
|
||||||
|
{
|
||||||
|
return _instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LoginServer() throws Exception
|
||||||
|
{
|
||||||
|
_instance = this;
|
||||||
|
Server.serverMode = Server.MODE_LOGINSERVER;
|
||||||
|
|
||||||
|
// Local Constants
|
||||||
|
final String LOG_FOLDER = "log"; // Name of folder for log file
|
||||||
|
final String LOG_NAME = "./log.cfg"; // Name of log file
|
||||||
|
|
||||||
|
/*** Main ***/
|
||||||
|
// Create log folder
|
||||||
|
final File logFolder = new File(".", LOG_FOLDER);
|
||||||
|
logFolder.mkdir();
|
||||||
|
|
||||||
|
// Create input stream for log file -- or store file data into memory
|
||||||
|
|
||||||
|
try (InputStream is = new FileInputStream(new File(LOG_NAME)))
|
||||||
|
{
|
||||||
|
LogManager.getLogManager().readConfiguration(is);
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
LOGGER.warning(getClass().getSimpleName() + ": " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load Config
|
||||||
|
Config.load();
|
||||||
|
|
||||||
|
// Prepare Database
|
||||||
|
DatabaseFactory.getInstance();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
LoginController.load();
|
||||||
|
}
|
||||||
|
catch (GeneralSecurityException e)
|
||||||
|
{
|
||||||
|
LOGGER.log(Level.SEVERE, "FATAL: Failed initializing LoginController. Reason: " + e.getMessage(), e);
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
GameServerTable.getInstance();
|
||||||
|
|
||||||
|
loadBanFile();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_gameServerListener = new GameServerListener();
|
||||||
|
_gameServerListener.start();
|
||||||
|
LOGGER.info("Listening for GameServers on " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
LOGGER.log(Level.SEVERE, "FATAL: Failed to start the Game Server Listener. Reason: " + e.getMessage(), e);
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
ClientNetworkManager.getInstance().start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public GameServerListener getGameServerListener()
|
||||||
|
{
|
||||||
|
return _gameServerListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadBanFile()
|
||||||
|
{
|
||||||
|
final File bannedFile = new File("./banned_ip.cfg");
|
||||||
|
if (bannedFile.exists() && bannedFile.isFile())
|
||||||
|
{
|
||||||
|
try (FileInputStream fis = new FileInputStream(bannedFile);
|
||||||
|
InputStreamReader is = new InputStreamReader(fis);
|
||||||
|
LineNumberReader lnr = new LineNumberReader(is))
|
||||||
|
{
|
||||||
|
//@formatter:off
|
||||||
|
lnr.lines()
|
||||||
|
.map(String::trim)
|
||||||
|
.filter(l -> !l.isEmpty() && (l.charAt(0) != '#'))
|
||||||
|
.forEach(line -> {
|
||||||
|
String[] parts = line.split("#", 2); // address[ duration][ # comments]
|
||||||
|
line = parts[0];
|
||||||
|
parts = line.split("\\s+"); // durations might be aligned via multiple spaces
|
||||||
|
final String address = parts[0];
|
||||||
|
long duration = 0;
|
||||||
|
|
||||||
|
if (parts.length > 1)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
duration = Long.parseLong(parts[1]);
|
||||||
|
}
|
||||||
|
catch (NumberFormatException nfe)
|
||||||
|
{
|
||||||
|
LOGGER.warning("Skipped: Incorrect ban duration (" + parts[1] + ") on (" + bannedFile.getName() + "). Line: " + lnr.getLineNumber());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
LoginController.getInstance().addBanForAddress(address, duration);
|
||||||
|
}
|
||||||
|
catch (UnknownHostException e)
|
||||||
|
{
|
||||||
|
LOGGER.warning("Skipped: Invalid address (" + address + ") on (" + bannedFile.getName() + "). Line: " + lnr.getLineNumber());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
//@formatter:on
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
LOGGER.log(Level.WARNING, "Error while reading the bans file (" + bannedFile.getName() + "). Details: " + e.getMessage(), e);
|
||||||
|
}
|
||||||
|
LOGGER.info("Loaded " + LoginController.getInstance().getBannedIps().size() + " IP Bans.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOGGER.warning("IP Bans file (" + bannedFile.getName() + ") is missing or is a directory, skipped.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Config.LOGIN_SERVER_SCHEDULE_RESTART)
|
||||||
|
{
|
||||||
|
LOGGER.info("Scheduled LS restart after " + Config.LOGIN_SERVER_SCHEDULE_RESTART_TIME + " hours");
|
||||||
|
_restartLoginServer = new LoginServerRestart();
|
||||||
|
_restartLoginServer.setDaemon(true);
|
||||||
|
_restartLoginServer.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class LoginServerRestart extends Thread
|
||||||
|
{
|
||||||
|
public LoginServerRestart()
|
||||||
|
{
|
||||||
|
setName("LoginServerRestart");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
while (!isInterrupted())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Thread.sleep(Config.LOGIN_SERVER_SCHEDULE_RESTART_TIME * 3600000);
|
||||||
|
}
|
||||||
|
catch (InterruptedException e)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
shutdown(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void shutdown(boolean restart)
|
||||||
|
{
|
||||||
|
Runtime.getRuntime().exit(restart ? 2 : 0);
|
||||||
|
}
|
||||||
|
}
|
@ -17,7 +17,7 @@
|
|||||||
package com.l2jmobius.loginserver.network.loginserverpackets;
|
package com.l2jmobius.loginserver.network.loginserverpackets;
|
||||||
|
|
||||||
import com.l2jmobius.commons.network.BaseSendablePacket;
|
import com.l2jmobius.commons.network.BaseSendablePacket;
|
||||||
import com.l2jmobius.loginserver.L2LoginServer;
|
import com.l2jmobius.loginserver.LoginServer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author -Wooden-
|
* @author -Wooden-
|
||||||
@ -33,7 +33,7 @@ public class InitLS extends BaseSendablePacket
|
|||||||
public InitLS(byte[] publickey)
|
public InitLS(byte[] publickey)
|
||||||
{
|
{
|
||||||
writeC(0x00);
|
writeC(0x00);
|
||||||
writeD(L2LoginServer.PROTOCOL_REV);
|
writeD(LoginServer.PROTOCOL_REV);
|
||||||
writeD(publickey.length);
|
writeD(publickey.length);
|
||||||
writeB(publickey);
|
writeB(publickey);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
<listEntry value="/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/loginserver/L2LoginServer.java"/>
|
<listEntry value="/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/loginserver/LoginServer.java"/>
|
||||||
</listAttribute>
|
</listAttribute>
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
<listEntry value="1"/>
|
<listEntry value="1"/>
|
||||||
@ -13,7 +13,7 @@
|
|||||||
</listAttribute>
|
</listAttribute>
|
||||||
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
|
||||||
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.l2jmobius.loginserver.L2LoginServer"/>
|
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.l2jmobius.loginserver.LoginServer"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="L2J_Mobius_CT_2.6_HighFive"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="L2J_Mobius_CT_2.6_HighFive"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:L2J_Mobius_CT_2.6_HighFive}/dist/login/"/>
|
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:L2J_Mobius_CT_2.6_HighFive}/dist/login/"/>
|
||||||
</launchConfiguration>
|
</launchConfiguration>
|
||||||
|
@ -83,7 +83,7 @@
|
|||||||
<attribute name="Built-Date" value="${time.stamp}" />
|
<attribute name="Built-Date" value="${time.stamp}" />
|
||||||
<attribute name="Implementation-URL" value="http://www.l2jmobius.com/" />
|
<attribute name="Implementation-URL" value="http://www.l2jmobius.com/" />
|
||||||
<attribute name="Class-Path" value="${manifest.libs}" />
|
<attribute name="Class-Path" value="${manifest.libs}" />
|
||||||
<attribute name="Main-Class" value="com.l2jmobius.loginserver.L2LoginServer" />
|
<attribute name="Main-Class" value="com.l2jmobius.loginserver.LoginServer" />
|
||||||
</manifest>
|
</manifest>
|
||||||
</jar>
|
</jar>
|
||||||
<jar destfile="${build.dist.game}/GameServer.jar" level="9">
|
<jar destfile="${build.dist.game}/GameServer.jar" level="9">
|
||||||
|
@ -80,7 +80,7 @@ public class LoginServerThread extends Thread
|
|||||||
protected static final Logger ACCOUNTING_LOGGER = Logger.getLogger("accounting");
|
protected static final Logger ACCOUNTING_LOGGER = Logger.getLogger("accounting");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see com.l2jmobius.loginserver.L2LoginServer#PROTOCOL_REV
|
* @see com.l2jmobius.loginserver.LoginServer#PROTOCOL_REV
|
||||||
*/
|
*/
|
||||||
private static final int REVISION = 0x0106;
|
private static final int REVISION = 0x0106;
|
||||||
private final String _hostname;
|
private final String _hostname;
|
||||||
|
@ -139,8 +139,8 @@ public class GameServerThread extends Thread
|
|||||||
_gsi.setDown();
|
_gsi.setDown();
|
||||||
LOGGER.info("Server [" + getServerId() + "] " + GameServerTable.getInstance().getServerNameById(getServerId()) + " is now set as disconnected");
|
LOGGER.info("Server [" + getServerId() + "] " + GameServerTable.getInstance().getServerNameById(getServerId()) + " is now set as disconnected");
|
||||||
}
|
}
|
||||||
L2LoginServer.getInstance().getGameServerListener().removeGameServer(this);
|
LoginServer.getInstance().getGameServerListener().removeGameServer(this);
|
||||||
L2LoginServer.getInstance().getGameServerListener().removeFloodProtection(_connectionIp);
|
LoginServer.getInstance().getGameServerListener().removeFloodProtection(_connectionIp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,216 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the L2J Mobius project.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.l2jmobius.loginserver;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.LineNumberReader;
|
|
||||||
import java.net.UnknownHostException;
|
|
||||||
import java.security.GeneralSecurityException;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.LogManager;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import com.l2jmobius.Config;
|
|
||||||
import com.l2jmobius.Server;
|
|
||||||
import com.l2jmobius.commons.database.DatabaseFactory;
|
|
||||||
import com.l2jmobius.loginserver.network.ClientNetworkManager;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author KenM
|
|
||||||
*/
|
|
||||||
public final class L2LoginServer
|
|
||||||
{
|
|
||||||
private final Logger LOGGER = Logger.getLogger(L2LoginServer.class.getName());
|
|
||||||
|
|
||||||
public static final int PROTOCOL_REV = 0x0106;
|
|
||||||
private static L2LoginServer _instance;
|
|
||||||
private GameServerListener _gameServerListener;
|
|
||||||
private Thread _restartLoginServer;
|
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception
|
|
||||||
{
|
|
||||||
new L2LoginServer();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static L2LoginServer getInstance()
|
|
||||||
{
|
|
||||||
return _instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private L2LoginServer() throws Exception
|
|
||||||
{
|
|
||||||
_instance = this;
|
|
||||||
Server.serverMode = Server.MODE_LOGINSERVER;
|
|
||||||
|
|
||||||
// Local Constants
|
|
||||||
final String LOG_FOLDER = "log"; // Name of folder for log file
|
|
||||||
final String LOG_NAME = "./log.cfg"; // Name of log file
|
|
||||||
|
|
||||||
/*** Main ***/
|
|
||||||
// Create log folder
|
|
||||||
final File logFolder = new File(".", LOG_FOLDER);
|
|
||||||
logFolder.mkdir();
|
|
||||||
|
|
||||||
// Create input stream for log file -- or store file data into memory
|
|
||||||
|
|
||||||
try (InputStream is = new FileInputStream(new File(LOG_NAME)))
|
|
||||||
{
|
|
||||||
LogManager.getLogManager().readConfiguration(is);
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
LOGGER.warning(getClass().getSimpleName() + ": " + e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load Config
|
|
||||||
Config.load();
|
|
||||||
|
|
||||||
// Prepare Database
|
|
||||||
DatabaseFactory.getInstance();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
LoginController.load();
|
|
||||||
}
|
|
||||||
catch (GeneralSecurityException e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.SEVERE, "FATAL: Failed initializing LoginController. Reason: " + e.getMessage(), e);
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
GameServerTable.getInstance();
|
|
||||||
|
|
||||||
loadBanFile();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_gameServerListener = new GameServerListener();
|
|
||||||
_gameServerListener.start();
|
|
||||||
LOGGER.info("Listening for GameServers on " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.SEVERE, "FATAL: Failed to start the Game Server Listener. Reason: " + e.getMessage(), e);
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
|
||||||
}
|
|
||||||
|
|
||||||
public GameServerListener getGameServerListener()
|
|
||||||
{
|
|
||||||
return _gameServerListener;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loadBanFile()
|
|
||||||
{
|
|
||||||
final File bannedFile = new File("./banned_ip.cfg");
|
|
||||||
if (bannedFile.exists() && bannedFile.isFile())
|
|
||||||
{
|
|
||||||
try (FileInputStream fis = new FileInputStream(bannedFile);
|
|
||||||
InputStreamReader is = new InputStreamReader(fis);
|
|
||||||
LineNumberReader lnr = new LineNumberReader(is))
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
lnr.lines()
|
|
||||||
.map(String::trim)
|
|
||||||
.filter(l -> !l.isEmpty() && (l.charAt(0) != '#'))
|
|
||||||
.forEach(line -> {
|
|
||||||
String[] parts = line.split("#", 2); // address[ duration][ # comments]
|
|
||||||
line = parts[0];
|
|
||||||
parts = line.split("\\s+"); // durations might be aligned via multiple spaces
|
|
||||||
final String address = parts[0];
|
|
||||||
long duration = 0;
|
|
||||||
|
|
||||||
if (parts.length > 1)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
duration = Long.parseLong(parts[1]);
|
|
||||||
}
|
|
||||||
catch (NumberFormatException nfe)
|
|
||||||
{
|
|
||||||
LOGGER.warning("Skipped: Incorrect ban duration (" + parts[1] + ") on (" + bannedFile.getName() + "). Line: " + lnr.getLineNumber());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
LoginController.getInstance().addBanForAddress(address, duration);
|
|
||||||
}
|
|
||||||
catch (UnknownHostException e)
|
|
||||||
{
|
|
||||||
LOGGER.warning("Skipped: Invalid address (" + address + ") on (" + bannedFile.getName() + "). Line: " + lnr.getLineNumber());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.WARNING, "Error while reading the bans file (" + bannedFile.getName() + "). Details: " + e.getMessage(), e);
|
|
||||||
}
|
|
||||||
LOGGER.info("Loaded " + LoginController.getInstance().getBannedIps().size() + " IP Bans.");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOGGER.warning("IP Bans file (" + bannedFile.getName() + ") is missing or is a directory, skipped.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Config.LOGIN_SERVER_SCHEDULE_RESTART)
|
|
||||||
{
|
|
||||||
LOGGER.info("Scheduled LS restart after " + Config.LOGIN_SERVER_SCHEDULE_RESTART_TIME + " hours");
|
|
||||||
_restartLoginServer = new LoginServerRestart();
|
|
||||||
_restartLoginServer.setDaemon(true);
|
|
||||||
_restartLoginServer.start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class LoginServerRestart extends Thread
|
|
||||||
{
|
|
||||||
public LoginServerRestart()
|
|
||||||
{
|
|
||||||
setName("LoginServerRestart");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
while (!isInterrupted())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Thread.sleep(Config.LOGIN_SERVER_SCHEDULE_RESTART_TIME * 3600000);
|
|
||||||
}
|
|
||||||
catch (InterruptedException e)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
shutdown(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void shutdown(boolean restart)
|
|
||||||
{
|
|
||||||
Runtime.getRuntime().exit(restart ? 2 : 0);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,216 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the L2J Mobius project.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.l2jmobius.loginserver;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.LineNumberReader;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.security.GeneralSecurityException;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.LogManager;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import com.l2jmobius.Config;
|
||||||
|
import com.l2jmobius.Server;
|
||||||
|
import com.l2jmobius.commons.database.DatabaseFactory;
|
||||||
|
import com.l2jmobius.loginserver.network.ClientNetworkManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author KenM
|
||||||
|
*/
|
||||||
|
public final class LoginServer
|
||||||
|
{
|
||||||
|
private final Logger LOGGER = Logger.getLogger(LoginServer.class.getName());
|
||||||
|
|
||||||
|
public static final int PROTOCOL_REV = 0x0106;
|
||||||
|
private static LoginServer _instance;
|
||||||
|
private GameServerListener _gameServerListener;
|
||||||
|
private Thread _restartLoginServer;
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception
|
||||||
|
{
|
||||||
|
new LoginServer();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LoginServer getInstance()
|
||||||
|
{
|
||||||
|
return _instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LoginServer() throws Exception
|
||||||
|
{
|
||||||
|
_instance = this;
|
||||||
|
Server.serverMode = Server.MODE_LOGINSERVER;
|
||||||
|
|
||||||
|
// Local Constants
|
||||||
|
final String LOG_FOLDER = "log"; // Name of folder for log file
|
||||||
|
final String LOG_NAME = "./log.cfg"; // Name of log file
|
||||||
|
|
||||||
|
/*** Main ***/
|
||||||
|
// Create log folder
|
||||||
|
final File logFolder = new File(".", LOG_FOLDER);
|
||||||
|
logFolder.mkdir();
|
||||||
|
|
||||||
|
// Create input stream for log file -- or store file data into memory
|
||||||
|
|
||||||
|
try (InputStream is = new FileInputStream(new File(LOG_NAME)))
|
||||||
|
{
|
||||||
|
LogManager.getLogManager().readConfiguration(is);
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
LOGGER.warning(getClass().getSimpleName() + ": " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load Config
|
||||||
|
Config.load();
|
||||||
|
|
||||||
|
// Prepare Database
|
||||||
|
DatabaseFactory.getInstance();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
LoginController.load();
|
||||||
|
}
|
||||||
|
catch (GeneralSecurityException e)
|
||||||
|
{
|
||||||
|
LOGGER.log(Level.SEVERE, "FATAL: Failed initializing LoginController. Reason: " + e.getMessage(), e);
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
GameServerTable.getInstance();
|
||||||
|
|
||||||
|
loadBanFile();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_gameServerListener = new GameServerListener();
|
||||||
|
_gameServerListener.start();
|
||||||
|
LOGGER.info("Listening for GameServers on " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
LOGGER.log(Level.SEVERE, "FATAL: Failed to start the Game Server Listener. Reason: " + e.getMessage(), e);
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
ClientNetworkManager.getInstance().start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public GameServerListener getGameServerListener()
|
||||||
|
{
|
||||||
|
return _gameServerListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadBanFile()
|
||||||
|
{
|
||||||
|
final File bannedFile = new File("./banned_ip.cfg");
|
||||||
|
if (bannedFile.exists() && bannedFile.isFile())
|
||||||
|
{
|
||||||
|
try (FileInputStream fis = new FileInputStream(bannedFile);
|
||||||
|
InputStreamReader is = new InputStreamReader(fis);
|
||||||
|
LineNumberReader lnr = new LineNumberReader(is))
|
||||||
|
{
|
||||||
|
//@formatter:off
|
||||||
|
lnr.lines()
|
||||||
|
.map(String::trim)
|
||||||
|
.filter(l -> !l.isEmpty() && (l.charAt(0) != '#'))
|
||||||
|
.forEach(line -> {
|
||||||
|
String[] parts = line.split("#", 2); // address[ duration][ # comments]
|
||||||
|
line = parts[0];
|
||||||
|
parts = line.split("\\s+"); // durations might be aligned via multiple spaces
|
||||||
|
final String address = parts[0];
|
||||||
|
long duration = 0;
|
||||||
|
|
||||||
|
if (parts.length > 1)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
duration = Long.parseLong(parts[1]);
|
||||||
|
}
|
||||||
|
catch (NumberFormatException nfe)
|
||||||
|
{
|
||||||
|
LOGGER.warning("Skipped: Incorrect ban duration (" + parts[1] + ") on (" + bannedFile.getName() + "). Line: " + lnr.getLineNumber());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
LoginController.getInstance().addBanForAddress(address, duration);
|
||||||
|
}
|
||||||
|
catch (UnknownHostException e)
|
||||||
|
{
|
||||||
|
LOGGER.warning("Skipped: Invalid address (" + address + ") on (" + bannedFile.getName() + "). Line: " + lnr.getLineNumber());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
//@formatter:on
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
LOGGER.log(Level.WARNING, "Error while reading the bans file (" + bannedFile.getName() + "). Details: " + e.getMessage(), e);
|
||||||
|
}
|
||||||
|
LOGGER.info("Loaded " + LoginController.getInstance().getBannedIps().size() + " IP Bans.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOGGER.warning("IP Bans file (" + bannedFile.getName() + ") is missing or is a directory, skipped.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Config.LOGIN_SERVER_SCHEDULE_RESTART)
|
||||||
|
{
|
||||||
|
LOGGER.info("Scheduled LS restart after " + Config.LOGIN_SERVER_SCHEDULE_RESTART_TIME + " hours");
|
||||||
|
_restartLoginServer = new LoginServerRestart();
|
||||||
|
_restartLoginServer.setDaemon(true);
|
||||||
|
_restartLoginServer.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class LoginServerRestart extends Thread
|
||||||
|
{
|
||||||
|
public LoginServerRestart()
|
||||||
|
{
|
||||||
|
setName("LoginServerRestart");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
while (!isInterrupted())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Thread.sleep(Config.LOGIN_SERVER_SCHEDULE_RESTART_TIME * 3600000);
|
||||||
|
}
|
||||||
|
catch (InterruptedException e)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
shutdown(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void shutdown(boolean restart)
|
||||||
|
{
|
||||||
|
Runtime.getRuntime().exit(restart ? 2 : 0);
|
||||||
|
}
|
||||||
|
}
|
@ -17,7 +17,7 @@
|
|||||||
package com.l2jmobius.loginserver.network.loginserverpackets;
|
package com.l2jmobius.loginserver.network.loginserverpackets;
|
||||||
|
|
||||||
import com.l2jmobius.commons.network.BaseSendablePacket;
|
import com.l2jmobius.commons.network.BaseSendablePacket;
|
||||||
import com.l2jmobius.loginserver.L2LoginServer;
|
import com.l2jmobius.loginserver.LoginServer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author -Wooden-
|
* @author -Wooden-
|
||||||
@ -33,7 +33,7 @@ public class InitLS extends BaseSendablePacket
|
|||||||
public InitLS(byte[] publickey)
|
public InitLS(byte[] publickey)
|
||||||
{
|
{
|
||||||
writeC(0x00);
|
writeC(0x00);
|
||||||
writeD(L2LoginServer.PROTOCOL_REV);
|
writeD(LoginServer.PROTOCOL_REV);
|
||||||
writeD(publickey.length);
|
writeD(publickey.length);
|
||||||
writeB(publickey);
|
writeB(publickey);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
<listEntry value="/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/loginserver/L2LoginServer.java"/>
|
<listEntry value="/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/loginserver/LoginServer.java"/>
|
||||||
</listAttribute>
|
</listAttribute>
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
<listEntry value="1"/>
|
<listEntry value="1"/>
|
||||||
@ -13,7 +13,7 @@
|
|||||||
</listAttribute>
|
</listAttribute>
|
||||||
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
|
||||||
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.l2jmobius.loginserver.L2LoginServer"/>
|
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.l2jmobius.loginserver.LoginServer"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="L2J_Mobius_Classic_2.0_Saviors"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="L2J_Mobius_Classic_2.0_Saviors"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:L2J_Mobius_Classic_2.0_Saviors}/dist/login/"/>
|
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:L2J_Mobius_Classic_2.0_Saviors}/dist/login/"/>
|
||||||
</launchConfiguration>
|
</launchConfiguration>
|
||||||
|
@ -83,7 +83,7 @@
|
|||||||
<attribute name="Built-Date" value="${time.stamp}" />
|
<attribute name="Built-Date" value="${time.stamp}" />
|
||||||
<attribute name="Implementation-URL" value="http://www.l2jmobius.com/" />
|
<attribute name="Implementation-URL" value="http://www.l2jmobius.com/" />
|
||||||
<attribute name="Class-Path" value="${manifest.libs}" />
|
<attribute name="Class-Path" value="${manifest.libs}" />
|
||||||
<attribute name="Main-Class" value="com.l2jmobius.loginserver.L2LoginServer" />
|
<attribute name="Main-Class" value="com.l2jmobius.loginserver.LoginServer" />
|
||||||
</manifest>
|
</manifest>
|
||||||
</jar>
|
</jar>
|
||||||
<jar destfile="${build.dist.game}/GameServer.jar" level="9">
|
<jar destfile="${build.dist.game}/GameServer.jar" level="9">
|
||||||
|
@ -80,7 +80,7 @@ public class LoginServerThread extends Thread
|
|||||||
protected static final Logger ACCOUNTING_LOGGER = Logger.getLogger("accounting");
|
protected static final Logger ACCOUNTING_LOGGER = Logger.getLogger("accounting");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see com.l2jmobius.loginserver.L2LoginServer#PROTOCOL_REV
|
* @see com.l2jmobius.loginserver.LoginServer#PROTOCOL_REV
|
||||||
*/
|
*/
|
||||||
private static final int REVISION = 0x0106;
|
private static final int REVISION = 0x0106;
|
||||||
private final String _hostname;
|
private final String _hostname;
|
||||||
|
@ -139,8 +139,8 @@ public class GameServerThread extends Thread
|
|||||||
_gsi.setDown();
|
_gsi.setDown();
|
||||||
LOGGER.info("Server [" + getServerId() + "] " + GameServerTable.getInstance().getServerNameById(getServerId()) + " is now set as disconnected");
|
LOGGER.info("Server [" + getServerId() + "] " + GameServerTable.getInstance().getServerNameById(getServerId()) + " is now set as disconnected");
|
||||||
}
|
}
|
||||||
L2LoginServer.getInstance().getGameServerListener().removeGameServer(this);
|
LoginServer.getInstance().getGameServerListener().removeGameServer(this);
|
||||||
L2LoginServer.getInstance().getGameServerListener().removeFloodProtection(_connectionIp);
|
LoginServer.getInstance().getGameServerListener().removeFloodProtection(_connectionIp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,216 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is part of the L2J Mobius project.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.l2jmobius.loginserver;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.LineNumberReader;
|
|
||||||
import java.net.UnknownHostException;
|
|
||||||
import java.security.GeneralSecurityException;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
import java.util.logging.LogManager;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import com.l2jmobius.Config;
|
|
||||||
import com.l2jmobius.Server;
|
|
||||||
import com.l2jmobius.commons.database.DatabaseFactory;
|
|
||||||
import com.l2jmobius.loginserver.network.ClientNetworkManager;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author KenM
|
|
||||||
*/
|
|
||||||
public final class L2LoginServer
|
|
||||||
{
|
|
||||||
private final Logger LOGGER = Logger.getLogger(L2LoginServer.class.getName());
|
|
||||||
|
|
||||||
public static final int PROTOCOL_REV = 0x0106;
|
|
||||||
private static L2LoginServer _instance;
|
|
||||||
private GameServerListener _gameServerListener;
|
|
||||||
private Thread _restartLoginServer;
|
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception
|
|
||||||
{
|
|
||||||
new L2LoginServer();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static L2LoginServer getInstance()
|
|
||||||
{
|
|
||||||
return _instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private L2LoginServer() throws Exception
|
|
||||||
{
|
|
||||||
_instance = this;
|
|
||||||
Server.serverMode = Server.MODE_LOGINSERVER;
|
|
||||||
|
|
||||||
// Local Constants
|
|
||||||
final String LOG_FOLDER = "log"; // Name of folder for log file
|
|
||||||
final String LOG_NAME = "./log.cfg"; // Name of log file
|
|
||||||
|
|
||||||
/*** Main ***/
|
|
||||||
// Create log folder
|
|
||||||
final File logFolder = new File(".", LOG_FOLDER);
|
|
||||||
logFolder.mkdir();
|
|
||||||
|
|
||||||
// Create input stream for log file -- or store file data into memory
|
|
||||||
|
|
||||||
try (InputStream is = new FileInputStream(new File(LOG_NAME)))
|
|
||||||
{
|
|
||||||
LogManager.getLogManager().readConfiguration(is);
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
LOGGER.warning(getClass().getSimpleName() + ": " + e.getMessage());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load Config
|
|
||||||
Config.load();
|
|
||||||
|
|
||||||
// Prepare Database
|
|
||||||
DatabaseFactory.getInstance();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
LoginController.load();
|
|
||||||
}
|
|
||||||
catch (GeneralSecurityException e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.SEVERE, "FATAL: Failed initializing LoginController. Reason: " + e.getMessage(), e);
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
GameServerTable.getInstance();
|
|
||||||
|
|
||||||
loadBanFile();
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
_gameServerListener = new GameServerListener();
|
|
||||||
_gameServerListener.start();
|
|
||||||
LOGGER.info("Listening for GameServers on " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.SEVERE, "FATAL: Failed to start the Game Server Listener. Reason: " + e.getMessage(), e);
|
|
||||||
System.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
|
||||||
}
|
|
||||||
|
|
||||||
public GameServerListener getGameServerListener()
|
|
||||||
{
|
|
||||||
return _gameServerListener;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loadBanFile()
|
|
||||||
{
|
|
||||||
final File bannedFile = new File("./banned_ip.cfg");
|
|
||||||
if (bannedFile.exists() && bannedFile.isFile())
|
|
||||||
{
|
|
||||||
try (FileInputStream fis = new FileInputStream(bannedFile);
|
|
||||||
InputStreamReader is = new InputStreamReader(fis);
|
|
||||||
LineNumberReader lnr = new LineNumberReader(is))
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
lnr.lines()
|
|
||||||
.map(String::trim)
|
|
||||||
.filter(l -> !l.isEmpty() && (l.charAt(0) != '#'))
|
|
||||||
.forEach(line -> {
|
|
||||||
String[] parts = line.split("#", 2); // address[ duration][ # comments]
|
|
||||||
line = parts[0];
|
|
||||||
parts = line.split("\\s+"); // durations might be aligned via multiple spaces
|
|
||||||
final String address = parts[0];
|
|
||||||
long duration = 0;
|
|
||||||
|
|
||||||
if (parts.length > 1)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
duration = Long.parseLong(parts[1]);
|
|
||||||
}
|
|
||||||
catch (NumberFormatException nfe)
|
|
||||||
{
|
|
||||||
LOGGER.warning("Skipped: Incorrect ban duration (" + parts[1] + ") on (" + bannedFile.getName() + "). Line: " + lnr.getLineNumber());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
LoginController.getInstance().addBanForAddress(address, duration);
|
|
||||||
}
|
|
||||||
catch (UnknownHostException e)
|
|
||||||
{
|
|
||||||
LOGGER.warning("Skipped: Invalid address (" + address + ") on (" + bannedFile.getName() + "). Line: " + lnr.getLineNumber());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
LOGGER.log(Level.WARNING, "Error while reading the bans file (" + bannedFile.getName() + "). Details: " + e.getMessage(), e);
|
|
||||||
}
|
|
||||||
LOGGER.info("Loaded " + LoginController.getInstance().getBannedIps().size() + " IP Bans.");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOGGER.warning("IP Bans file (" + bannedFile.getName() + ") is missing or is a directory, skipped.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Config.LOGIN_SERVER_SCHEDULE_RESTART)
|
|
||||||
{
|
|
||||||
LOGGER.info("Scheduled LS restart after " + Config.LOGIN_SERVER_SCHEDULE_RESTART_TIME + " hours");
|
|
||||||
_restartLoginServer = new LoginServerRestart();
|
|
||||||
_restartLoginServer.setDaemon(true);
|
|
||||||
_restartLoginServer.start();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class LoginServerRestart extends Thread
|
|
||||||
{
|
|
||||||
public LoginServerRestart()
|
|
||||||
{
|
|
||||||
setName("LoginServerRestart");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
while (!isInterrupted())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Thread.sleep(Config.LOGIN_SERVER_SCHEDULE_RESTART_TIME * 3600000);
|
|
||||||
}
|
|
||||||
catch (InterruptedException e)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
shutdown(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void shutdown(boolean restart)
|
|
||||||
{
|
|
||||||
Runtime.getRuntime().exit(restart ? 2 : 0);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,216 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the L2J Mobius project.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.l2jmobius.loginserver;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.LineNumberReader;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.security.GeneralSecurityException;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.LogManager;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import com.l2jmobius.Config;
|
||||||
|
import com.l2jmobius.Server;
|
||||||
|
import com.l2jmobius.commons.database.DatabaseFactory;
|
||||||
|
import com.l2jmobius.loginserver.network.ClientNetworkManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author KenM
|
||||||
|
*/
|
||||||
|
public final class LoginServer
|
||||||
|
{
|
||||||
|
private final Logger LOGGER = Logger.getLogger(LoginServer.class.getName());
|
||||||
|
|
||||||
|
public static final int PROTOCOL_REV = 0x0106;
|
||||||
|
private static LoginServer _instance;
|
||||||
|
private GameServerListener _gameServerListener;
|
||||||
|
private Thread _restartLoginServer;
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception
|
||||||
|
{
|
||||||
|
new LoginServer();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LoginServer getInstance()
|
||||||
|
{
|
||||||
|
return _instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LoginServer() throws Exception
|
||||||
|
{
|
||||||
|
_instance = this;
|
||||||
|
Server.serverMode = Server.MODE_LOGINSERVER;
|
||||||
|
|
||||||
|
// Local Constants
|
||||||
|
final String LOG_FOLDER = "log"; // Name of folder for log file
|
||||||
|
final String LOG_NAME = "./log.cfg"; // Name of log file
|
||||||
|
|
||||||
|
/*** Main ***/
|
||||||
|
// Create log folder
|
||||||
|
final File logFolder = new File(".", LOG_FOLDER);
|
||||||
|
logFolder.mkdir();
|
||||||
|
|
||||||
|
// Create input stream for log file -- or store file data into memory
|
||||||
|
|
||||||
|
try (InputStream is = new FileInputStream(new File(LOG_NAME)))
|
||||||
|
{
|
||||||
|
LogManager.getLogManager().readConfiguration(is);
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
LOGGER.warning(getClass().getSimpleName() + ": " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load Config
|
||||||
|
Config.load();
|
||||||
|
|
||||||
|
// Prepare Database
|
||||||
|
DatabaseFactory.getInstance();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
LoginController.load();
|
||||||
|
}
|
||||||
|
catch (GeneralSecurityException e)
|
||||||
|
{
|
||||||
|
LOGGER.log(Level.SEVERE, "FATAL: Failed initializing LoginController. Reason: " + e.getMessage(), e);
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
GameServerTable.getInstance();
|
||||||
|
|
||||||
|
loadBanFile();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_gameServerListener = new GameServerListener();
|
||||||
|
_gameServerListener.start();
|
||||||
|
LOGGER.info("Listening for GameServers on " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
LOGGER.log(Level.SEVERE, "FATAL: Failed to start the Game Server Listener. Reason: " + e.getMessage(), e);
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
ClientNetworkManager.getInstance().start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public GameServerListener getGameServerListener()
|
||||||
|
{
|
||||||
|
return _gameServerListener;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void loadBanFile()
|
||||||
|
{
|
||||||
|
final File bannedFile = new File("./banned_ip.cfg");
|
||||||
|
if (bannedFile.exists() && bannedFile.isFile())
|
||||||
|
{
|
||||||
|
try (FileInputStream fis = new FileInputStream(bannedFile);
|
||||||
|
InputStreamReader is = new InputStreamReader(fis);
|
||||||
|
LineNumberReader lnr = new LineNumberReader(is))
|
||||||
|
{
|
||||||
|
//@formatter:off
|
||||||
|
lnr.lines()
|
||||||
|
.map(String::trim)
|
||||||
|
.filter(l -> !l.isEmpty() && (l.charAt(0) != '#'))
|
||||||
|
.forEach(line -> {
|
||||||
|
String[] parts = line.split("#", 2); // address[ duration][ # comments]
|
||||||
|
line = parts[0];
|
||||||
|
parts = line.split("\\s+"); // durations might be aligned via multiple spaces
|
||||||
|
final String address = parts[0];
|
||||||
|
long duration = 0;
|
||||||
|
|
||||||
|
if (parts.length > 1)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
duration = Long.parseLong(parts[1]);
|
||||||
|
}
|
||||||
|
catch (NumberFormatException nfe)
|
||||||
|
{
|
||||||
|
LOGGER.warning("Skipped: Incorrect ban duration (" + parts[1] + ") on (" + bannedFile.getName() + "). Line: " + lnr.getLineNumber());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
LoginController.getInstance().addBanForAddress(address, duration);
|
||||||
|
}
|
||||||
|
catch (UnknownHostException e)
|
||||||
|
{
|
||||||
|
LOGGER.warning("Skipped: Invalid address (" + address + ") on (" + bannedFile.getName() + "). Line: " + lnr.getLineNumber());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
//@formatter:on
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
LOGGER.log(Level.WARNING, "Error while reading the bans file (" + bannedFile.getName() + "). Details: " + e.getMessage(), e);
|
||||||
|
}
|
||||||
|
LOGGER.info("Loaded " + LoginController.getInstance().getBannedIps().size() + " IP Bans.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOGGER.warning("IP Bans file (" + bannedFile.getName() + ") is missing or is a directory, skipped.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Config.LOGIN_SERVER_SCHEDULE_RESTART)
|
||||||
|
{
|
||||||
|
LOGGER.info("Scheduled LS restart after " + Config.LOGIN_SERVER_SCHEDULE_RESTART_TIME + " hours");
|
||||||
|
_restartLoginServer = new LoginServerRestart();
|
||||||
|
_restartLoginServer.setDaemon(true);
|
||||||
|
_restartLoginServer.start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class LoginServerRestart extends Thread
|
||||||
|
{
|
||||||
|
public LoginServerRestart()
|
||||||
|
{
|
||||||
|
setName("LoginServerRestart");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
while (!isInterrupted())
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Thread.sleep(Config.LOGIN_SERVER_SCHEDULE_RESTART_TIME * 3600000);
|
||||||
|
}
|
||||||
|
catch (InterruptedException e)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
shutdown(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void shutdown(boolean restart)
|
||||||
|
{
|
||||||
|
Runtime.getRuntime().exit(restart ? 2 : 0);
|
||||||
|
}
|
||||||
|
}
|
@ -17,7 +17,7 @@
|
|||||||
package com.l2jmobius.loginserver.network.loginserverpackets;
|
package com.l2jmobius.loginserver.network.loginserverpackets;
|
||||||
|
|
||||||
import com.l2jmobius.commons.network.BaseSendablePacket;
|
import com.l2jmobius.commons.network.BaseSendablePacket;
|
||||||
import com.l2jmobius.loginserver.L2LoginServer;
|
import com.l2jmobius.loginserver.LoginServer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author -Wooden-
|
* @author -Wooden-
|
||||||
@ -33,7 +33,7 @@ public class InitLS extends BaseSendablePacket
|
|||||||
public InitLS(byte[] publickey)
|
public InitLS(byte[] publickey)
|
||||||
{
|
{
|
||||||
writeC(0x00);
|
writeC(0x00);
|
||||||
writeD(L2LoginServer.PROTOCOL_REV);
|
writeD(LoginServer.PROTOCOL_REV);
|
||||||
writeD(publickey.length);
|
writeD(publickey.length);
|
||||||
writeB(publickey);
|
writeB(publickey);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
|
||||||
<listEntry value="/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/loginserver/L2LoginServer.java"/>
|
<listEntry value="/L2J_Mobius_Classic_2.0_Zaken/java/com/l2jmobius/loginserver/LoginServer.java"/>
|
||||||
</listAttribute>
|
</listAttribute>
|
||||||
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
|
||||||
<listEntry value="1"/>
|
<listEntry value="1"/>
|
||||||
@ -13,7 +13,7 @@
|
|||||||
</listAttribute>
|
</listAttribute>
|
||||||
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
|
||||||
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.l2jmobius.loginserver.L2LoginServer"/>
|
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.l2jmobius.loginserver.LoginServer"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="L2J_Mobius_Classic_2.0_Zaken"/>
|
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="L2J_Mobius_Classic_2.0_Zaken"/>
|
||||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:L2J_Mobius_Classic_2.0_Zaken}/dist/login/"/>
|
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:L2J_Mobius_Classic_2.0_Zaken}/dist/login/"/>
|
||||||
</launchConfiguration>
|
</launchConfiguration>
|
||||||
|
Loading…
Reference in New Issue
Block a user