private static void InnerClientLoop()
{
try
{
NetMessage.buffer[17].Reset();
int num = -1;
while (!disconnect)
{
if (Connection.Socket.IsConnected())
{
if (NetMessage.buffer[17].checkBytes)
{
NetMessage.CheckBytes();
}
Connection.IsActive = true;
if (Connection.State == 0)
{
Main.statusText = Language.GetTextValue("Net.FoundServer");
Connection.State = 1;
NetMessage.SendData(1);
}
if (Connection.State == 2 && num != Connection.State)
{
num = Connection.State;
Main.statusText = Language.GetTextValue("Net.SendingPlayerData");
}
if (Connection.State == 3 && num != Connection.State)
{
num = Connection.State;
Main.statusText = Language.GetTextValue("Net.RequestingWorldInformation");
}
if (Connection.State == 4)
{
WorldGen.worldCleared = false;
Connection.State = 5;
if (Main.cloudBGActive >= 1f)
{
Main.cloudBGAlpha = 1f;
}
else
{
Main.cloudBGAlpha = 0f;
}
Main.windSpeed = Main.windSpeedSet;
Cloud.resetClouds();
Main.cloudAlpha = Main.maxRaining;
WorldGen.clearWorld();
if (Main.mapEnabled)
{
Main.Map.Load();
}
}
if (Connection.State == 5 && Main.loadMapLock)
{
float num2 = (float)Main.loadMapLastX / (float)Main.maxTilesX;
Main.statusText = string.Concat(Lang.gen[68], " ", (int)(num2 * 100f + 1f), "%");
}
else if (Connection.State == 5 && WorldGen.worldCleared)
{
Connection.State = 6;
Main.player[Main.myPlayer].FindSpawn();
NetMessage.SendData(8, -1, -1, "", Main.player[Main.myPlayer].SpawnX, Main.player[Main.myPlayer].SpawnY);
}
if (Connection.State == 6 && num != Connection.State)
{
Main.statusText = Language.GetTextValue("Net.RequestingTileData");
}
if (!Connection.IsReading && !disconnect && Connection.Socket.IsDataAvailable())
{
Connection.IsReading = true;
Connection.Socket.AsyncReceive(Connection.ReadBuffer, 0, Connection.ReadBuffer.Length, Connection.ClientReadCallBack);
}
if (Connection.StatusMax > 0 && Connection.StatusText != "")
{
if (Connection.StatusCount >= Connection.StatusMax)
{
Main.statusText = Language.GetTextValue("Net.StatusComplete", Connection.StatusText);
Connection.StatusText = "";
Connection.StatusMax = 0;
Connection.StatusCount = 0;
}
else
{
Main.statusText = Connection.StatusText + ": " + (int)((float)Connection.StatusCount / (float)Connection.StatusMax * 100f) + "%";
}
}
Thread.Sleep(1);
}
else if (Connection.IsActive)
{
Main.statusText = Language.GetTextValue("Net.LostConnection");
disconnect = true;
}
num = Connection.State;
}
try
{
Connection.Socket.Close();
}
catch
{
}
if (!Main.gameMenu)
{
Main.SwitchNetMode(0);
Player.SavePlayer(Main.ActivePlayerFileData);
Main.ActivePlayerFileData.StopPlayTimer();
Main.gameMenu = true;
Main.menuMode = 14;
}
NetMessage.buffer[17].Reset();
if (Main.menuMode == 15 && Main.statusText == Language.GetTextValue("Net.LostConnection"))
{
Main.menuMode = 14;
}
if (Connection.StatusText != "" && Connection.StatusText != null)
{
Main.statusText = Language.GetTextValue("Net.LostConnection");
}
Connection.StatusCount = 0;
Connection.StatusMax = 0;
Connection.StatusText = "";
Main.SwitchNetMode(0);
}
catch (Exception value)
{
try
{
using (StreamWriter streamWriter = new StreamWriter("client-crashlog.txt", true))
{
streamWriter.WriteLine(DateTime.Now);
streamWriter.WriteLine(value);
streamWriter.WriteLine("");
}
}
catch
{
}
disconnect = true;
}
if (Netplay.OnDisconnect != null)
{
Netplay.OnDisconnect();
}
}