41 lines
1.5 KiB
Java
41 lines
1.5 KiB
Java
package net.netty;
|
|
|
|
import client.Client;
|
|
import io.netty.channel.socket.SocketChannel;
|
|
import net.PacketProcessor;
|
|
import net.server.Server;
|
|
import net.server.coordinator.session.SessionCoordinator;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
public class ChannelServerInitializer extends ServerChannelInitializer {
|
|
private static final Logger log = LoggerFactory.getLogger(ChannelServerInitializer.class);
|
|
|
|
private final int world;
|
|
private final int channel;
|
|
|
|
public ChannelServerInitializer(int world, int channel) {
|
|
this.world = world;
|
|
this.channel = channel;
|
|
}
|
|
|
|
@Override
|
|
public void initChannel(SocketChannel socketChannel) {
|
|
final String clientIp = socketChannel.remoteAddress().getHostString();
|
|
log.debug("Client connecting to world {}, channel {} from {}", world, channel, clientIp);
|
|
|
|
PacketProcessor packetProcessor = PacketProcessor.getChannelServerProcessor(world, channel);
|
|
final long clientSessionId = sessionId.getAndIncrement();
|
|
final String remoteAddress = getRemoteAddress(socketChannel);
|
|
final Client client = Client.createChannelClient(clientSessionId, remoteAddress, packetProcessor, world, channel);
|
|
|
|
if (Server.getInstance().getChannel(world, channel) == null) {
|
|
SessionCoordinator.getInstance().closeSession(client, true);
|
|
socketChannel.close();
|
|
return;
|
|
}
|
|
|
|
initPipeline(socketChannel, client);
|
|
}
|
|
}
|