summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTravis Watkins <amaranth@ubuntu.com>2012-08-03 00:06:25 -0500
committerTravis Watkins <amaranth@ubuntu.com>2012-08-03 00:48:07 -0500
commite156354a60d0286c66f18dd1fc4ad9e7e5852075 (patch)
tree20534a000d27e6bedae2189ad7caa070a2abe263 /src
parentd5fea5fd0de4c41b7de3ba153acdecf56fa005cd (diff)
downloadcraftbukkit-e156354a60d0286c66f18dd1fc4ad9e7e5852075.tar
craftbukkit-e156354a60d0286c66f18dd1fc4ad9e7e5852075.tar.gz
craftbukkit-e156354a60d0286c66f18dd1fc4ad9e7e5852075.tar.lz
craftbukkit-e156354a60d0286c66f18dd1fc4ad9e7e5852075.tar.xz
craftbukkit-e156354a60d0286c66f18dd1fc4ad9e7e5852075.zip
Add DedicatedServerConnectionThread from mc-dev for diff visibility.
Diffstat (limited to 'src')
-rw-r--r--src/main/java/net/minecraft/server/DedicatedServerConnectionThread.java119
1 files changed, 119 insertions, 0 deletions
diff --git a/src/main/java/net/minecraft/server/DedicatedServerConnectionThread.java b/src/main/java/net/minecraft/server/DedicatedServerConnectionThread.java
new file mode 100644
index 00000000..f27ce28f
--- /dev/null
+++ b/src/main/java/net/minecraft/server/DedicatedServerConnectionThread.java
@@ -0,0 +1,119 @@
+package net.minecraft.server;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class DedicatedServerConnectionThread extends Thread {
+
+ private static Logger a = Logger.getLogger("Minecraft");
+ private final List b = Collections.synchronizedList(new ArrayList());
+ private final HashMap c = new HashMap();
+ private int d = 0;
+ private final ServerSocket e;
+ private ServerConnection f;
+ private final InetAddress g;
+ private final int h;
+
+ public DedicatedServerConnectionThread(ServerConnection serverconnection, InetAddress inetaddress, int i) {
+ super("Listen thread");
+ this.f = serverconnection;
+ this.g = inetaddress;
+ this.h = i;
+ this.e = new ServerSocket(i, 0, inetaddress);
+ this.e.setPerformancePreferences(0, 2, 1);
+ }
+
+ public void a() {
+ List list = this.b;
+
+ synchronized (this.b) {
+ for (int i = 0; i < this.b.size(); ++i) {
+ NetLoginHandler netloginhandler = (NetLoginHandler) this.b.get(i);
+
+ try {
+ netloginhandler.c();
+ } catch (Exception exception) {
+ netloginhandler.disconnect("Internal server error");
+ a.log(Level.WARNING, "Failed to handle packet: " + exception, exception);
+ }
+
+ if (netloginhandler.c) {
+ this.b.remove(i--);
+ }
+
+ netloginhandler.networkManager.a();
+ }
+ }
+ }
+
+ public void run() {
+ while (this.f.b) {
+ try {
+ Socket socket = this.e.accept();
+ InetAddress inetaddress = socket.getInetAddress();
+ long i = System.currentTimeMillis();
+ HashMap hashmap = this.c;
+
+ synchronized (this.c) {
+ if (this.c.containsKey(inetaddress) && !b(inetaddress) && i - ((Long) this.c.get(inetaddress)).longValue() < 4000L) {
+ this.c.put(inetaddress, Long.valueOf(i));
+ socket.close();
+ continue;
+ }
+
+ this.c.put(inetaddress, Long.valueOf(i));
+ }
+
+ NetLoginHandler netloginhandler = new NetLoginHandler(this.f.d(), socket, "Connection #" + this.d++);
+
+ this.a(netloginhandler);
+ } catch (IOException ioexception) {
+ ioexception.printStackTrace();
+ }
+ }
+
+ System.out.println("Closing listening thread");
+ }
+
+ private void a(NetLoginHandler netloginhandler) {
+ if (netloginhandler == null) {
+ throw new IllegalArgumentException("Got null pendingconnection!");
+ } else {
+ List list = this.b;
+
+ synchronized (this.b) {
+ this.b.add(netloginhandler);
+ }
+ }
+ }
+
+ private static boolean b(InetAddress inetaddress) {
+ return "127.0.0.1".equals(inetaddress.getHostAddress());
+ }
+
+ public void a(InetAddress inetaddress) {
+ if (inetaddress != null) {
+ HashMap hashmap = this.c;
+
+ synchronized (this.c) {
+ this.c.remove(inetaddress);
+ }
+ }
+ }
+
+ public void b() {
+ try {
+ this.e.close();
+ } catch (Throwable throwable) {
+ ;
+ }
+ }
+}