Advertisement
Guest User

Untitled

a guest
Sep 27th, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 20.89 KB | None | 0 0
  1. package com.client.net.packet.type;
  2.  
  3. /**
  4.  * @author Daniel
  5.  */
  6. public enum PacketType {
  7.     INCOMING,
  8.     OUTGOING
  9. }
  10.  
  11. package com.client.net.packet;
  12.  
  13. import com.client.net.packet.type.PacketType;
  14.  
  15. /**
  16.  * @author Daniel
  17.  */
  18. public abstract class Packet {
  19.  
  20.     protected abstract PacketType getPacketType();
  21.  
  22.     protected abstract Integer[] getIndexes();
  23.  
  24. }
  25.  
  26. package com.client.net.packet.incoming;
  27.  
  28. import com.client.Client;
  29. import com.client.net.Stream;
  30. import com.client.net.packet.IncomingPacketHandler;
  31. import com.client.net.packet.Packet;
  32. import com.client.net.packet.type.PacketType;
  33.  
  34. /**
  35.  * @author Daniel
  36.  */
  37. public abstract class IncomingPacket extends Packet {
  38.  
  39.     protected int getPacketIndex() {
  40.         return IncomingPacketHandler.getIncomingPacketIndex();
  41.     }
  42.  
  43.     protected int getPacketSize() {
  44.         return IncomingPacketHandler.getIncomingPacketSize();
  45.     }
  46.  
  47.     @Override
  48.     protected PacketType getPacketType() {
  49.         return PacketType.INCOMING;
  50.     }
  51.  
  52.     public abstract boolean handle(Client client, Stream stream);
  53.  
  54. }
  55.  
  56. package com.client.net.packet.outgoing;
  57.  
  58. import com.client.net.Stream;
  59. import com.client.net.packet.Packet;
  60. import com.client.net.packet.type.PacketType;
  61.  
  62. /**
  63.  * @author Daniel
  64.  */
  65. public abstract class OutgoingPacket extends Packet {
  66.  
  67.     @Override
  68.     protected PacketType getPacketType() {
  69.         return PacketType.OUTGOING;
  70.     }
  71.  
  72.     public abstract void handle(Stream stream, Argument... arguments);
  73.  
  74.     protected Integer getInteger(Argument argument) {
  75.         assert argument.getValue() instanceof Integer;
  76.         return (Integer) argument.getValue();
  77.     }
  78.  
  79.     protected Long getLong(Argument argument) {
  80.         assert argument.getValue() instanceof Long;
  81.         return (Long) argument.getValue();
  82.     }
  83.  
  84.     protected String getString(Argument argument) {
  85.         assert argument.getValue() instanceof String;
  86.         return (String) argument.getValue();
  87.     }
  88. }
  89.  
  90. package com.client.net.packet.outgoing;
  91.  
  92. /**
  93.  * @author Daniel
  94.  */
  95. public class Argument<T> {
  96.  
  97.     private final T value;
  98.  
  99.     private Argument(T value) {
  100.         this.value = value;
  101.     }
  102.  
  103.     T getValue() {
  104.         return value;
  105.     }
  106.  
  107.     public static Argument<Integer> get(Integer value) {
  108.         return new Argument<Integer>(value);
  109.     }
  110.  
  111.     public static Argument<Long> get(Long value) {
  112.         return new Argument<Long>(value);
  113.     }
  114.  
  115.     public static Argument<String> get(String value) {
  116.         return new Argument<String>(value);
  117.     }
  118.  
  119. }
  120.  
  121. package com.client.net.packet;
  122.  
  123. import com.client.net.packet.incoming.IncomingPacket;
  124. import com.client.net.packet.outgoing.OutgoingPacket;
  125. import com.client.net.packet.type.PacketType;
  126.  
  127. import java.util.HashMap;
  128. import java.util.Map;
  129.  
  130. /**
  131.  * @author Daniel
  132.  */
  133. class PacketManager {
  134.  
  135.     private static final Map<PacketType, Map<Integer, Packet>> PACKETS_MAP = new HashMap<PacketType, Map<Integer, Packet>>();
  136.  
  137.     static {
  138.         /*Incoming Packets**/
  139.         submit(
  140.                 new com.client.net.packet.incoming.impl._1(),
  141.                 new com.client.net.packet.incoming.impl._4_44_84_101_105_117_147_151_152_153_156_160_215(),
  142.                 new com.client.net.packet.incoming.impl._8(),
  143.                 new com.client.net.packet.incoming.impl._24(),
  144.                 new com.client.net.packet.incoming.impl._27(),
  145.                 new com.client.net.packet.incoming.impl._28(),
  146.                 new com.client.net.packet.incoming.impl._29(),
  147.                 new com.client.net.packet.incoming.impl._31(),
  148.                 new com.client.net.packet.incoming.impl._34(),
  149.                 new com.client.net.packet.incoming.impl._35(),
  150.                 new com.client.net.packet.incoming.impl._36(),
  151.                 new com.client.net.packet.incoming.impl._38(),
  152.                 new com.client.net.packet.incoming.impl._45(),
  153.                 new com.client.net.packet.incoming.impl._46(),
  154.                 new com.client.net.packet.incoming.impl._50(),
  155.                 new com.client.net.packet.incoming.impl._53(),
  156.                 new com.client.net.packet.incoming.impl._60(),
  157.                 new com.client.net.packet.incoming.impl._61(),
  158.                 new com.client.net.packet.incoming.impl._64(),
  159.                 new com.client.net.packet.incoming.impl._65(),
  160.                 new com.client.net.packet.incoming.impl._68(),
  161.                 new com.client.net.packet.incoming.impl._70(),
  162.                 new com.client.net.packet.incoming.impl._71(),
  163.                 new com.client.net.packet.incoming.impl._72(),
  164.                 new com.client.net.packet.incoming.impl._73_241(),
  165.                 new com.client.net.packet.incoming.impl._74(),
  166.                 new com.client.net.packet.incoming.impl._75(),
  167.                 new com.client.net.packet.incoming.impl._78(),
  168.                 new com.client.net.packet.incoming.impl._79(),
  169.                 new com.client.net.packet.incoming.impl._81(),
  170.                 new com.client.net.packet.incoming.impl._85(),
  171.                 new com.client.net.packet.incoming.impl._86(),
  172.                 new com.client.net.packet.incoming.impl._87(),
  173.                 new com.client.net.packet.incoming.impl._88(),
  174.                 new com.client.net.packet.incoming.impl._97(),
  175.                 new com.client.net.packet.incoming.impl._99(),
  176.                 new com.client.net.packet.incoming.impl._103(),
  177.                 new com.client.net.packet.incoming.impl._104(),
  178.                 new com.client.net.packet.incoming.impl._106(),
  179.                 new com.client.net.packet.incoming.impl._107(),
  180.                 new com.client.net.packet.incoming.impl._108(),
  181.                 new com.client.net.packet.incoming.impl._109(),
  182.                 new com.client.net.packet.incoming.impl._110(),
  183.                 new com.client.net.packet.incoming.impl._111(),
  184.                 new com.client.net.packet.incoming.impl._112(),
  185.                 new com.client.net.packet.incoming.impl._113(),
  186.                 new com.client.net.packet.incoming.impl._114(),
  187.                 new com.client.net.packet.incoming.impl._115(),
  188.                 new com.client.net.packet.incoming.impl._121(),
  189.                 new com.client.net.packet.incoming.impl._122(),
  190.                 new com.client.net.packet.incoming.impl._123(),
  191.                 new com.client.net.packet.incoming.impl._124(),
  192.                 new com.client.net.packet.incoming.impl._125(),
  193.                 new com.client.net.packet.incoming.impl._126(),
  194.                 new com.client.net.packet.incoming.impl._127(),
  195.                 new com.client.net.packet.incoming.impl._128(),
  196.                 new com.client.net.packet.incoming.impl._134(),
  197.                 new com.client.net.packet.incoming.impl._137(),
  198.                 new com.client.net.packet.incoming.impl._142(),
  199.                 new com.client.net.packet.incoming.impl._154(),
  200.                 new com.client.net.packet.incoming.impl._155(),
  201.                 new com.client.net.packet.incoming.impl._161(),
  202.                 new com.client.net.packet.incoming.impl._164(),
  203.                 new com.client.net.packet.incoming.impl._166(),
  204.                 new com.client.net.packet.incoming.impl._171(),
  205.                 new com.client.net.packet.incoming.impl._172(),
  206.                 new com.client.net.packet.incoming.impl._174(),
  207.                 new com.client.net.packet.incoming.impl._175(),
  208.                 new com.client.net.packet.incoming.impl._176(),
  209.                 new com.client.net.packet.incoming.impl._177(),
  210.                 new com.client.net.packet.incoming.impl._178(),
  211.                 new com.client.net.packet.incoming.impl._179(),
  212.                 new com.client.net.packet.incoming.impl._185(),
  213.                 new com.client.net.packet.incoming.impl._187(),
  214.                 new com.client.net.packet.incoming.impl._196(),
  215.                 new com.client.net.packet.incoming.impl._200(),
  216.                 new com.client.net.packet.incoming.impl._206(),
  217.                 new com.client.net.packet.incoming.impl._208(),
  218.                 new com.client.net.packet.incoming.impl._214(),
  219.                 new com.client.net.packet.incoming.impl._217(),
  220.                 new com.client.net.packet.incoming.impl._218(),
  221.                 new com.client.net.packet.incoming.impl._219(),
  222.                 new com.client.net.packet.incoming.impl._221(),
  223.                 new com.client.net.packet.incoming.impl._230(),
  224.                 new com.client.net.packet.incoming.impl._240(),
  225.                 new com.client.net.packet.incoming.impl._244(),
  226.                 new com.client.net.packet.incoming.impl._246(),
  227.                 new com.client.net.packet.incoming.impl._248(),
  228.                 new com.client.net.packet.incoming.impl._249(),
  229.                 new com.client.net.packet.incoming.impl._253(),
  230.                 new com.client.net.packet.incoming.impl._254()
  231.         );
  232.         /*Outgoing Packets**/
  233.         submit(
  234.                 new com.client.net.packet.outgoing.impl._0_78_121_130_136_148_150_202(),
  235.                 new com.client.net.packet.outgoing.impl._2(),
  236.                 new com.client.net.packet.outgoing.impl._3(),
  237.                 new com.client.net.packet.outgoing.impl._4(),
  238.                 new com.client.net.packet.outgoing.impl._5(),
  239.                 new com.client.net.packet.outgoing.impl._6(),
  240.                 new com.client.net.packet.outgoing.impl._7(),
  241.                 new com.client.net.packet.outgoing.impl._8(),
  242.                 new com.client.net.packet.outgoing.impl._11(),
  243.                 new com.client.net.packet.outgoing.impl._12_60(),
  244.                 new com.client.net.packet.outgoing.impl._14(),
  245.                 new com.client.net.packet.outgoing.impl._16(),
  246.                 new com.client.net.packet.outgoing.impl._17(),
  247.                 new com.client.net.packet.outgoing.impl._18(),
  248.                 new com.client.net.packet.outgoing.impl._21(),
  249.                 new com.client.net.packet.outgoing.impl._23(),
  250.                 new com.client.net.packet.outgoing.impl._25(),
  251.                 new com.client.net.packet.outgoing.impl._35(),
  252.                 new com.client.net.packet.outgoing.impl._36(),
  253.                 new com.client.net.packet.outgoing.impl._39(),
  254.                 new com.client.net.packet.outgoing.impl._40(),
  255.                 new com.client.net.packet.outgoing.impl._41(),
  256.                 new com.client.net.packet.outgoing.impl._43(),
  257.                 new com.client.net.packet.outgoing.impl._45(),
  258.                 new com.client.net.packet.outgoing.impl._53(),
  259.                 new com.client.net.packet.outgoing.impl._57(),
  260.                 new com.client.net.packet.outgoing.impl._70(),
  261.                 new com.client.net.packet.outgoing.impl._72(),
  262.                 new com.client.net.packet.outgoing.impl._73(),
  263.                 new com.client.net.packet.outgoing.impl._74(),
  264.                 new com.client.net.packet.outgoing.impl._75(),
  265.                 new com.client.net.packet.outgoing.impl._77(),
  266.                 new com.client.net.packet.outgoing.impl._79(),
  267.                 new com.client.net.packet.outgoing.impl._85(),
  268.                 new com.client.net.packet.outgoing.impl._86(),
  269.                 new com.client.net.packet.outgoing.impl._87(),
  270.                 new com.client.net.packet.outgoing.impl._95(),
  271.                 new com.client.net.packet.outgoing.impl._103(),
  272.                 new com.client.net.packet.outgoing.impl._117(),
  273.                 new com.client.net.packet.outgoing.impl._120(),
  274.                 new com.client.net.packet.outgoing.impl._122(),
  275.                 new com.client.net.packet.outgoing.impl._126(),
  276.                 new com.client.net.packet.outgoing.impl._128(),
  277.                 new com.client.net.packet.outgoing.impl._129(),
  278.                 new com.client.net.packet.outgoing.impl._131(),
  279.                 new com.client.net.packet.outgoing.impl._132(),
  280.                 new com.client.net.packet.outgoing.impl._133(),
  281.                 new com.client.net.packet.outgoing.impl._135(),
  282.                 new com.client.net.packet.outgoing.impl._138(),
  283.                 new com.client.net.packet.outgoing.impl._139(),
  284.                 new com.client.net.packet.outgoing.impl._145(),
  285.                 new com.client.net.packet.outgoing.impl._153(),
  286.                 new com.client.net.packet.outgoing.impl._155(),
  287.                 new com.client.net.packet.outgoing.impl._156(),
  288.                 new com.client.net.packet.outgoing.impl._168(),
  289.                 new com.client.net.packet.outgoing.impl._181(),
  290.                 new com.client.net.packet.outgoing.impl._183(),
  291.                 new com.client.net.packet.outgoing.impl._185(),
  292.                 new com.client.net.packet.outgoing.impl._188(),
  293.                 new com.client.net.packet.outgoing.impl._189(),
  294.                 new com.client.net.packet.outgoing.impl._192(),
  295.                 new com.client.net.packet.outgoing.impl._200(),
  296.                 new com.client.net.packet.outgoing.impl._204(),
  297.                 new com.client.net.packet.outgoing.impl._208(),
  298.                 new com.client.net.packet.outgoing.impl._210(),
  299.                 new com.client.net.packet.outgoing.impl._214(),
  300.                 new com.client.net.packet.outgoing.impl._215(),
  301.                 new com.client.net.packet.outgoing.impl._218(),
  302.                 new com.client.net.packet.outgoing.impl._222(),
  303.                 new com.client.net.packet.outgoing.impl._228(),
  304.                 new com.client.net.packet.outgoing.impl._229(),
  305.                 new com.client.net.packet.outgoing.impl._234(),
  306.                 new com.client.net.packet.outgoing.impl._236(),
  307.                 new com.client.net.packet.outgoing.impl._237(),
  308.                 new com.client.net.packet.outgoing.impl._238(),
  309.                 new com.client.net.packet.outgoing.impl._246(),
  310.                 new com.client.net.packet.outgoing.impl._249(),
  311.                 new com.client.net.packet.outgoing.impl._252(),
  312.                 new com.client.net.packet.outgoing.impl._253()
  313.         );
  314.     }
  315.  
  316.     static IncomingPacket getIncomingPacket(Integer integer) {
  317.         return (IncomingPacket) getPacket(PacketType.INCOMING, integer);
  318.     }
  319.  
  320.     static OutgoingPacket getOutgoingPacket(Integer integer) {
  321.         return (OutgoingPacket) getPacket(PacketType.OUTGOING, integer);
  322.     }
  323.  
  324.     private static Packet getPacket(PacketType packetType, Integer integer) {
  325.         return PACKETS_MAP.get(packetType).get(integer);
  326.     }
  327.  
  328.     private static void submit(Packet... packets) {
  329.         for (Packet packet : packets) {
  330.             submit(packet);
  331.         }
  332.     }
  333.  
  334.     private static void submit(Packet packet) {
  335.         final PacketType packetType = packet.getPacketType();
  336.         if (!PACKETS_MAP.containsKey(packetType)) {
  337.             PACKETS_MAP.put(packetType, new HashMap<Integer, Packet>());
  338.         }
  339.         final Integer[] indexes = packet.getIndexes();
  340.         for (Integer index : indexes) {
  341.             if (!PACKETS_MAP.get(packetType).containsKey(index)) {
  342.                 PACKETS_MAP.get(packetType).put(index, packet);
  343.             }
  344.         }
  345.     }
  346.  
  347. }
  348.  
  349. package com.client.net.packet;
  350.  
  351. import com.client.Client;
  352. import com.client.configuration.Constants;
  353. import com.client.net.ISAACRandomGen;
  354. import com.client.net.RSSocket;
  355. import com.client.net.Stream;
  356. import com.client.net.packet.incoming.IncomingPacket;
  357. import com.logging.Logger;
  358.  
  359. import java.io.IOException;
  360. import java.util.logging.Level;
  361.  
  362. /**
  363.  * @author Daniel
  364.  */
  365. public class IncomingPacketHandler {
  366.  
  367.     private static Stream stream;
  368.  
  369.     private static RSSocket socketStream;
  370.  
  371.     private static ISAACRandomGen encryption;
  372.  
  373.     private static int incomingPacketIndex;
  374.     private static int incomingPacketSize;
  375.  
  376.     private static int gameLoops;
  377.  
  378.     public static boolean handleIncomingPacket(Client client) {
  379.         if (socketStream == null) {
  380.             return false;
  381.         }
  382.         try {
  383.             int availableBytes = availableBytes();
  384.             if (availableBytes == 0)
  385.                 return false;
  386.             if (incomingPacketIndex == -1) {
  387.                 socketStream.flushInputStream(stream.buffer, 1);
  388.                 incomingPacketIndex = (stream.buffer[0] & 0xff);
  389.                 if (encryption != null)
  390.                     incomingPacketIndex = (incomingPacketIndex - encryption.getNextKey() & 0xff);
  391.                 incomingPacketSize = (Constants.PACKET_SIZES[incomingPacketIndex]);
  392.                 availableBytes--;
  393.             }
  394.             if (incomingPacketSize == -1)
  395.                 if (availableBytes > 0) {
  396.                     socketStream.flushInputStream(stream.buffer, 1);
  397.                     incomingPacketSize = (stream.buffer[0] & 0xff);
  398.                     availableBytes--;
  399.                 } else {
  400.                     return false;
  401.                 }
  402.             if (incomingPacketSize == -2)
  403.                 if (availableBytes > 1) {
  404.                     socketStream.flushInputStream(stream.buffer, 2);
  405.                     stream.currentOffset = 0;
  406.                     incomingPacketSize = (stream.readUnsignedWord());
  407.                     availableBytes -= 2;
  408.                 } else {
  409.                     return false;
  410.                 }
  411.             if (availableBytes < incomingPacketSize)
  412.                 return false;
  413.             stream.currentOffset = 0;
  414.             socketStream.flushInputStream(stream.buffer, incomingPacketSize);
  415.             gameLoops = 0;
  416.             final IncomingPacket packet = PacketManager.getIncomingPacket(incomingPacketIndex);
  417.             if (packet != null && packet.handle(client, stream)) {
  418.                 incomingPacketIndex = -1;
  419.                 return true;
  420.             }
  421.             client.resetLogout();
  422.         } catch (IOException ex) {
  423.             Logger.log(IncomingPacketHandler.class, Level.SEVERE, String.format("Packet Error %d:%d", incomingPacketIndex, incomingPacketSize), ex);
  424.             return false;
  425.         }
  426.         incomingPacketIndex = -1;
  427.         return true;
  428.     }
  429.  
  430.     public static void setEncryption(ISAACRandomGen encryption) {
  431.         if (encryption == null) {
  432.             throw new RuntimeException("Cannot set Encryption to null; Use 'closeSocketStream'");
  433.         }
  434.         if (IncomingPacketHandler.encryption != null) {
  435.             return;
  436.         }
  437.         IncomingPacketHandler.encryption = encryption;
  438.     }
  439.  
  440.     public static RSSocket getSocketStream() {
  441.         return socketStream;
  442.     }
  443.  
  444.     public static void setSocketStream(RSSocket socketStream) {
  445.         IncomingPacketHandler.socketStream = socketStream;
  446.     }
  447.  
  448.     public static void closeSocketStream() {
  449.         if (socketStream == null) {
  450.             return;
  451.         }
  452.         try {
  453.             socketStream.close();
  454.         } catch (Exception ex) {
  455.             Logger.log(IncomingPacketHandler.class, Level.WARNING, "Error Closing Incoming Socket Stream", ex);
  456.         }
  457.         socketStream = null;
  458.     }
  459.  
  460.     private static int availableBytes() {
  461.         if (socketStream == null) {
  462.             return 0;
  463.         }
  464.         try {
  465.             return socketStream.available();
  466.         } catch (Exception ex) {
  467.             return 0;
  468.         }
  469.     }
  470.  
  471.     public static Stream getStream() {
  472.         return stream;
  473.     }
  474.  
  475.     public static void openStream() {
  476.         if (stream == null) {
  477.             stream = Stream.create();
  478.         }
  479.     }
  480.  
  481.     public static void closeStream() {
  482.         if (stream != null) {
  483.             stream = null;
  484.         }
  485.     }
  486.  
  487.     public static int getIncomingPacketIndex() {
  488.         return incomingPacketIndex;
  489.     }
  490.  
  491.     public static void setIncomingPacketIndex(int incomingPacketIndex) {
  492.         IncomingPacketHandler.incomingPacketIndex = incomingPacketIndex;
  493.     }
  494.  
  495.     public static int getIncomingPacketSize() {
  496.         return incomingPacketSize;
  497.     }
  498.  
  499.     public static void setIncomingPacketSize(int incomingPacketSize) {
  500.         IncomingPacketHandler.incomingPacketSize = incomingPacketSize;
  501.     }
  502.  
  503.     public static int getGameLoops() {
  504.         return gameLoops;
  505.     }
  506.  
  507.     public static void setGameLoops(int gameLoops) {
  508.         IncomingPacketHandler.gameLoops = gameLoops;
  509.     }
  510. }
  511.  
  512. package com.client.net.packet;
  513.  
  514. import com.client.net.Stream;
  515. import com.client.net.packet.outgoing.Argument;
  516. import com.client.net.packet.outgoing.OutgoingPacket;
  517.  
  518. /**
  519.  * @author Daniel
  520.  */
  521. public class OutgoingPacketHandler {
  522.  
  523.     private static Stream stream;
  524.  
  525.     public static void handle(int value, Argument... arguments) {
  526.         final OutgoingPacket packet = PacketManager.getOutgoingPacket(value);
  527.         if (packet != null) {
  528.             stream.createFrame(value);
  529.             packet.handle(stream, arguments);
  530.         }
  531.     }
  532.  
  533.     public static void openStream() {
  534.         if (stream == null) {
  535.             stream = Stream.create();
  536.         }
  537.     }
  538.  
  539.     public static void closeStream() {
  540.         if (stream != null) {
  541.             stream = null;
  542.         }
  543.     }
  544.  
  545.     public static Stream getStream() {
  546.         return stream;
  547.     }
  548. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement