Advertisement
Guest User

Untitled

a guest
Jun 10th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.61 KB | None | 0 0
  1. package tom.rsps.nio.io.log;
  2.  
  3. import java.util.LinkedList;
  4. import java.util.Queue;
  5. import java.util.logging.Logger;
  6. import java.nio.ByteBuffer;
  7.  
  8. import tom.rsps.nio.Constants;
  9. import tom.rsps.nio.World;
  10. import tom.rsps.nio.io.ActionSender;
  11. import tom.rsps.nio.io.manager.CharacterManager;
  12. import tom.rsps.nio.model.Player;
  13. import tom.rsps.nio.util.Utils;
  14.  
  15. public class Login implements Runnable {
  16.  
  17.     private static Queue<LoginRequest> logins = new LinkedList<LoginRequest>();
  18.    
  19.     private static final Logger logger = Logger.getLogger(Login.class.getName());
  20.  
  21.     @Override
  22.     public void run() {
  23.         try {
  24.             while(true) {
  25.                 synchronized(logins) {
  26.                     if (!logins.isEmpty()) {
  27.                         LoginRequest lq = null;
  28.                         while ((lq = logins.poll()) != null) {
  29.                             ByteBuffer in = (ByteBuffer) lq.get("buffer");
  30.                             while (doDecoder(lq, in, ByteBuffer.allocateDirect(8192)));
  31.                         }
  32.                     }
  33.                 }
  34.                 Thread.sleep(300);
  35.             }
  36.         } catch (Exception e) {
  37.             e.printStackTrace();
  38.         }
  39.     }
  40.    
  41.     public static void add(LoginRequest lq) {
  42.         logins.add(lq);
  43.     }
  44.  
  45.     private static boolean doDecoder(LoginRequest lq, ByteBuffer in, ByteBuffer out) {
  46.         try {
  47.             int stage = 0;
  48.             if (lq.get("stage") != null) {
  49.                 stage = (Integer) lq.get("stage");
  50.             }
  51.             switch (stage) {
  52.                 case -3:
  53.                     if (in.remaining() > 1) {
  54.                         /*short opcode = in.getShort();
  55.                         if (opcode == 0) {
  56.                         } else {
  57.                         }*/
  58.                         for(int data : Constants.WORLD_LIST_DATA) {
  59.                             out.put((byte) data);
  60.                         }
  61.                         lq.send(out);
  62.                     }
  63.                     break;
  64.                 case -2:
  65.                     if (in.remaining() > 7) {
  66.                         for(int i = 0; i < 8; i++) {
  67.                             in.get();
  68.                         }
  69.                         out.put(Constants.CRC_KEYS);
  70.                         lq.send(out);
  71.                     }
  72.                     break;
  73.                 case -1:
  74.                     /*while (in.remaining() > 3) { for update server...
  75.                         int type = in.get() & 0xff, cache in.get() & 0xff, id = in.getShort() & 0xff;
  76.                     }*/
  77.                     if (in.remaining() > 2) {
  78.                         in.get();
  79.                         if (in.getShort() == Constants.CLIENT_VERSION) {
  80.                             out.put((byte)0);
  81.                             lq.send(out);
  82.                             lq.set("stage", -2);
  83.                             return true;
  84.                         } else {
  85.                             out.put((byte)6);
  86.                             lq.send(out);
  87.                         }
  88.                     }
  89.                     break;
  90.                 case 0:
  91.                     if (in.remaining() > 1) {
  92.                         int protocolId = in.get() & 0xff;
  93.                         int hash = in.get() & 0xff;
  94.                         switch (protocolId) {
  95.                             case 23:
  96.                                 lq.set("stage", -3);
  97.                                 return true;
  98.                             case 15:
  99.                                 lq.set("stage", -1);
  100.                                 return true;
  101.                             case 14:
  102.                                 long key = ((long) (java.lang.Math.random() * 99999999D) << 32) + (long) (java.lang.Math.random() * 99999999D);
  103.                                 out.put((byte)0).putLong(key);
  104.                                 lq.send(out);
  105.                                 lq.set("key", key);
  106.                                 lq.set("hash", hash);
  107.                                 lq.set("stage", 1);
  108.                                 return true;
  109.                             default:
  110.                                 logger.info("Unhandled protocolId: "+protocolId);
  111.                                 return false;
  112.                         }
  113.                     }
  114.                     break;
  115.                 case 1:
  116.                     if (in.remaining() > 2) {
  117.                         in.get();
  118.                         int size = in.getShort();
  119.                         if (size == in.remaining()) {
  120.                             int version = in.getInt();
  121.                             if (version == Constants.CLIENT_VERSION) {
  122.                                 in.get();
  123.                                 byte screen = in.get();
  124.                                 short width = in.getShort();
  125.                                 short height = in.getShort();
  126.                                 for (int i = 0; i < 24; i++) {
  127.                                     if (in.get() == 0) {
  128.                                         //bot
  129.                                     }
  130.                                 }
  131.                                 Utils.getRS2String(in);  // 127
  132.                                 for (int i = 0; i < 28; i++) { // 112
  133.                                     in.getInt();
  134.                                 }
  135.                                 for (int i = 0; i < 12; i++) {
  136.                                     in.get();
  137.                                 }
  138.                                 for (int i = 0; i < 4; i++) {
  139.                                     in.getInt();
  140.                                 }
  141.                                 long name = in.getLong();
  142.                                 String username = Utils.longToPlayerName(name), password = Utils.getRS2String(in);
  143.                                 byte returnCode = 2;
  144.                                 byte right = 0;
  145.                                 if (returnCode == 2) {
  146.                                     out.put((byte)returnCode).put((byte)right).put((byte)0).put((byte)0).put((byte)0).put((byte)1).put((byte)0).put((byte)0).putShort((short)0).put((byte)1).put((byte)(Constants.IS_MEMBER_WORLD ? 1 : 0));
  147.                                     lq.send(out);
  148.                                     Player player = new Player(lq.getSocketChannel(), username, password, name, right, screen, width, height);
  149.                                     ActionSender.sendLogin(player);
  150.                                     World.register(player);
  151.                                     lq.set("player", player);
  152.                                     logger.info("Username: "+username+", password: "+password+", right: "+right+", screen: "+screen);
  153.                                     CharacterManager.saveCharacter(player);
  154.                                 } else {
  155.                                     out.put((byte)returnCode);
  156.                                     lq.send(out);
  157.                                 }
  158.                             }
  159.                         }
  160.                     }
  161.                     break;
  162.             }
  163.         } catch (Exception e) {
  164.             e.printStackTrace();
  165.         }
  166.         return false;
  167.     }
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement