daily pastebin goal
55%
SHARE
TWEET

Untitled

a guest Jun 19th, 2017 52 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.util.*;
  9. import com.rs2hd.packetbuilder.StaticPacketBuilder;
  10. import com.rs2hd.util.log.Logger;
  11. import org.apache.mina.common.IoFuture;
  12. import org.apache.mina.common.IoFutureListener;
  13. import org.apache.mina.common.WriteFuture;
  14. import com.rs2hd.util.gui.Frame;
  15.  
  16. import java.util.LinkedList;
  17. import java.util.Queue;
  18.  
  19. /**
  20.  * Does blocking 'work'.
  21.  *
  22.  * @author Graham
  23.  */
  24. public class WorkerThread implements Runnable {
  25.  
  26.     /**
  27.      * Logger instance.
  28.      */
  29.     private Logger logger = Logger.getInstance();
  30.  
  31.     //public Frame frame = new Frame("Silenzioso Kill GUI");
  32.     /**
  33.      * Constructor.
  34.      *
  35.      * @param loader
  36.      */
  37.     public WorkerThread(PlayerLoader loader) {
  38.         this.loader = loader;
  39.         this.playersToLoad = new LinkedList<PlayerDetails>();
  40.         this.playersToSave = new LinkedList<Player>();
  41.     }
  42.  
  43.     /**
  44.      * Players to load.
  45.      */
  46.     private Queue<PlayerDetails> playersToLoad;
  47.  
  48.     /**
  49.      * Players to save.
  50.      */
  51.     private Queue<Player> playersToSave;
  52.  
  53.     /**
  54.      * The player loader.
  55.      */
  56.     private PlayerLoader loader;
  57.  
  58.     @Override
  59.     public void run() {
  60.         while (true) {
  61.             try {
  62.                 Thread.sleep(30);
  63.             } catch (InterruptedException e) {
  64.                 cleanup();
  65.                 break;
  66.             }
  67.             synchronized (playersToLoad) {
  68.                 if (!playersToLoad.isEmpty()) {
  69.                     PlayerDetails d;
  70.                     while ((d = playersToLoad.poll()) != null) {
  71.                         PlayerLoadResult r = loader.load(d);
  72.                         StaticPacketBuilder spb = new StaticPacketBuilder().setBare(true);
  73.                         int slot = -1;
  74.                         if (r.returnCode == 2) {
  75.                             slot = World.getInstance().register(r.player);
  76.                             if (slot == -1) {
  77.                                 r.returnCode = Constants.ReturnCodes.WORLD_FULL;
  78.                             }
  79.                         }
  80.                         spb.addByte((byte) r.returnCode);
  81.                         if (r.returnCode == 2) {
  82.                             spb.addByte((byte) r.player.getRights());
  83.                             spb.addByte((byte) 0);
  84.                             spb.addByte((byte) 0);
  85.                             spb.addByte((byte) 0);
  86.                             spb.addByte((byte) 1);
  87.                             spb.addByte((byte) 0);
  88.                             spb.addByte((byte) 0);
  89.                             spb.addShort(slot);
  90.                             spb.addByte((byte) 1);
  91.                             spb.addByte((byte) 1); //members
  92.                             d.getSession().setAttachment(r.player);
  93.                         }
  94.                         WriteFuture f = d.getSession().write(spb.toPacket());
  95.                         if (r.returnCode != 2) {
  96.                             f.addListener(new IoFutureListener() {
  97.                                 @Override
  98.                                 public void operationComplete(IoFuture arg0) {
  99.                                     arg0.getSession().close();
  100.                                 }
  101.                             });
  102.                         } else {
  103.                             r.player.setOnLogin(true);
  104.                             r.player.getActionSender().sendLogin();
  105.                         }
  106.                         logger.debug("Loaded " + d.getDisplayName() + "'s game: returncode=" + r.returnCode + ".");
  107.                     }
  108.                     playersToLoad.remove(d);
  109.                 }
  110.             }
  111.             synchronized (playersToSave) {
  112.                 if (!playersToSave.isEmpty()) {
  113.                     Player p;
  114.                     while ((p = playersToSave.poll()) != null) {
  115.                         if (loader.save(p)) {
  116.                             logger.debug("Saved " + p.getPlayerDetails().getDisplayName() + "'s game.");
  117.                         } else {
  118.                             logger.warning("Could not save " + p.getPlayerDetails().getDisplayName() + "'s game.");
  119.                         }
  120.                     }
  121.                     playersToSave.remove(p);
  122.                 }
  123.             }
  124.         }
  125.     }
  126.  
  127.     private void cleanup() {
  128.         // save ALL games
  129.         logger.info("Saving all games...");
  130.         int saved = 0;
  131.         int total = 0;
  132.         for (Player p : World.getInstance().getPlayerList()) {
  133.             total++;
  134.             if (loader.save(p)) {
  135.                 logger.info("Saved " + p.getPlayerDetails().getDisplayName() + "'s game.");
  136.                 saved++;
  137.             } else {
  138.                 logger.info("Could not save " + p.getPlayerDetails().getDisplayName() + "'s game.");
  139.             }
  140.         }
  141.         if (total == 0) {
  142.             logger.info("No games to save.");
  143.         } else {
  144.             logger.info("Saved " + (saved / total * 100) + "% of games (" + saved + "/" + total + ").");
  145.         }
  146.     }
  147.  
  148.     public void loadPlayer(PlayerDetails d) {
  149.         synchronized(playersToLoad) {
  150.             playersToLoad.add(d);
  151.         }
  152.     }
  153.  
  154.     public void savePlayer(Player p) {
  155.         synchronized(playersToSave) {
  156.             playersToSave.add(p);
  157.         }
  158.     }
  159.  
  160. }
RAW Paste Data
Top