001 package net.minecraft.server.integrated;
002
003 import cpw.mods.fml.common.Side;
004 import cpw.mods.fml.common.asm.SideOnly;
005 import cpw.mods.fml.common.network.FMLNetworkHandler;
006
007 import java.io.IOException;
008 import java.net.InetAddress;
009 import net.minecraft.entity.player.EntityPlayerMP;
010 import net.minecraft.network.MemoryConnection;
011 import net.minecraft.network.NetworkListenThread;
012 import net.minecraft.network.packet.NetHandler;
013 import net.minecraft.server.MinecraftServer;
014 import net.minecraft.server.ServerListenThread;
015 import net.minecraft.util.HttpUtil;
016
017 @SideOnly(Side.CLIENT)
018 public class IntegratedServerListenThread extends NetworkListenThread
019 {
020 private final MemoryConnection netMemoryConnection = new MemoryConnection((NetHandler)null);
021 private MemoryConnection theMemoryConnection;
022 private String field_71759_e;
023 private boolean field_71756_f = false;
024 private ServerListenThread myServerListenThread;
025
026 public IntegratedServerListenThread(IntegratedServer par1IntegratedServer) throws IOException
027 {
028 super(par1IntegratedServer);
029 }
030
031 public void func_71754_a(MemoryConnection par1MemoryConnection, String par2Str)
032 {
033 this.theMemoryConnection = par1MemoryConnection;
034 this.field_71759_e = par2Str;
035 }
036
037 public String func_71755_c() throws IOException
038 {
039 if (this.myServerListenThread == null)
040 {
041 int var1 = -1;
042
043 try
044 {
045 var1 = HttpUtil.func_76181_a();
046 }
047 catch (IOException var4)
048 {
049 ;
050 }
051
052 if (var1 <= 0)
053 {
054 var1 = 25564;
055 }
056
057 try
058 {
059 this.myServerListenThread = new ServerListenThread(this, (InetAddress)null, var1);
060 this.myServerListenThread.start();
061 }
062 catch (IOException var3)
063 {
064 throw var3;
065 }
066 }
067
068 return FMLNetworkHandler.computeLocalHost().getHostAddress() + ":" + this.myServerListenThread.getMyPort();
069 }
070
071 public void stopListening()
072 {
073 super.stopListening();
074
075 if (this.myServerListenThread != null)
076 {
077 System.out.println("Stopping server connection");
078 this.myServerListenThread.func_71768_b();
079 this.myServerListenThread.interrupt();
080 this.myServerListenThread = null;
081 }
082 }
083
084 /**
085 * processes packets and pending connections
086 */
087 public void networkTick()
088 {
089 if (this.theMemoryConnection != null)
090 {
091 EntityPlayerMP var1 = this.getIntergatedServerMinecraftServerInstance().getConfigurationManager().createPlayerForUser(this.field_71759_e);
092
093 if (var1 != null)
094 {
095 this.netMemoryConnection.pairWith(this.theMemoryConnection);
096 this.field_71756_f = true;
097 this.getIntergatedServerMinecraftServerInstance().getConfigurationManager().initializeConnectionToPlayer(this.netMemoryConnection, var1);
098 }
099
100 this.theMemoryConnection = null;
101 this.field_71759_e = null;
102 }
103
104 if (this.myServerListenThread != null)
105 {
106 this.myServerListenThread.processPendingConnections();
107 }
108
109 super.networkTick();
110 }
111
112 /**
113 * Gets MinecraftServer instance.
114 */
115 public IntegratedServer getIntergatedServerMinecraftServerInstance()
116 {
117 return (IntegratedServer)super.getServer();
118 }
119
120 public boolean func_71752_f()
121 {
122 return this.field_71756_f && this.netMemoryConnection.getPairedConnection().isConnectionActive() && this.netMemoryConnection.getPairedConnection().isGamePaused();
123 }
124
125 public MinecraftServer getServer()
126 {
127 return this.getIntergatedServerMinecraftServerInstance();
128 }
129 }