/net/minecraft/server/DedicatedServerConnectionThread.java
https://bitbucket.org/agaricusb/mc-dev · Java · 119 lines · 98 code · 21 blank · 0 comment · 12 complexity · 7ea2d28f19758d678e03ddfe92a6f18c MD5 · raw file
- 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.h = i;
- this.e = new ServerSocket(i, 0, inetaddress);
- this.g = inetaddress == null ? this.e.getInetAddress() : 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 for " + netloginhandler.getName() + ": " + 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) {
- ;
- }
- }
- }