Advertisement
Guest User

Untitled

a guest
Jul 27th, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.06 KB | None | 0 0
  1. package com.rs2hd;
  2.  
  3. import com.rs2hd.io.PlayerLoadResult;
  4. import com.rs2hd.io.PlayerLoader;
  5. import com.rs2hd.model.Player;
  6. import com.rs2hd.model.PlayerDetails;
  7. import com.rs2hd.model.World;
  8. import com.rs2hd.packetbuilder.StaticPacketBuilder;
  9. import com.rs2hd.util.log.Logger;
  10.  
  11. import java.util.concurrent.BlockingQueue;
  12. import java.util.concurrent.LinkedBlockingQueue;
  13.  
  14. import org.apache.mina.common.IoFuture;
  15. import org.apache.mina.common.IoFutureListener;
  16. import org.apache.mina.common.WriteFuture;
  17.  
  18. /**
  19.  * Does blocking 'work'.
  20.  *
  21.  * @author Graham
  22.  */
  23. public final class WorkerThread implements Runnable {
  24.  
  25.     public static boolean saved = false;
  26.  
  27.     /**
  28.      * Logger instance.
  29.      */
  30.     private Logger logger = Logger.getInstance();
  31.    
  32.     /**
  33.      * A list of tasks to do by Mystic
  34.      */
  35.     private final BlockingQueue<Runnable> taskQueue = new LinkedBlockingQueue<Runnable>();
  36.  
  37.     //public Frame frame = new Frame("MezzyScape");
  38.     /**
  39.      * Constructor.
  40.      *
  41.      * @param loader
  42.      */
  43.     public WorkerThread(PlayerLoader loader) {
  44.         this.loader = loader;
  45.     }
  46.  
  47.     /**
  48.      * The player loader.
  49.      */
  50.     private PlayerLoader loader;
  51.  
  52.     @Override
  53.     public void run() {
  54.         while (true) {
  55.             Runnable runnable = null;
  56.             try {
  57.                 runnable = taskQueue.take();
  58.             } catch (InterruptedException e) {
  59.                 cleanup();
  60.                 break;
  61.             }
  62.             if(runnable != null) {
  63.                 try {
  64.                     runnable.run();
  65.                 } catch(Exception e) {
  66.                     continue;
  67.                 }
  68.             }
  69.         }
  70.     }
  71.  
  72.     private void cleanup() {
  73.         // save ALL games
  74.         logger.info("Saving all games...");
  75.         int saved = 0;
  76.         int total = 0;
  77.         for (Player p : World.getWorld().getPlayers()) {
  78.             total++;
  79.             if(p.getRequests().getTrade() != null)
  80.                 p.getRequests().getTrade().close();
  81.             if (loader.save(p)) {
  82.                 saved++;
  83.             } else {
  84.                 logger.info("Could not save " + p.getPlayerDetails().getDisplayName() + "'s game.");
  85.             }
  86.         }
  87.         if (total == 0) {
  88.             logger.info("No games to save.");
  89.         } else {
  90.             logger.info("Saved " + (saved / total * 100) + "% of games (" + saved + "/" + total + ").");
  91.         }
  92.         WorkerThread.saved = true;
  93.     }
  94.  
  95.     public void loadPlayer(final PlayerDetails d) {
  96.         taskQueue.offer(new Runnable() {
  97.             @Override
  98.             public void run() {
  99.                 final PlayerLoadResult r = loader.load(d);
  100.                 if(!Server.getFirewall().connectionAllowed(d.getSession(), false)) {
  101.                     Server.getFirewall().ipBanPlayer(r.player);
  102.                     return;
  103.                 }
  104.                 if(r.returnCode != 2) {
  105.                     StaticPacketBuilder bldr = new StaticPacketBuilder();
  106.                     bldr.addByte((byte) r.returnCode);
  107.                     d.getSession().write(bldr.toPacket()).addListener(IoFutureListener.CLOSE);
  108.                 } else {
  109.                     StaticPacketBuilder spb = new StaticPacketBuilder();
  110.                     int slot = -1;
  111.                     synchronized(World.getWorld().getPlayers()) {
  112.                         slot = World.getWorld().register(r.player);
  113.                     }
  114.                     int returnCode = 2;
  115.                     if (slot == -1) {
  116.                         returnCode = Constants.ReturnCodes.WORLD_FULL;
  117.                     }
  118.                     spb.addByte((byte) returnCode);
  119.                     if (returnCode == 2) {
  120.                         spb.addByte((byte) r.player.getRights());
  121.                         spb.addByte((byte) 0);
  122.                         spb.addByte((byte) 0);
  123.                         spb.addByte((byte) 0);
  124.                         spb.addByte((byte) 1);
  125.                         spb.addByte((byte) 0);
  126.                         spb.addByte((byte) 0);
  127.                         spb.addShort(slot);
  128.                         spb.addByte((byte) 1);
  129.                         spb.addByte((byte) 1); //members
  130.                         d.getSession().setAttachment(r.player);
  131.                     }
  132.                     WriteFuture f = r.player.getSession().write(spb.toPacket());
  133.                     final int fReturncode = returnCode;
  134.                     f.addListener(new IoFutureListener() {
  135.                         @Override
  136.                         public void operationComplete(IoFuture arg0) {
  137.                             if(fReturncode != 2) {
  138.                                 arg0.getSession().close();
  139.                             } else {
  140.                                 try {
  141.                                     r.player.setOnLogin(true);
  142.                                     r.player.getActionSender().sendLogin();
  143.                                 } catch(Exception e) {
  144.  
  145.                                 }  
  146.                             }
  147.                         }
  148.                     });
  149.                 }
  150.             }
  151.         });
  152.     }
  153.  
  154.     public void savePlayer(final Player p) {
  155.         taskQueue.offer(new Runnable() {
  156.             @Override
  157.             public void run() {
  158.                 loader.save(p);
  159.             }
  160.         });
  161.     }
  162.    
  163.     public void submit(final Runnable runnable) {
  164.         taskQueue.offer(runnable);
  165.     }
  166.  
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement