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

◆ CheckBytes()

static void Terraria.NetMessage.CheckBytes ( int bufferIndex = 256)
inlinestatic

Definition at line 2487 of file NetMessage.cs.

2488 {
2489 lock (buffer[bufferIndex])
2490 {
2491 if (Main.dedServ && Netplay.Clients[bufferIndex].PendingTermination)
2492 {
2493 Netplay.Clients[bufferIndex].PendingTerminationApproved = true;
2494 buffer[bufferIndex].checkBytes = false;
2495 return;
2496 }
2497 int num = 0;
2498 int num2 = buffer[bufferIndex].totalData;
2499 try
2500 {
2501 while (num2 >= 2)
2502 {
2503 int num3 = BitConverter.ToUInt16(buffer[bufferIndex].readBuffer, num);
2504 if (num2 >= num3)
2505 {
2506 long position = buffer[bufferIndex].reader.BaseStream.Position;
2507 buffer[bufferIndex].GetData(num + 2, num3 - 2, out var _);
2508 if (Main.dedServ && Netplay.Clients[bufferIndex].PendingTermination)
2509 {
2510 Netplay.Clients[bufferIndex].PendingTerminationApproved = true;
2511 buffer[bufferIndex].checkBytes = false;
2512 break;
2513 }
2514 buffer[bufferIndex].reader.BaseStream.Position = position + num3;
2515 num2 -= num3;
2516 num += num3;
2517 continue;
2518 }
2519 break;
2520 }
2521 }
2522 catch (Exception)
2523 {
2524 if (Main.dedServ && num < buffer.Length - 100)
2525 {
2526 Console.WriteLine(Language.GetTextValue("Error.NetMessageError", buffer[num + 2]));
2527 }
2528 num2 = 0;
2529 num = 0;
2530 }
2531 if (num2 != buffer[bufferIndex].totalData)
2532 {
2533 for (int i = 0; i < num2; i++)
2534 {
2535 buffer[bufferIndex].readBuffer[i] = buffer[bufferIndex].readBuffer[i + num];
2536 }
2537 buffer[bufferIndex].totalData = num2;
2538 }
2539 buffer[bufferIndex].checkBytes = false;
2540 }
2541 }
static ushort ToUInt16(byte[] value, int startIndex)
static void WriteLine()
Definition Console.cs:733
static string GetTextValue(string key)
Definition Language.cs:15
static MessageBuffer[] buffer
Definition NetMessage.cs:61

References Terraria.NetMessage.buffer, Terraria.Netplay.Clients, Terraria.Main.dedServ, Terraria.Localization.Language.GetTextValue(), System.BitConverter.ToUInt16(), and System.Console.WriteLine().

Referenced by Terraria.Netplay.InnerClientLoop(), Terraria.Netplay.UpdateClientInMainThread(), and Terraria.Netplay.UpdateServerInMainThread().