package net.minecraft.server.integrated;
import cpw.mods.fml.common.network.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import java.io.IOException;
import java.net.InetAddress;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.network.MemoryConnection;
import net.minecraft.network.NetworkListenThread;
import net.minecraft.network.packet.NetHandler;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.ServerListenThread;
import net.minecraft.util.HttpUtil;
@SideOnly(Side.CLIENT)
public class IntegratedServerListenThread extends NetworkListenThread
{
private final MemoryConnection netMemoryConnection;
private MemoryConnection theMemoryConnection;
private String field_71759_e;
private boolean field_71756_f = false;
private ServerListenThread myServerListenThread;
public IntegratedServerListenThread(IntegratedServer par1IntegratedServer) throws IOException
{
super(par1IntegratedServer);
this.netMemoryConnection = new MemoryConnection(par1IntegratedServer.getLogAgent(), (NetHandler)null);
}
public void func_71754_a(MemoryConnection par1MemoryConnection, String par2Str)
{
this.theMemoryConnection = par1MemoryConnection;
this.field_71759_e = par2Str;
}
public String func_71755_c() throws IOException
{
if (this.myServerListenThread == null)
{
int i = -1;
try
{
i = HttpUtil.func_76181_a();
}
catch (IOException ioexception)
{
;
}
if (i <= 0)
{
i = 25564;
}
try
{
this.myServerListenThread = new ServerListenThread(this, (InetAddress)null, i);
this.myServerListenThread.start();
}
catch (IOException ioexception1)
{
throw ioexception1;
}
}
return FMLNetworkHandler.computeLocalHost().getHostAddress() + ":" + this.myServerListenThread.getMyPort();
}
public void stopListening()
{
super.stopListening();
if (this.myServerListenThread != null)
{
this.getIntegratedServer().getLogAgent().logInfo("Stopping server connection");
this.myServerListenThread.func_71768_b();
this.myServerListenThread.interrupt();
this.myServerListenThread = null;
}
}
/**
* processes packets and pending connections
*/
public void networkTick()
{
if (this.theMemoryConnection != null)
{
EntityPlayerMP entityplayermp = this.getIntegratedServer().getConfigurationManager().createPlayerForUser(this.field_71759_e);
if (entityplayermp != null)
{
this.netMemoryConnection.pairWith(this.theMemoryConnection);
this.field_71756_f = true;
this.getIntegratedServer().getConfigurationManager().initializeConnectionToPlayer(this.netMemoryConnection, entityplayermp);
}
this.theMemoryConnection = null;
this.field_71759_e = null;
}
if (this.myServerListenThread != null)
{
this.myServerListenThread.processPendingConnections();
}
super.networkTick();
}
/**
* Gets MinecraftServer instance.
*/
public IntegratedServer getIntegratedServer()
{
return (IntegratedServer)super.getServer();
}
public boolean isGamePaused()
{
return this.field_71756_f && this.netMemoryConnection.getPairedConnection().isConnectionActive() && this.netMemoryConnection.getPairedConnection().isGamePaused();
}
public MinecraftServer getServer()
{
return this.getIntegratedServer();
}
}