mirror of
https://github.com/Rogiel/l2jserver2
synced 2025-12-09 17:02:53 +00:00
Change-Id: Ia7c6094789fa7b0d3cc6c136992b8081efd3c5e5
This commit is contained in:
@@ -5,6 +5,7 @@ import static org.jboss.netty.channel.Channels.pipeline;
|
||||
import org.jboss.netty.channel.ChannelPipeline;
|
||||
import org.jboss.netty.channel.ChannelPipelineFactory;
|
||||
|
||||
import com.google.inject.Injector;
|
||||
import com.l2jserver.game.net.codec.Lineage2Decoder;
|
||||
import com.l2jserver.game.net.codec.Lineage2Decrypter;
|
||||
import com.l2jserver.game.net.codec.Lineage2Encoder;
|
||||
@@ -12,8 +13,15 @@ import com.l2jserver.game.net.codec.Lineage2Encrypter;
|
||||
import com.l2jserver.game.net.codec.Lineage2PacketReader;
|
||||
import com.l2jserver.game.net.codec.Lineage2PacketWriter;
|
||||
import com.l2jserver.game.net.handler.Lineage2PacketHandler;
|
||||
import com.l2jserver.service.logging.LoggingService;
|
||||
|
||||
public class Lineage2PipelineFactory implements ChannelPipelineFactory {
|
||||
private final Injector injector;
|
||||
|
||||
public Lineage2PipelineFactory(Injector injector) {
|
||||
this.injector = injector;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChannelPipeline getPipeline() throws Exception {
|
||||
final ChannelPipeline pipeline = pipeline();
|
||||
@@ -27,7 +35,8 @@ public class Lineage2PipelineFactory implements ChannelPipelineFactory {
|
||||
pipeline.addLast("header.decoder", new Lineage2Decoder());
|
||||
|
||||
pipeline.addLast("packet.writer", new Lineage2PacketWriter());
|
||||
pipeline.addLast("packet.reader", new Lineage2PacketReader());
|
||||
pipeline.addLast("packet.reader", new Lineage2PacketReader(injector,
|
||||
injector.getInstance(LoggingService.class)));
|
||||
|
||||
pipeline.addLast("packet.handler", new Lineage2PacketHandler());
|
||||
|
||||
|
||||
@@ -5,32 +5,49 @@ import org.jboss.netty.channel.Channel;
|
||||
import org.jboss.netty.channel.ChannelHandlerContext;
|
||||
import org.jboss.netty.handler.codec.oneone.OneToOneDecoder;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Injector;
|
||||
import com.l2jserver.game.net.packet.ClientPacket;
|
||||
import com.l2jserver.game.net.packet.client.ProtocolVersionPacket;
|
||||
import com.l2jserver.service.logging.Logger;
|
||||
import com.l2jserver.service.logging.LoggingService;
|
||||
|
||||
public class Lineage2PacketReader extends OneToOneDecoder {
|
||||
private final Injector injector;
|
||||
private final Logger logger;
|
||||
|
||||
@Inject
|
||||
public Lineage2PacketReader(Injector injector, LoggingService logging) {
|
||||
this.injector = injector;
|
||||
this.logger = logging.getLogger(Lineage2PacketReader.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object decode(ChannelHandlerContext ctx, Channel channel,
|
||||
Object msg) throws Exception {
|
||||
if (!(msg instanceof ChannelBuffer))
|
||||
return msg;
|
||||
final ChannelBuffer buffer = (ChannelBuffer) msg;
|
||||
final ClientPacket packet = getPacket(buffer);
|
||||
final ClientPacket packet = createPacket(getPacketClass(buffer));
|
||||
if (packet == null)
|
||||
return null;
|
||||
packet.read(buffer);
|
||||
return packet;
|
||||
}
|
||||
|
||||
private ClientPacket getPacket(ChannelBuffer buffer) {
|
||||
private ClientPacket createPacket(Class<? extends ClientPacket> type) {
|
||||
return injector.getInstance(type);
|
||||
}
|
||||
|
||||
private Class<? extends ClientPacket> getPacketClass(ChannelBuffer buffer) {
|
||||
final short opcode = buffer.readUnsignedByte();
|
||||
switch (opcode) {
|
||||
case ProtocolVersionPacket.OPCODE:
|
||||
return new ProtocolVersionPacket();
|
||||
return ProtocolVersionPacket.class;
|
||||
case 0x2b:
|
||||
return null;
|
||||
default:
|
||||
System.out.println("Unk: " + opcode);
|
||||
logger.info("Unknown opcode: " + opcode);
|
||||
break;
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -1,12 +1,23 @@
|
||||
package com.l2jserver.game.net.handler;
|
||||
|
||||
import org.jboss.netty.channel.ChannelHandlerContext;
|
||||
import org.jboss.netty.channel.ChannelStateEvent;
|
||||
import org.jboss.netty.channel.MessageEvent;
|
||||
import org.jboss.netty.channel.SimpleChannelHandler;
|
||||
|
||||
import com.l2jserver.game.net.Lineage2Connection;
|
||||
import com.l2jserver.game.net.packet.ClientPacket;
|
||||
|
||||
public class Lineage2PacketHandler extends SimpleChannelHandler {
|
||||
private Lineage2Connection connection;
|
||||
|
||||
@Override
|
||||
public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e)
|
||||
throws Exception {
|
||||
connection = new Lineage2Connection(e.getChannel());
|
||||
super.channelOpen(ctx, e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
|
||||
throws Exception {
|
||||
@@ -14,7 +25,7 @@ public class Lineage2PacketHandler extends SimpleChannelHandler {
|
||||
if (!(msg instanceof ClientPacket))
|
||||
return;
|
||||
final ClientPacket packet = (ClientPacket) msg;
|
||||
packet.process(null);
|
||||
packet.process(connection, null);
|
||||
super.messageReceived(ctx, e);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
package com.l2jserver.game.net.packet;
|
||||
|
||||
|
||||
public abstract class AbstractClientPacket implements ClientPacket {
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.l2jserver.game.net.packet;
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
import com.google.inject.Injector;
|
||||
import com.l2jserver.game.net.Lineage2Connection;
|
||||
|
||||
public interface ClientPacket extends Packet {
|
||||
/**
|
||||
@@ -19,5 +20,5 @@ public interface ClientPacket extends Packet {
|
||||
* @param injector
|
||||
* the injector
|
||||
*/
|
||||
void process(Injector injector);
|
||||
void process(Lineage2Connection conn, Injector injector);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.l2jserver.game.net.packet;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.l2jserver.game.net.packet.client.ProtocolVersionPacket;
|
||||
|
||||
public class ClientPacketModule extends AbstractModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(ProtocolVersionPacket.class);
|
||||
}
|
||||
}
|
||||
@@ -2,13 +2,27 @@ package com.l2jserver.game.net.packet.client;
|
||||
|
||||
import org.jboss.netty.buffer.ChannelBuffer;
|
||||
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Injector;
|
||||
import com.l2jserver.L2JConstants;
|
||||
import com.l2jserver.game.net.Lineage2Connection;
|
||||
import com.l2jserver.game.net.packet.AbstractClientPacket;
|
||||
import com.l2jserver.service.logging.Logger;
|
||||
import com.l2jserver.service.logging.LoggingService;
|
||||
|
||||
public class ProtocolVersionPacket extends AbstractClientPacket {
|
||||
public static final int OPCODE = 0x0e;
|
||||
|
||||
// services
|
||||
private final Logger logger;
|
||||
|
||||
// packet
|
||||
private int version;
|
||||
|
||||
@Inject
|
||||
protected ProtocolVersionPacket(LoggingService logging) {
|
||||
logger = logging.getLogger(ProtocolVersionPacket.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(ChannelBuffer buffer) {
|
||||
@@ -16,8 +30,12 @@ public class ProtocolVersionPacket extends AbstractClientPacket {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(Injector injector) {
|
||||
|
||||
public void process(Lineage2Connection conn, Injector injector) {
|
||||
if(L2JConstants.SUPPORTED_PROTOCOL != version) {
|
||||
logger.info("Incorrect protocol version: "+version);
|
||||
conn.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public int getVersion() {
|
||||
|
||||
Reference in New Issue
Block a user