Advertisement
Guest User

Untitled

a guest
Jun 19th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 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.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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement