Advertisement
Guest User

Untitled

a guest
Jul 24th, 2011
417
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.73 KB | None | 0 0
  1. package net.minecraft.server;
  2.  
  3. import java.io.BufferedOutputStream;
  4. import java.io.DataInputStream;
  5. import java.io.DataOutputStream;
  6. import java.io.IOException;
  7. import java.io.PrintStream;
  8. import java.net.Socket;
  9. import java.net.SocketAddress;
  10. import java.net.SocketException;
  11. import java.util.ArrayList;
  12. import java.util.Collections;
  13. import java.util.List;
  14.  
  15. public class NetworkManager
  16. {
  17.   public static final Object a = new Object();
  18.   public static int b;
  19.   public static int c;
  20.   private Object g = new Object();
  21.   public Socket socket;
  22.   private final SocketAddress i;
  23.   private DataInputStream input;
  24.   private DataOutputStream output;
  25.   private boolean l = true;
  26.   private List m = Collections.synchronizedList(new ArrayList());
  27.   private List highPriorityQueue = Collections.synchronizedList(new ArrayList());
  28.   private List lowPriorityQueue = Collections.synchronizedList(new ArrayList());
  29.   private NetHandler p;
  30.   private boolean q = false;
  31.   private Thread r;
  32.   private Thread s;
  33.   private boolean t = false;
  34.   private String u = "";
  35.   private Object[] v;
  36.   private int w = 0;
  37.   private int x = 0;
  38.   public static int[] d = new int[256];
  39.   public static int[] e = new int[256];
  40.   public int f = 0;
  41.   private int lowPriorityQueueDelay = 50;
  42.  
  43.   public NetworkManager(Socket socket, String s, NetHandler nethandler) {
  44.     this.socket = socket;
  45.     this.i = socket.getRemoteSocketAddress();
  46.     this.p = nethandler;
  47.     try
  48.     {
  49.       socket.setTrafficClass(24);
  50.     }
  51.     catch (SocketException e)
  52.     {
  53.     }
  54.     try {
  55.       socket.setSoTimeout(30000);
  56.       this.input = new DataInputStream(socket.getInputStream());
  57.       this.output = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream(), 5120));
  58.     }
  59.     catch (IOException socketexception) {
  60.       System.err.println(socketexception.getMessage());
  61.     }
  62.  
  63.     this.s = new NetworkReaderThread(this, s + " read thread");
  64.     this.r = new NetworkWriterThread(this, s + " write thread");
  65.     this.s.start();
  66.     this.r.start();
  67.   }
  68.  
  69.   public void a(NetHandler nethandler) {
  70.     this.p = nethandler;
  71.   }
  72.  
  73.   public void queue(Packet packet) {
  74.     if (!this.q) {
  75.       Object object = this.g;
  76.  
  77.       synchronized (this.g) {
  78.         this.x += packet.a() + 1;
  79.         if (packet.k)
  80.           this.lowPriorityQueue.add(packet);
  81.         else
  82.           this.highPriorityQueue.add(packet);
  83.       }
  84.     }
  85.   }
  86.  
  87.   private boolean f()
  88.   {
  89.     boolean flag = false;
  90.     try
  91.     {
  92.       if ((!this.highPriorityQueue.isEmpty()) && ((this.f == 0) || (System.currentTimeMillis() - ((Packet)this.highPriorityQueue.get(0)).timestamp >= this.f))) {
  93.         Object object = this.g;
  94.         Packet packet;
  95.         synchronized (this.g) {
  96.           packet = (Packet)this.highPriorityQueue.remove(0);
  97.           this.x -= packet.a() + 1;
  98.         }
  99.  
  100.         Packet.a(packet, this.output);
  101.         int[] aint = e;
  102.         int i = packet.b();
  103.         aint[i] += packet.a() + 1;
  104.         flag = true;
  105.       }
  106.  
  107.       if (((flag) || (this.lowPriorityQueueDelay-- <= 0)) && (!this.lowPriorityQueue.isEmpty()) && ((this.highPriorityQueue.isEmpty()) || (((Packet)this.highPriorityQueue.get(0)).timestamp > ((Packet)this.lowPriorityQueue.get(0)).timestamp))) {
  108.         Object object = this.g;
  109.         Packet packet;
  110.         synchronized (this.g) {
  111.           packet = (Packet)this.lowPriorityQueue.remove(0);
  112.           this.x -= packet.a() + 1;
  113.         }
  114.  
  115.         Packet.a(packet, this.output);
  116.         int[] aint = e;
  117.         int i = packet.b();
  118.         aint[i] += packet.a() + 1;
  119.         this.lowPriorityQueueDelay = 0;
  120.         flag = true;
  121.       }
  122.  
  123.       return flag;
  124.     } catch (Exception exception) {
  125.       if (!this.t) {
  126.         a(exception);
  127.       }
  128.     }
  129.     return false;
  130.   }
  131.  
  132.   public void a()
  133.   {
  134.     this.s.interrupt();
  135.     this.r.interrupt();
  136.   }
  137.  
  138.   private boolean g() {
  139.     boolean flag = false;
  140.     try
  141.     {
  142.       Packet packet = Packet.a(this.input, this.p.c());
  143.  
  144.       if (packet != null) {
  145.         int[] aint = d;
  146.         int i = packet.b();
  147.  
  148.         aint[i] += packet.a() + 1;
  149.         this.m.add(packet);
  150.         flag = true;
  151.       } else {
  152.         a("disconnect.endOfStream", new Object[0]);
  153.       }
  154.  
  155.       return flag;
  156.     } catch (Exception exception) {
  157.       if (!this.t) {
  158.         a(exception);
  159.       }
  160.     }
  161.     return false;
  162.   }
  163.  
  164.   private void a(Exception exception)
  165.   {
  166.     exception.printStackTrace();
  167.     a("disconnect.genericReason", new Object[] { "Internal exception: " + exception.toString() });
  168.   }
  169.  
  170.   public void a(String s, Object[] aobject) {
  171.     if (this.l) {
  172.       this.t = true;
  173.       this.u = s;
  174.       this.v = aobject;
  175.       new NetworkMasterThread(this).start();
  176.       this.l = false;
  177.       try
  178.       {
  179.         this.input.close();
  180.         this.input = null;
  181.       }
  182.       catch (Throwable throwable)
  183.       {
  184.       }
  185.       try {
  186.         this.output.close();
  187.         this.output = null;
  188.       }
  189.       catch (Throwable throwable1)
  190.       {
  191.       }
  192.       try {
  193.         this.socket.close();
  194.         this.socket = null;
  195.       }
  196.       catch (Throwable throwable2) {
  197.       }
  198.     }
  199.   }
  200.  
  201.   public void b() {
  202.     if (this.x > 1048576) {
  203.       a("disconnect.overflow", new Object[0]);
  204.     }
  205.  
  206.     if (this.m.isEmpty()) {
  207.       if (this.w++ == 1200)
  208.         a("disconnect.timeout", new Object[0]);
  209.     }
  210.     else {
  211.       this.w = 0;
  212.     }
  213.  
  214.     int i = 100;
  215.  
  216.     while ((!this.m.isEmpty()) && (i-- >= 0)) {
  217.       Packet packet = (Packet)this.m.remove(0);
  218.  
  219.       packet.a(this.p);
  220.     }
  221.  
  222.     a();
  223.     if ((this.t) && (this.m.isEmpty()))
  224.       this.p.a(this.u, this.v);
  225.   }
  226.  
  227.   public SocketAddress getSocketAddress()
  228.   {
  229.     return this.i;
  230.   }
  231.  
  232.   public void d() {
  233.     a();
  234.     this.q = true;
  235.     this.s.interrupt();
  236.     new ThreadMonitorConnection(this).start();
  237.   }
  238.  
  239.   public int e() {
  240.     return this.lowPriorityQueue.size();
  241.   }
  242.  
  243.   static boolean a(NetworkManager networkmanager) {
  244.     return networkmanager.l;
  245.   }
  246.  
  247.   static boolean b(NetworkManager networkmanager) {
  248.     return networkmanager.q;
  249.   }
  250.  
  251.   static boolean c(NetworkManager networkmanager) {
  252.     return networkmanager.g();
  253.   }
  254.  
  255.   static boolean d(NetworkManager networkmanager) {
  256.     return networkmanager.f();
  257.   }
  258.  
  259.   static DataOutputStream e(NetworkManager networkmanager) {
  260.     return networkmanager.output;
  261.   }
  262.  
  263.   static boolean f(NetworkManager networkmanager) {
  264.     return networkmanager.t;
  265.   }
  266.  
  267.   static void a(NetworkManager networkmanager, Exception exception) {
  268.     networkmanager.a(exception);
  269.   }
  270.  
  271.   static Thread g(NetworkManager networkmanager) {
  272.     return networkmanager.s;
  273.   }
  274.  
  275.   static Thread h(NetworkManager networkmanager) {
  276.     return networkmanager.r;
  277.   }
  278. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement