Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ InnerClientLoop()

static void Terraria.Netplay.InnerClientLoop ( )
inlinestaticprivate

Definition at line 466 of file Netplay.cs.

467 {
468 try
469 {
470 NetMessage.buffer[256].Reset();
471 int num = -1;
472 while (!Disconnect)
473 {
474 if (Connection.Socket.IsConnected())
475 {
476 if (Connection.ServerWantsToRunCheckBytesInClientLoopThread && NetMessage.buffer[256].checkBytes)
477 {
478 NetMessage.CheckBytes();
479 }
480 Connection.IsActive = true;
481 if (Connection.State == 0)
482 {
483 Main.statusText = Language.GetTextValue("Net.FoundServer");
484 Connection.State = 1;
485 NetMessage.SendData(1);
486 }
487 if (Connection.State == 2 && num != Connection.State)
488 {
489 Main.statusText = Language.GetTextValue("Net.SendingPlayerData");
490 }
491 if (Connection.State == 3 && num != Connection.State)
492 {
493 Main.statusText = Language.GetTextValue("Net.RequestingWorldInformation");
494 }
495 if (Connection.State == 4)
496 {
497 WorldGen.worldCleared = false;
498 Connection.State = 5;
499 if (Main.cloudBGActive >= 1f)
500 {
501 Main.cloudBGAlpha = 1f;
502 }
503 else
504 {
505 Main.cloudBGAlpha = 0f;
506 }
507 Main.windSpeedCurrent = Main.windSpeedTarget;
508 Cloud.resetClouds();
509 Main.cloudAlpha = Main.maxRaining;
510 Main.ToggleGameplayUpdates(state: false);
511 WorldGen.clearWorld();
512 if (Main.mapEnabled)
513 {
514 Main.Map.Load();
515 }
516 }
517 if (Connection.State == 5 && Main.loadMapLock)
518 {
519 float num2 = (float)Main.loadMapLastX / (float)Main.maxTilesX;
520 Main.statusText = Lang.gen[68].Value + " " + (int)(num2 * 100f + 1f) + "%";
521 }
522 else if (Connection.State == 5 && WorldGen.worldCleared)
523 {
524 Connection.State = 6;
525 Main.player[Main.myPlayer].FindSpawn();
526 NetMessage.SendData(8, -1, -1, null, Main.player[Main.myPlayer].SpawnX, Main.player[Main.myPlayer].SpawnY);
527 }
528 if (Connection.State == 6 && num != Connection.State)
529 {
530 Main.statusText = Language.GetTextValue("Net.RequestingTileData");
531 }
532 if (!Connection.IsReading && !Disconnect && Connection.Socket.IsDataAvailable())
533 {
534 Connection.IsReading = true;
535 Connection.Socket.AsyncReceive(Connection.ReadBuffer, 0, Connection.ReadBuffer.Length, Connection.ClientReadCallBack);
536 }
537 if (Connection.StatusMax > 0 && Connection.StatusText != "")
538 {
539 if (Connection.StatusCount >= Connection.StatusMax)
540 {
541 Main.statusText = Language.GetTextValue("Net.StatusComplete", Connection.StatusText);
542 Connection.StatusText = "";
543 Connection.StatusMax = 0;
544 Connection.StatusCount = 0;
545 }
546 else
547 {
548 Main.statusText = Connection.StatusText + ": " + (int)((float)Connection.StatusCount / (float)Connection.StatusMax * 100f) + "%";
549 }
550 }
551 Thread.Sleep(1);
552 }
553 else if (Connection.IsActive)
554 {
555 Main.statusText = Language.GetTextValue("Net.LostConnection");
556 Disconnect = true;
557 }
558 num = Connection.State;
559 }
560 try
561 {
562 Connection.Socket.Close();
563 }
564 catch
565 {
566 }
567 if (!Main.gameMenu)
568 {
569 Main.gameMenu = true;
570 Main.SwitchNetMode(0);
571 MapHelper.noStatusText = true;
572 Player.SavePlayer(Main.ActivePlayerFileData);
573 Player.ClearPlayerTempInfo();
574 Main.ActivePlayerFileData.StopPlayTimer();
576 MapHelper.noStatusText = false;
577 Main.menuMode = 14;
578 }
579 NetMessage.buffer[256].Reset();
580 if (Main.menuMode == 15 && Main.statusText == Language.GetTextValue("Net.LostConnection"))
581 {
582 Main.menuMode = 14;
583 }
584 if (Connection.StatusText != "" && Connection.StatusText != null)
585 {
586 Main.statusText = Language.GetTextValue("Net.LostConnection");
587 }
588 Connection.StatusCount = 0;
589 Connection.StatusMax = 0;
590 Connection.StatusText = "";
591 Main.SwitchNetMode(0);
592 }
593 catch (Exception value)
594 {
595 try
596 {
597 using StreamWriter streamWriter = new StreamWriter("client-crashlog.txt", append: true);
598 streamWriter.WriteLine(DateTime.Now);
599 streamWriter.WriteLine(value);
600 streamWriter.WriteLine("");
601 }
602 catch
603 {
604 }
605 Disconnect = true;
606 }
607 if (Netplay.OnDisconnect != null)
608 {
609 Netplay.OnDisconnect();
610 }
611 }
override void WriteLine(string? value)
static void Sleep(int millisecondsTimeout)
Definition Thread.cs:658
static void StopTrackedSounds()
static string GetTextValue(string key)
Definition Language.cs:15
static bool Disconnect
Definition Netplay.cs:55
static RemoteServer Connection
Definition Netplay.cs:39
static DateTime Now
Definition DateTime.cs:103

References Terraria.Main.ActivePlayerFileData, Terraria.NetMessage.buffer, Terraria.NetMessage.CheckBytes(), Terraria.Player.ClearPlayerTempInfo(), Terraria.WorldGen.clearWorld(), Terraria.Main.cloudBGActive, Terraria.Netplay.Connection, Terraria.Netplay.Disconnect, Terraria.Main.gameMenu, Terraria.Lang.gen, Terraria.Localization.Language.GetTextValue(), Terraria.Main.loadMapLastX, Terraria.Main.loadMapLock, Terraria.Main.Map, Terraria.Main.mapEnabled, Terraria.Main.maxRaining, Terraria.Main.maxTilesX, Terraria.Main.menuMode, Terraria.Main.myPlayer, System.DateTime.Now, Terraria.Netplay.OnDisconnect, Terraria.Main.player, Terraria.Cloud.resetClouds(), Terraria.Player.SavePlayer(), Terraria.NetMessage.SendData(), System.Threading.Thread.Sleep(), System.state, Terraria.Main.statusText, Terraria.Audio.SoundEngine.StopTrackedSounds(), Terraria.Main.SwitchNetMode(), Terraria.Main.ToggleGameplayUpdates(), System.value, Terraria.Main.windSpeedTarget, Terraria.WorldGen.worldCleared, and System.IO.StreamWriter.WriteLine().

Referenced by Terraria.Netplay.SocialClientLoop(), and Terraria.Netplay.TcpClientLoop().