Terraria.Netplay.InnerClientLoop C# (CSharp) Method

InnerClientLoop() private static method

private static InnerClientLoop ( ) : void
return void
        private static void InnerClientLoop()
        {
            try
            {
                NetMessage.buffer[256].Reset();
                int num1 = -1;
                while (!Netplay.disconnect)
                {
                    if (Netplay.Connection.Socket.IsConnected())
                    {
                        if (NetMessage.buffer[256].checkBytes)
                            NetMessage.CheckBytes(256);
                        Netplay.Connection.IsActive = true;
                        if (Netplay.Connection.State == 0)
                        {
                            Main.statusText = "Found server";
                            Netplay.Connection.State = 1;
                            NetMessage.SendData(1, -1, -1, "", 0, 0.0f, 0.0f, 0.0f, 0, 0, 0);
                        }
                        if (Netplay.Connection.State == 2 && num1 != Netplay.Connection.State)
                            Main.statusText = "Sending player data...";
                        if (Netplay.Connection.State == 3 && num1 != Netplay.Connection.State)
                            Main.statusText = "Requesting world information";
                        if (Netplay.Connection.State == 4)
                        {
                            WorldGen.worldCleared = false;
                            Netplay.Connection.State = 5;
                            Main.cloudBGAlpha = (double)Main.cloudBGActive < 1.0 ? 0.0f : 1f;
                            Main.windSpeed = Main.windSpeedSet;
                            Cloud.resetClouds();
                            Main.cloudAlpha = Main.maxRaining;
                            WorldGen.clearWorld();
                            if (Main.mapEnabled)
                                Main.Map.Load();
                        }
                        if (Netplay.Connection.State == 5 && Main.loadMapLock)
                        {
                            float num2 = (float)Main.loadMapLastX / (float)Main.maxTilesX;
                            Main.statusText = string.Concat(new object[4]
              {
                (object) Lang.gen[68],
                (object) " ",
                (object) (int) ((double) num2 * 100.0 + 1.0),
                (object) "%"
              });
                        }
                        else if (Netplay.Connection.State == 5 && WorldGen.worldCleared)
                        {
                            Netplay.Connection.State = 6;
                            Main.player[Main.myPlayer].FindSpawn();
                            NetMessage.SendData(8, -1, -1, "", Main.player[Main.myPlayer].SpawnX, (float)Main.player[Main.myPlayer].SpawnY, 0.0f, 0.0f, 0, 0, 0);
                        }
                        if (Netplay.Connection.State == 6 && num1 != Netplay.Connection.State)
                            Main.statusText = "Requesting tile data";
                        if (!Netplay.Connection.IsReading && !Netplay.disconnect && Netplay.Connection.Socket.IsDataAvailable())
                        {
                            Netplay.Connection.IsReading = true;
                            Netplay.Connection.Socket.AsyncReceive(Netplay.Connection.ReadBuffer, 0, Netplay.Connection.ReadBuffer.Length, new SocketReceiveCallback(Netplay.Connection.ClientReadCallBack), (object)null);
                        }
                        if (Netplay.Connection.StatusMax > 0 && Netplay.Connection.StatusText != "")
                        {
                            if (Netplay.Connection.StatusCount >= Netplay.Connection.StatusMax)
                            {
                                Main.statusText = Netplay.Connection.StatusText + ": Complete!";
                                Netplay.Connection.StatusText = "";
                                Netplay.Connection.StatusMax = 0;
                                Netplay.Connection.StatusCount = 0;
                            }
                            else
                                Main.statusText = string.Concat(new object[4]
                {
                  (object) Netplay.Connection.StatusText,
                  (object) ": ",
                  (object) (int) ((double) Netplay.Connection.StatusCount / (double) Netplay.Connection.StatusMax * 100.0),
                  (object) "%"
                });
                        }
                        Thread.Sleep(1);
                    }
                    else if (Netplay.Connection.IsActive)
                    {
                        Main.statusText = "Lost connection";
                        Netplay.disconnect = true;
                    }
                    num1 = Netplay.Connection.State;
                }
                try
                {
                    Netplay.Connection.Socket.Close();
                }
                catch
                {
                }
                if (!Main.gameMenu)
                {
                    Main.SwitchNetMode(0);
                    Player.SavePlayer(Main.ActivePlayerFileData, false);
                    Main.ActivePlayerFileData.StopPlayTimer();
                    Main.gameMenu = true;
                    Main.menuMode = 14;
                }
                NetMessage.buffer[256].Reset();
                if (Main.menuMode == 15 && Main.statusText == "Lost connection")
                    Main.menuMode = 14;
                if (Netplay.Connection.StatusText != "" && Netplay.Connection.StatusText != null)
                    Main.statusText = "Lost connection";
                Netplay.Connection.StatusCount = 0;
                Netplay.Connection.StatusMax = 0;
                Netplay.Connection.StatusText = "";
                Main.SwitchNetMode(0);
            }
            catch (Exception ex)
            {
                try
                {
                    using (StreamWriter streamWriter = new StreamWriter("client-crashlog.txt", true))
                    {
                        streamWriter.WriteLine((object)DateTime.Now);
                        streamWriter.WriteLine((object)ex);
                        streamWriter.WriteLine("");
                    }
                }
                catch
                {
                }
                Netplay.disconnect = true;
            }
            if (Netplay.OnDisconnect == null)
                return;
            Netplay.OnDisconnect();
        }

Usage Example

Example #1
0
        public static void TcpClientLoop(object threadContext)
        {
            Netplay.ClientLoopSetup((RemoteAddress) new TcpAddress(Netplay.ServerIP, Netplay.ListenPort));
            Main.menuMode = 14;
            bool flag = true;

            while (flag)
            {
                flag = false;
                try
                {
                    Netplay.Connection.Socket.Connect((RemoteAddress) new TcpAddress(Netplay.ServerIP, Netplay.ListenPort));
                    flag = false;
                }
                catch
                {
                    if (!Netplay.disconnect)
                    {
                        if (Main.gameMenu)
                        {
                            flag = true;
                        }
                    }
                }
            }
            Netplay.InnerClientLoop();
        }
All Usage Examples Of Terraria.Netplay::InnerClientLoop