/* * SimplePacketFactory.java * * Created on May 12, 2007, 3:49 PM ************************************************************************* * Copyright 2008 Paul Smith * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package ao.protocol.packets.utils; import ao.db.MMDBDatabase; import ao.protocol.packets.*; import ao.protocol.packets.toclient.*; import ao.protocol.packets.toserver.*; import ao.protocol.packets.bi.*; /** * {@code SimplePacketFactory} is an implementation of * {@link ao.protocol.packets.utils.PacketFactory} * that parses packets into all known and implemented packet types. * * @author Paul Smith * @see #toPacket(short, byte[]) * @see ao.protocol.packets.utils.PacketFactory * @see ao.protocol.packets.Packet */ public class SimplePacketFactory implements PacketFactory { private final MMDBDatabase database; /** Creates a new instance of SimplePacketFactory */ public SimplePacketFactory() { database = null; } public SimplePacketFactory(MMDBDatabase db) { database = db; } // end SimplePacketFactory() public Packet toPacket(short type, byte[] data) throws MalformedPacketException { switch (type) { //Incoming Packets case LoginSeedPacket.TYPE: return new LoginSeedPacket(data); // TYPE 0 case LoginOkPacket.TYPE: return new LoginOkPacket(); // TYPE 5 case LoginErrorPacket.TYPE: return new LoginErrorPacket(data); // TYPE 6 case CharacterListPacket.TYPE: return new CharacterListPacket(data); // TYPE 7 case CharacterUnknownPacket.TYPE: return new CharacterUnknownPacket(data); // TYPE 10 case SystemMessagePacket.TYPE: return new SystemMessagePacket(data, database); // TYPE 20 case VicinityMessagePacket.TYPE: return new VicinityMessagePacket(data); // TYPE 34 case BroadcastMessagePacket.TYPE: return new BroadcastMessagePacket(data); // TYPE 35 case SimpleSystemMessagePacket.TYPE: return new SimpleSystemMessagePacket(data); // TYPE 36 case CharacterUpdatePacket.TYPE: return new CharacterUpdatePacket(data); // TYPE 37 case PrivateChannelAcceptPacket.TYPE: return new PrivateChannelAcceptPacket(data); // TYPE 52 case PrivateChannelLeavePacket.TYPE: return new PrivateChannelLeavePacket(data); // TYPE 53 case PrivateChannelCharacterJoinPacket.TYPE: return new PrivateChannelCharacterJoinPacket(data); // TYPE 55 case PrivateChannelCharacterLeavePacket.TYPE: return new PrivateChannelCharacterLeavePacket(data); // TYPE 56 case ChannelUpdatePacket.TYPE: return new ChannelUpdatePacket(data); // TYPE 60 //Outgoing Packets case LoginRequestPacket.TYPE: return new LoginRequestPacket(data); // TYPE 2 case LoginSelectPacket.TYPE: return new LoginSelectPacket(data); // TYPE 3 case ChatCommandPacket.TYPE: return new ChatCommandPacket(data); // TYPE 120 //Bidirectional Packets case CharacterLookupPacket.TYPE: return new CharacterLookupPacket(data, Packet.Direction.TO_CLIENT); // TYPE 21 case PrivateMessagePacket.TYPE: return new PrivateMessagePacket(data, Packet.Direction.TO_CLIENT); // TYPE 30 case FriendUpdatePacket.TYPE: return new FriendUpdatePacket(data, Packet.Direction.TO_CLIENT); // TYPE 40 case FriendRemovePacket.TYPE: return new FriendRemovePacket(data, Packet.Direction.TO_CLIENT); // TYPE 41 case PrivateChannelInvitePacket.TYPE: return new PrivateChannelInvitePacket(data, Packet.Direction.TO_CLIENT); // TYPE 50 case PrivateChannelKickPacket.TYPE: return new PrivateChannelKickPacket(data, Packet.Direction.TO_CLIENT); // TYPE 51 case PrivateChannelMessagePacket.TYPE: return new PrivateChannelMessagePacket(data, Packet.Direction.TO_CLIENT); // TYPE 57 case ChannelMessagePacket.TYPE: return new ChannelMessagePacket(data, database, Packet.Direction.TO_CLIENT); // TYPE 65 case PingPacket.TYPE: return new PingPacket(data, Packet.Direction.TO_CLIENT); // TYPE 100 //Unparsed Packets default: return new UnparsablePacket(type, data, Packet.Direction.TO_CLIENT); } // end switch } // end toPacket() } // end class SimplePacketFactory