summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/NetworkManager.java
diff options
context:
space:
mode:
authorDinnerbone <dinnerbone@dinnerbone.com>2011-05-26 13:48:22 +0100
committerDinnerbone <dinnerbone@dinnerbone.com>2011-05-26 13:48:22 +0100
commit6903f2024217f0959c015e76b23297af8e3b573f (patch)
tree690bf275ce19c655bd64eea05be231ed0c318fd6 /src/main/java/net/minecraft/server/NetworkManager.java
parentf463453d73249fe73cf3e23ed37e6cee870c8bf4 (diff)
downloadcraftbukkit-6903f2024217f0959c015e76b23297af8e3b573f.tar
craftbukkit-6903f2024217f0959c015e76b23297af8e3b573f.tar.gz
craftbukkit-6903f2024217f0959c015e76b23297af8e3b573f.tar.lz
craftbukkit-6903f2024217f0959c015e76b23297af8e3b573f.tar.xz
craftbukkit-6903f2024217f0959c015e76b23297af8e3b573f.zip
Implemented 1.6!
Diffstat (limited to 'src/main/java/net/minecraft/server/NetworkManager.java')
-rw-r--r--src/main/java/net/minecraft/server/NetworkManager.java197
1 files changed, 109 insertions, 88 deletions
diff --git a/src/main/java/net/minecraft/server/NetworkManager.java b/src/main/java/net/minecraft/server/NetworkManager.java
index 0c3b1d20..f463aa58 100644
--- a/src/main/java/net/minecraft/server/NetworkManager.java
+++ b/src/main/java/net/minecraft/server/NetworkManager.java
@@ -16,31 +16,34 @@ public class NetworkManager {
public static final Object a = new Object();
public static int b;
public static int c;
- private Object e = new Object();
+ private Object g = new Object();
public Socket socket; // CraftBukkit - private -> public
- private final SocketAddress g;
+ private final SocketAddress i;
private DataInputStream input;
private DataOutputStream output;
- private boolean j = true;
- private List k = Collections.synchronizedList(new ArrayList());
- private List l = Collections.synchronizedList(new ArrayList());
+ private boolean l = true;
private List m = Collections.synchronizedList(new ArrayList());
- private NetHandler n;
- private boolean o = false;
- private Thread p;
- private Thread q;
- private boolean r = false;
- private String s = "";
- private Object[] t;
- private int u = 0;
- private int v = 0;
- public int d = 0;
- private int w = 50;
+ private List n = Collections.synchronizedList(new ArrayList());
+ private List o = Collections.synchronizedList(new ArrayList());
+ private NetHandler p;
+ private boolean q = false;
+ private Thread r;
+ private Thread s;
+ private boolean t = false;
+ private String u = "";
+ private Object[] v;
+ private int w = 0;
+ private int x = 0;
+ private transient boolean y = false;
+ public static int[] d = new int[256];
+ public static int[] e = new int[256];
+ public int f = 0;
+ private int z = 50;
public NetworkManager(Socket socket, String s, NetHandler nethandler) {
this.socket = socket;
- this.g = socket.getRemoteSocketAddress();
- this.n = nethandler;
+ this.i = socket.getRemoteSocketAddress();
+ this.p = nethandler;
try {
socket.setSoTimeout(30000);
@@ -54,86 +57,91 @@ public class NetworkManager {
System.err.println(socketexception.getMessage());
}
- this.q = new NetworkReaderThread(this, s + " read thread");
- this.p = new NetworkWriterThread(this, s + " write thread");
- this.q.start();
- this.p.start();
+ this.s = new NetworkReaderThread(this, s + " read thread");
+ this.r = new NetworkWriterThread(this, s + " write thread");
+ this.s.start();
+ this.r.start();
}
public void a(NetHandler nethandler) {
- this.n = nethandler;
+ this.p = nethandler;
}
public void a(Packet packet) {
- if (!this.o) {
- Object object = this.e;
+ if (!this.q) {
+ Object object = this.g;
- synchronized (this.e) {
- this.v += packet.a() + 1;
+ synchronized (this.g) {
+ this.x += packet.a() + 1;
if (packet.k) {
- this.m.add(packet);
+ this.o.add(packet);
} else {
- this.l.add(packet);
+ this.n.add(packet);
}
}
}
}
- private void e() {
+ private void f() {
try {
- boolean flag = true;
Object object;
Packet packet;
-
- if (!this.l.isEmpty() && (this.d == 0 || System.currentTimeMillis() - ((Packet) this.l.get(0)).timestamp >= (long) this.d)) {
- flag = false;
- object = this.e;
- synchronized (this.e) {
- packet = (Packet) this.l.remove(0);
- this.v -= packet.a() + 1;
+ int i;
+ int[] aint;
+
+ if (!this.n.isEmpty() && (this.f == 0 || System.currentTimeMillis() - ((Packet) this.n.get(0)).timestamp >= (long) this.f)) {
+ object = this.g;
+ synchronized (this.g) {
+ packet = (Packet) this.n.remove(0);
+ this.x -= packet.a() + 1;
}
Packet.a(packet, this.output);
+ aint = e;
+ i = packet.b();
+ aint[i] += packet.a();
}
- // CraftBukkit - don't allow low priority packet to be sent unless it was placed in the queue before the first packet on the high priority queue
- if ((flag || this.w-- <= 0) && !this.m.isEmpty() && (this.l.isEmpty() || ((Packet) this.l.get(0)).timestamp > ((Packet) this.m.get(0)).timestamp)) {
- flag = false;
- object = this.e;
- synchronized (this.e) {
- packet = (Packet) this.m.remove(0);
- this.v -= packet.a() + 1;
+ // Craftbukkit - we used to enforce package priorities, we don't now. Do we need to redo this? - TODO
+ if (this.z-- <= 0 && !this.o.isEmpty() && (this.f == 0 || System.currentTimeMillis() - ((Packet) this.o.get(0)).timestamp >= (long) this.f)) {
+ object = this.g;
+ synchronized (this.g) {
+ packet = (Packet) this.o.remove(0);
+ this.x -= packet.a() + 1;
}
Packet.a(packet, this.output);
- this.w = 50;
- }
-
- if (flag) {
- Thread.sleep(10L);
- } else {
- this.output.flush();
+ aint = e;
+ i = packet.b();
+ aint[i] += packet.a();
+ this.z = 50;
}
- } catch (InterruptedException interruptedexception) {
- ;
} catch (Exception exception) {
- if (!this.r) {
+ if (!this.t) {
this.a(exception);
}
}
}
- private void f() {
+ public void a() {
+ this.y = true;
+ }
+
+ private void g() {
try {
- Packet packet = Packet.a(this.input, this.n.c());
+ Packet packet = Packet.a(this.input, this.p.c());
if (packet != null) {
- this.k.add(packet);
+ int[] aint = d;
+ int i = packet.b();
+
+ aint[i] += packet.a();
+ this.m.add(packet);
} else {
this.a("disconnect.endOfStream", new Object[0]);
}
} catch (Exception exception) {
- if (!this.r) {
+ if (!this.t) {
this.a(exception);
}
}
@@ -145,12 +153,12 @@ public class NetworkManager {
}
public void a(String s, Object... aobject) {
- if (this.j) {
- this.r = true;
- this.s = s;
- this.t = aobject;
+ if (this.l) {
+ this.t = true;
+ this.u = s;
+ this.v = aobject;
(new NetworkMasterThread(this)).start();
- this.j = false;
+ this.l = false;
try {
this.input.close();
@@ -175,67 +183,80 @@ public class NetworkManager {
}
}
- public void a() {
- if (this.v > 1048576) {
+ public void b() {
+ if (this.x > 1048576) {
this.a("disconnect.overflow", new Object[0]);
}
- if (this.k.isEmpty()) {
- if (this.u++ == 1200) {
+ if (this.m.isEmpty()) {
+ if (this.w++ == 1200) {
this.a("disconnect.timeout", new Object[0]);
}
} else {
- this.u = 0;
+ this.w = 0;
}
int i = 100;
- while (!this.k.isEmpty() && i-- >= 0) {
- Packet packet = (Packet) this.k.remove(0);
+ while (!this.m.isEmpty() && i-- >= 0) {
+ Packet packet = (Packet) this.m.remove(0);
- packet.a(this.n);
+ packet.a(this.p);
}
- if (this.r && this.k.isEmpty()) {
- this.n.a(this.s, this.t);
+ if (this.t && this.m.isEmpty()) {
+ this.p.a(this.u, this.v);
}
}
public SocketAddress getSocketAddress() {
- return this.g;
+ return this.i;
}
- public void c() {
- this.o = true;
- this.q.interrupt();
+ public void d() {
+ this.a();
+ this.q = true;
+ this.s.interrupt();
(new ThreadMonitorConnection(this)).start();
}
- public int d() {
- return this.m.size();
+ public int e() {
+ return this.o.size();
}
static boolean a(NetworkManager networkmanager) {
- return networkmanager.j;
+ return networkmanager.l;
}
static boolean b(NetworkManager networkmanager) {
- return networkmanager.o;
+ return networkmanager.q;
}
static void c(NetworkManager networkmanager) {
- networkmanager.f();
+ networkmanager.g();
}
static void d(NetworkManager networkmanager) {
- networkmanager.e();
+ networkmanager.f();
}
- static Thread e(NetworkManager networkmanager) {
- return networkmanager.q;
+ static boolean e(NetworkManager networkmanager) {
+ return networkmanager.y;
+ }
+
+ static boolean a(NetworkManager networkmanager, boolean flag) {
+ return networkmanager.y = flag;
+ }
+
+ static DataOutputStream f(NetworkManager networkmanager) {
+ return networkmanager.output;
+ }
+
+ static Thread g(NetworkManager networkmanager) {
+ return networkmanager.s;
}
- static Thread f(NetworkManager networkmanager) {
- return networkmanager.p;
+ static Thread h(NetworkManager networkmanager) {
+ return networkmanager.r;
}
}