Removal of unused login server support.
This commit is contained in:
parent
c70ee9f745
commit
6bba018e17
@ -150,7 +150,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -458,14 +457,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -154,7 +154,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -466,14 +465,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -154,7 +154,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -466,14 +465,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -154,7 +154,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -466,14 +465,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -156,7 +156,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -470,14 +469,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -156,7 +156,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -470,14 +469,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -157,7 +157,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -472,14 +471,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -160,7 +160,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -478,14 +477,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -159,7 +159,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -476,14 +475,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -159,7 +159,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -476,14 +475,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -117,7 +117,6 @@ import org.l2jmobius.gameserver.model.siege.clanhalls.DevastatedCastle;
|
|||||||
import org.l2jmobius.gameserver.model.siege.clanhalls.FortressOfResistance;
|
import org.l2jmobius.gameserver.model.siege.clanhalls.FortressOfResistance;
|
||||||
import org.l2jmobius.gameserver.model.spawn.AutoSpawnHandler;
|
import org.l2jmobius.gameserver.model.spawn.AutoSpawnHandler;
|
||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.script.EventDroplist;
|
import org.l2jmobius.gameserver.script.EventDroplist;
|
||||||
import org.l2jmobius.gameserver.script.faenor.FaenorScriptEngine;
|
import org.l2jmobius.gameserver.script.faenor.FaenorScriptEngine;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
@ -489,14 +488,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -121,7 +121,6 @@ import org.l2jmobius.gameserver.model.siege.clanhalls.DevastatedCastle;
|
|||||||
import org.l2jmobius.gameserver.model.siege.clanhalls.FortressOfResistance;
|
import org.l2jmobius.gameserver.model.siege.clanhalls.FortressOfResistance;
|
||||||
import org.l2jmobius.gameserver.model.spawn.AutoSpawnHandler;
|
import org.l2jmobius.gameserver.model.spawn.AutoSpawnHandler;
|
||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.script.EventDroplist;
|
import org.l2jmobius.gameserver.script.EventDroplist;
|
||||||
import org.l2jmobius.gameserver.script.faenor.FaenorScriptEngine;
|
import org.l2jmobius.gameserver.script.faenor.FaenorScriptEngine;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
@ -501,14 +500,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -150,7 +150,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -470,14 +469,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -151,7 +151,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -472,14 +471,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -153,7 +153,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -467,14 +466,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -153,7 +153,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -467,14 +466,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -154,7 +154,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -469,14 +468,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -155,7 +155,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -471,14 +470,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -156,7 +156,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -473,14 +472,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
@ -159,7 +159,6 @@ import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
|||||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.loginserver.LoginServerNetworkManager;
|
|
||||||
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
import org.l2jmobius.gameserver.network.telnet.TelnetServer;
|
||||||
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
import org.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||||
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
import org.l2jmobius.gameserver.taskmanager.TaskManager;
|
||||||
@ -479,14 +478,7 @@ public class GameServer
|
|||||||
|
|
||||||
ClientNetworkManager.getInstance().start();
|
ClientNetworkManager.getInstance().start();
|
||||||
|
|
||||||
if (Boolean.getBoolean("newLoginServer"))
|
|
||||||
{
|
|
||||||
LoginServerNetworkManager.getInstance().connect();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LoginServerThread.getInstance().start();
|
LoginServerThread.getInstance().start();
|
||||||
}
|
|
||||||
|
|
||||||
Toolkit.getDefaultToolkit().beep();
|
Toolkit.getDefaultToolkit().beep();
|
||||||
}
|
}
|
||||||
|
@ -1,81 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.IConnectionState;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPackets;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
enum IncomingPackets implements IIncomingPackets<LoginServerHandler>
|
|
||||||
{
|
|
||||||
NONE(0, null);
|
|
||||||
|
|
||||||
public static final IncomingPackets[] PACKET_ARRAY;
|
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
final short maxPacketId = (short) Arrays.stream(values()).mapToInt(IIncomingPackets::getPacketId).max().orElse(0);
|
|
||||||
PACKET_ARRAY = new IncomingPackets[maxPacketId + 1];
|
|
||||||
for (IncomingPackets incomingPacket : values())
|
|
||||||
{
|
|
||||||
PACKET_ARRAY[incomingPacket.getPacketId()] = incomingPacket;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private short _packetId;
|
|
||||||
private Supplier<IIncomingPacket<LoginServerHandler>> _incomingPacketFactory;
|
|
||||||
private Set<IConnectionState> _connectionStates;
|
|
||||||
|
|
||||||
IncomingPackets(int packetId, Supplier<IIncomingPacket<LoginServerHandler>> incomingPacketFactory, IConnectionState... connectionStates)
|
|
||||||
{
|
|
||||||
// packetId is an unsigned byte
|
|
||||||
if (packetId > 0xFF)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("packetId must not be bigger than 0xFF");
|
|
||||||
}
|
|
||||||
|
|
||||||
_packetId = (short) packetId;
|
|
||||||
_incomingPacketFactory = incomingPacketFactory != null ? incomingPacketFactory : () -> null;
|
|
||||||
_connectionStates = new HashSet<>(Arrays.asList(connectionStates));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getPacketId()
|
|
||||||
{
|
|
||||||
return _packetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IIncomingPacket<LoginServerHandler> newIncomingPacket()
|
|
||||||
{
|
|
||||||
return _incomingPacketFactory.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Set<IConnectionState> getConnectionStates()
|
|
||||||
{
|
|
||||||
return _connectionStates;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.ChannelInboundHandler;
|
|
||||||
import org.l2jmobius.commons.network.IIncomingPacket;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerHandler extends ChannelInboundHandler<LoginServerHandler>
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void channelRead0(ChannelHandlerContext ctx, IIncomingPacket<LoginServerHandler> msg) throws Exception
|
|
||||||
{
|
|
||||||
msg.run(this);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.nio.ByteOrder;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.network.codecs.LengthFieldBasedFrameEncoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketDecoder;
|
|
||||||
import org.l2jmobius.commons.network.codecs.PacketEncoder;
|
|
||||||
|
|
||||||
import io.netty.channel.ChannelInitializer;
|
|
||||||
import io.netty.channel.socket.SocketChannel;
|
|
||||||
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerInitializer extends ChannelInitializer<SocketChannel>
|
|
||||||
{
|
|
||||||
private static final LengthFieldBasedFrameEncoder LENGTH_ENCODER = new LengthFieldBasedFrameEncoder();
|
|
||||||
private static final PacketEncoder PACKET_ENCODER = new PacketEncoder(0x8000 - 2);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initChannel(SocketChannel ch)
|
|
||||||
{
|
|
||||||
final LoginServerHandler loginServerHandler = new LoginServerHandler();
|
|
||||||
ch.pipeline().addLast("length-decoder", new LengthFieldBasedFrameDecoder(ByteOrder.LITTLE_ENDIAN, 0x8000 - 2, 0, 2, -2, 2, false));
|
|
||||||
ch.pipeline().addLast("length-encoder", LENGTH_ENCODER);
|
|
||||||
// ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
|
|
||||||
ch.pipeline().addLast("packet-decoder", new PacketDecoder<>(IncomingPackets.PACKET_ARRAY, loginServerHandler));
|
|
||||||
ch.pipeline().addLast("packet-encoder", PACKET_ENCODER);
|
|
||||||
ch.pipeline().addLast(loginServerHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +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 org.l2jmobius.gameserver.network.loginserver;
|
|
||||||
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.network.EventLoopGroupManager;
|
|
||||||
|
|
||||||
import io.netty.bootstrap.Bootstrap;
|
|
||||||
import io.netty.channel.ChannelFuture;
|
|
||||||
import io.netty.channel.ChannelOption;
|
|
||||||
import io.netty.channel.socket.nio.NioSocketChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author NosBit
|
|
||||||
*/
|
|
||||||
public class LoginServerNetworkManager
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(LoginServerNetworkManager.class.getName());
|
|
||||||
|
|
||||||
private final Bootstrap _bootstrap;
|
|
||||||
|
|
||||||
private ChannelFuture _channelFuture;
|
|
||||||
|
|
||||||
public LoginServerNetworkManager()
|
|
||||||
{
|
|
||||||
//@formatter:off
|
|
||||||
_bootstrap = new Bootstrap()
|
|
||||||
.group(EventLoopGroupManager.getInstance().getWorkerGroup())
|
|
||||||
.channel(NioSocketChannel.class)
|
|
||||||
.option(ChannelOption.SO_KEEPALIVE, true)
|
|
||||||
.handler(new LoginServerInitializer());
|
|
||||||
//@formatter:on
|
|
||||||
}
|
|
||||||
|
|
||||||
public ChannelFuture getChannelFuture()
|
|
||||||
{
|
|
||||||
return _channelFuture;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void connect() throws InterruptedException
|
|
||||||
{
|
|
||||||
if ((_channelFuture != null) && _channelFuture.isSuccess())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_channelFuture = _bootstrap.connect(Config.GAME_SERVER_LOGIN_HOST, Config.GAME_SERVER_LOGIN_PORT).sync();
|
|
||||||
LOGGER.info("Connected to " + Config.GAME_SERVER_LOGIN_HOST + ":" + Config.GAME_SERVER_LOGIN_PORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disconnect() throws InterruptedException
|
|
||||||
{
|
|
||||||
_channelFuture.channel().close().sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LoginServerNetworkManager getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final LoginServerNetworkManager INSTANCE = new LoginServerNetworkManager();
|
|
||||||
}
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user