From 2749539f87cfa3739b52f6774f8a7820b9202e71 Mon Sep 17 00:00:00 2001 From: rogiel Date: Thu, 28 Apr 2011 23:12:09 -0300 Subject: [PATCH] Change-Id: Ia7c6094789fa7b0d3cc6c136992b8081efd3c5e5 --- .../com/l2jserver/GeneralConfiguration.java | 6 +++++ src/main/java/com/l2jserver/L2JConstants.java | 10 ++++++++ .../game/net/Lineage2PipelineFactory.java | 11 +++++++- .../game/net/codec/Lineage2PacketReader.java | 25 ++++++++++++++++--- .../net/handler/Lineage2PacketHandler.java | 13 +++++++++- .../game/net/packet/AbstractClientPacket.java | 1 + .../game/net/packet/ClientPacket.java | 3 ++- .../game/net/packet/ClientPacketModule.java | 11 ++++++++ .../packet/client/ProtocolVersionPacket.java | 22 ++++++++++++++-- .../model/world/capability/Attackable.java | 2 +- .../model/world/capability/Attacker.java | 2 +- .../model/world/capability/Castable.java | 2 +- .../model/world/capability/Caster.java | 2 +- .../model/world/capability/Child.java | 2 +- .../model/world/capability/Consumable.java | 13 ++++++++++ .../model/world/capability/Conversable.java | 2 +- .../model/world/capability/Dropable.java | 2 +- .../model/world/capability/Enchantable.java | 2 +- .../model/world/capability/Equipable.java | 2 +- .../model/world/capability/Equiper.java | 2 +- .../model/world/capability/Listenable.java | 2 +- ...dCapability.java => ObjectCapability.java} | 2 +- .../model/world/capability/Parent.java | 2 +- .../model/world/capability/Playable.java | 2 +- .../model/world/capability/Positionable.java | 2 +- .../model/world/capability/Scriptable.java | 2 +- .../model/world/capability/Spawnable.java | 2 +- .../{Summunable.java => Summonable.java} | 2 +- 28 files changed, 124 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/l2jserver/GeneralConfiguration.java create mode 100644 src/main/java/com/l2jserver/L2JConstants.java create mode 100644 src/main/java/com/l2jserver/game/net/packet/ClientPacketModule.java create mode 100644 src/main/java/com/l2jserver/model/world/capability/Consumable.java rename src/main/java/com/l2jserver/model/world/capability/{WorldCapability.java => ObjectCapability.java} (86%) rename src/main/java/com/l2jserver/model/world/capability/{Summunable.java => Summonable.java} (87%) diff --git a/src/main/java/com/l2jserver/GeneralConfiguration.java b/src/main/java/com/l2jserver/GeneralConfiguration.java new file mode 100644 index 000000000..9d50484a2 --- /dev/null +++ b/src/main/java/com/l2jserver/GeneralConfiguration.java @@ -0,0 +1,6 @@ +package com.l2jserver; + +import com.l2jserver.service.configuration.Configuration; + +public interface GeneralConfiguration extends Configuration { +} diff --git a/src/main/java/com/l2jserver/L2JConstants.java b/src/main/java/com/l2jserver/L2JConstants.java new file mode 100644 index 000000000..e46b6e866 --- /dev/null +++ b/src/main/java/com/l2jserver/L2JConstants.java @@ -0,0 +1,10 @@ +package com.l2jserver; + +public class L2JConstants { + /** + * Indicated the supported protocol for this compilation. + *

+ * This MUST be hard-coded! + */ + public static final int SUPPORTED_PROTOCOL = 10; +} diff --git a/src/main/java/com/l2jserver/game/net/Lineage2PipelineFactory.java b/src/main/java/com/l2jserver/game/net/Lineage2PipelineFactory.java index b0d429843..87063e564 100644 --- a/src/main/java/com/l2jserver/game/net/Lineage2PipelineFactory.java +++ b/src/main/java/com/l2jserver/game/net/Lineage2PipelineFactory.java @@ -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()); diff --git a/src/main/java/com/l2jserver/game/net/codec/Lineage2PacketReader.java b/src/main/java/com/l2jserver/game/net/codec/Lineage2PacketReader.java index eea90439d..8a0ef9ba2 100644 --- a/src/main/java/com/l2jserver/game/net/codec/Lineage2PacketReader.java +++ b/src/main/java/com/l2jserver/game/net/codec/Lineage2PacketReader.java @@ -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 type) { + return injector.getInstance(type); + } + + private Class 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; diff --git a/src/main/java/com/l2jserver/game/net/handler/Lineage2PacketHandler.java b/src/main/java/com/l2jserver/game/net/handler/Lineage2PacketHandler.java index 82afde18e..b612ca887 100644 --- a/src/main/java/com/l2jserver/game/net/handler/Lineage2PacketHandler.java +++ b/src/main/java/com/l2jserver/game/net/handler/Lineage2PacketHandler.java @@ -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); } diff --git a/src/main/java/com/l2jserver/game/net/packet/AbstractClientPacket.java b/src/main/java/com/l2jserver/game/net/packet/AbstractClientPacket.java index cd9090819..8c621b638 100644 --- a/src/main/java/com/l2jserver/game/net/packet/AbstractClientPacket.java +++ b/src/main/java/com/l2jserver/game/net/packet/AbstractClientPacket.java @@ -1,4 +1,5 @@ package com.l2jserver.game.net.packet; + public abstract class AbstractClientPacket implements ClientPacket { } diff --git a/src/main/java/com/l2jserver/game/net/packet/ClientPacket.java b/src/main/java/com/l2jserver/game/net/packet/ClientPacket.java index 977e06341..f2fcdcdbf 100644 --- a/src/main/java/com/l2jserver/game/net/packet/ClientPacket.java +++ b/src/main/java/com/l2jserver/game/net/packet/ClientPacket.java @@ -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); } diff --git a/src/main/java/com/l2jserver/game/net/packet/ClientPacketModule.java b/src/main/java/com/l2jserver/game/net/packet/ClientPacketModule.java new file mode 100644 index 000000000..23c58d40b --- /dev/null +++ b/src/main/java/com/l2jserver/game/net/packet/ClientPacketModule.java @@ -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); + } +} diff --git a/src/main/java/com/l2jserver/game/net/packet/client/ProtocolVersionPacket.java b/src/main/java/com/l2jserver/game/net/packet/client/ProtocolVersionPacket.java index f92c54482..eaf7b3aba 100644 --- a/src/main/java/com/l2jserver/game/net/packet/client/ProtocolVersionPacket.java +++ b/src/main/java/com/l2jserver/game/net/packet/client/ProtocolVersionPacket.java @@ -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() { diff --git a/src/main/java/com/l2jserver/model/world/capability/Attackable.java b/src/main/java/com/l2jserver/model/world/capability/Attackable.java index d341f9a9c..7cdf410eb 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Attackable.java +++ b/src/main/java/com/l2jserver/model/world/capability/Attackable.java @@ -8,6 +8,6 @@ import com.l2jserver.model.world.AbstractObject; * * @author Rogiel */ -public interface Attackable extends WorldCapability { +public interface Attackable extends ObjectCapability { void receiveAttack(Attacker attacker); } diff --git a/src/main/java/com/l2jserver/model/world/capability/Attacker.java b/src/main/java/com/l2jserver/model/world/capability/Attacker.java index 619b7a734..4e797926d 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Attacker.java +++ b/src/main/java/com/l2jserver/model/world/capability/Attacker.java @@ -7,6 +7,6 @@ import com.l2jserver.model.world.AbstractObject; * * @author Rogiel */ -public interface Attacker extends WorldCapability { +public interface Attacker extends ObjectCapability { void attack(Attackable target); } diff --git a/src/main/java/com/l2jserver/model/world/capability/Castable.java b/src/main/java/com/l2jserver/model/world/capability/Castable.java index 1893b2c76..5b16ab8d0 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Castable.java +++ b/src/main/java/com/l2jserver/model/world/capability/Castable.java @@ -7,6 +7,6 @@ import com.l2jserver.model.world.AbstractObject; * * @author Rogiel */ -public interface Castable extends WorldCapability { +public interface Castable extends ObjectCapability { void cast(); } diff --git a/src/main/java/com/l2jserver/model/world/capability/Caster.java b/src/main/java/com/l2jserver/model/world/capability/Caster.java index 97c13ec8d..6ef09c933 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Caster.java +++ b/src/main/java/com/l2jserver/model/world/capability/Caster.java @@ -8,6 +8,6 @@ import com.l2jserver.model.world.AbstractObject; * * @author Rogiel */ -public interface Caster extends WorldCapability { +public interface Caster extends ObjectCapability { void cast(SkillTemplate skill, Castable cast); } diff --git a/src/main/java/com/l2jserver/model/world/capability/Child.java b/src/main/java/com/l2jserver/model/world/capability/Child.java index 33b62511e..30b7bed46 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Child.java +++ b/src/main/java/com/l2jserver/model/world/capability/Child.java @@ -8,6 +8,6 @@ import com.l2jserver.model.world.AbstractObject; * * @author Rogiel */ -public interface Child

extends WorldCapability { +public interface Child

extends ObjectCapability { public P getParent(); } diff --git a/src/main/java/com/l2jserver/model/world/capability/Consumable.java b/src/main/java/com/l2jserver/model/world/capability/Consumable.java new file mode 100644 index 000000000..e69288bb8 --- /dev/null +++ b/src/main/java/com/l2jserver/model/world/capability/Consumable.java @@ -0,0 +1,13 @@ +package com.l2jserver.model.world.capability; + +import com.l2jserver.model.template.ItemTemplate; +import com.l2jserver.model.world.AbstractObject; + +/** + * Defines an {@link AbstractObject} that can be consumed. + * + * @author Rogiel + */ +public interface Consumable extends ObjectCapability { + void consume(ItemTemplate item, Castable target); +} diff --git a/src/main/java/com/l2jserver/model/world/capability/Conversable.java b/src/main/java/com/l2jserver/model/world/capability/Conversable.java index f0df4cb34..5ac0b5976 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Conversable.java +++ b/src/main/java/com/l2jserver/model/world/capability/Conversable.java @@ -7,6 +7,6 @@ import com.l2jserver.model.world.AbstractObject; * * @author Rogiel */ -public interface Conversable extends WorldCapability { +public interface Conversable extends ObjectCapability { } diff --git a/src/main/java/com/l2jserver/model/world/capability/Dropable.java b/src/main/java/com/l2jserver/model/world/capability/Dropable.java index 6661f2cd4..569af44b4 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Dropable.java +++ b/src/main/java/com/l2jserver/model/world/capability/Dropable.java @@ -7,6 +7,6 @@ import com.l2jserver.model.world.AbstractObject; * * @author Rogiel */ -public interface Dropable extends WorldCapability { +public interface Dropable extends ObjectCapability { void drop(); } diff --git a/src/main/java/com/l2jserver/model/world/capability/Enchantable.java b/src/main/java/com/l2jserver/model/world/capability/Enchantable.java index d0087a097..ef91ac4d1 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Enchantable.java +++ b/src/main/java/com/l2jserver/model/world/capability/Enchantable.java @@ -7,7 +7,7 @@ import com.l2jserver.model.world.AbstractObject; * * @author Rogiel */ -public interface Enchantable extends WorldCapability { +public interface Enchantable extends ObjectCapability { public int getEnchantLevel(); public int setEnchantLevel(); diff --git a/src/main/java/com/l2jserver/model/world/capability/Equipable.java b/src/main/java/com/l2jserver/model/world/capability/Equipable.java index 2639597e0..4b6fc5d4b 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Equipable.java +++ b/src/main/java/com/l2jserver/model/world/capability/Equipable.java @@ -8,6 +8,6 @@ import com.l2jserver.model.world.AbstractObject; * * @author Rogiel */ -public interface Equipable extends WorldCapability { +public interface Equipable extends ObjectCapability { void equip(Equiper equiper); } diff --git a/src/main/java/com/l2jserver/model/world/capability/Equiper.java b/src/main/java/com/l2jserver/model/world/capability/Equiper.java index 2e7e6f977..8edfff24a 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Equiper.java +++ b/src/main/java/com/l2jserver/model/world/capability/Equiper.java @@ -8,7 +8,7 @@ import com.l2jserver.model.world.AbstractObject; * * @author Rogiel */ -public interface Equiper extends WorldCapability { +public interface Equiper extends ObjectCapability { void equip(Equipable equipable); void setEquipment(Object slot, Equipable equipment); diff --git a/src/main/java/com/l2jserver/model/world/capability/Listenable.java b/src/main/java/com/l2jserver/model/world/capability/Listenable.java index 5fb266e28..2fc667fcd 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Listenable.java +++ b/src/main/java/com/l2jserver/model/world/capability/Listenable.java @@ -16,7 +16,7 @@ import com.l2jserver.model.world.event.WorldListener; * the event type */ public interface Listenable, E extends WorldEvent> - extends WorldCapability { + extends ObjectCapability { /** * Adds a new listener * diff --git a/src/main/java/com/l2jserver/model/world/capability/WorldCapability.java b/src/main/java/com/l2jserver/model/world/capability/ObjectCapability.java similarity index 86% rename from src/main/java/com/l2jserver/model/world/capability/WorldCapability.java rename to src/main/java/com/l2jserver/model/world/capability/ObjectCapability.java index bec846233..6a012351e 100644 --- a/src/main/java/com/l2jserver/model/world/capability/WorldCapability.java +++ b/src/main/java/com/l2jserver/model/world/capability/ObjectCapability.java @@ -9,5 +9,5 @@ import com.l2jserver.model.world.WorldObject; * * @author Rogiel */ -public interface WorldCapability extends WorldObject { +public interface ObjectCapability extends WorldObject { } diff --git a/src/main/java/com/l2jserver/model/world/capability/Parent.java b/src/main/java/com/l2jserver/model/world/capability/Parent.java index 563db9acc..e201f3bd8 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Parent.java +++ b/src/main/java/com/l2jserver/model/world/capability/Parent.java @@ -8,5 +8,5 @@ import com.l2jserver.model.world.AbstractObject; * * @author Rogiel */ -public interface Parent extends WorldCapability { +public interface Parent extends ObjectCapability { } diff --git a/src/main/java/com/l2jserver/model/world/capability/Playable.java b/src/main/java/com/l2jserver/model/world/capability/Playable.java index 54966189f..7180912de 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Playable.java +++ b/src/main/java/com/l2jserver/model/world/capability/Playable.java @@ -8,6 +8,6 @@ import com.l2jserver.model.world.AbstractObject; * * @author Rogiel */ -public interface Playable extends WorldCapability { +public interface Playable extends ObjectCapability { } diff --git a/src/main/java/com/l2jserver/model/world/capability/Positionable.java b/src/main/java/com/l2jserver/model/world/capability/Positionable.java index 5893590c4..80fc2c3c5 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Positionable.java +++ b/src/main/java/com/l2jserver/model/world/capability/Positionable.java @@ -8,6 +8,6 @@ import com.l2jserver.util.Coordinate; * * @author Rogiel */ -public interface Positionable extends WorldCapability { +public interface Positionable extends ObjectCapability { Coordinate getPosition(); } diff --git a/src/main/java/com/l2jserver/model/world/capability/Scriptable.java b/src/main/java/com/l2jserver/model/world/capability/Scriptable.java index cd6b98872..82e08e80f 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Scriptable.java +++ b/src/main/java/com/l2jserver/model/world/capability/Scriptable.java @@ -9,7 +9,7 @@ import com.l2jserver.service.game.script.Script; * * @author Rogiel */ -public interface Scriptable extends WorldCapability { +public interface Scriptable extends ObjectCapability { /** * The the current script attached to this object * diff --git a/src/main/java/com/l2jserver/model/world/capability/Spawnable.java b/src/main/java/com/l2jserver/model/world/capability/Spawnable.java index c1e2f4a42..9609d512e 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Spawnable.java +++ b/src/main/java/com/l2jserver/model/world/capability/Spawnable.java @@ -8,7 +8,7 @@ import com.l2jserver.util.Coordinate; * * @author Rogiel */ -public interface Spawnable extends WorldCapability, Positionable { +public interface Spawnable extends ObjectCapability, Positionable { void spawn(Coordinate coordinate); boolean isSpawned(); diff --git a/src/main/java/com/l2jserver/model/world/capability/Summunable.java b/src/main/java/com/l2jserver/model/world/capability/Summonable.java similarity index 87% rename from src/main/java/com/l2jserver/model/world/capability/Summunable.java rename to src/main/java/com/l2jserver/model/world/capability/Summonable.java index 325b549c9..3da7f09ef 100644 --- a/src/main/java/com/l2jserver/model/world/capability/Summunable.java +++ b/src/main/java/com/l2jserver/model/world/capability/Summonable.java @@ -8,7 +8,7 @@ import com.l2jserver.util.Coordinate; * * @author Rogiel */ -public interface Summunable extends Spawnable { +public interface Summonable extends Spawnable { void summon(Coordinate coordinate); boolean isSummoned();