Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
Netplay.cs
Go to the documentation of this file.
1using System;
2using System.IO;
3using System.Linq;
4using System.Net;
7using ReLogic.OS;
10using Terraria.Map;
11using Terraria.Net;
13using Terraria.Social;
15
16namespace Terraria;
17
18public class Netplay
19{
21 {
22 public int RequestId;
23
24 public Action SuccessCallback;
25
26 public string RemoteAddress;
27 }
28
29 public const int MaxConnections = 256;
30
31 public const int NetBufferSize = 1024;
32
33 public static string BanFilePath = "banlist.txt";
34
35 public static string ServerPassword = "";
36
37 public static RemoteClient[] Clients = new RemoteClient[256];
38
39 public static RemoteServer Connection = new RemoteServer();
40
41 public static IPAddress ServerIP;
42
43 public static string ServerIPText = "";
44
45 public static ISocket TcpListener;
46
47 public static int ListenPort = 7777;
48
49 public static bool IsListening = true;
50
51 public static bool UseUPNP = true;
52
53 public static bool SaveOnServerExit = true;
54
55 public static bool Disconnect;
56
57 public static bool SpamCheck = false;
58
59 public static bool HasClients;
60
61 private static Thread _serverThread;
62
63 public static MessageBuffer fullBuffer = new MessageBuffer();
64
65 private static int _currentRequestId;
66
67 private static UdpClient BroadcastClient = null;
68
69 private static Thread broadcastThread = null;
70
71 public static event Action OnDisconnect;
72
73 private static void UpdateServerInMainThread()
74 {
75 for (int i = 0; i < 256; i++)
76 {
77 if (NetMessage.buffer[i].checkBytes)
78 {
80 }
81 }
82 }
83
84 private static string GetLocalIPAddress()
85 {
86 string result = "";
87 IPAddress[] addressList = Dns.GetHostEntry(Dns.GetHostName()).AddressList;
88 foreach (IPAddress iPAddress in addressList)
89 {
90 if (AcceptedFamilyType(iPAddress.AddressFamily))
91 {
92 result = iPAddress.ToString();
93 break;
94 }
95 }
96 return result;
97 }
98
99 private static void ResetNetDiag()
100 {
102 }
103
104 public static void ResetSections()
105 {
106 for (int i = 0; i < 256; i++)
107 {
108 for (int j = 0; j < Main.maxSectionsX; j++)
109 {
110 for (int k = 0; k < Main.maxSectionsY; k++)
111 {
112 Clients[i].TileSections[j, k] = false;
113 }
114 }
115 }
116 }
117
118 public static void AddBan(int plr)
119 {
120 RemoteAddress remoteAddress = Clients[plr].Socket.GetRemoteAddress();
121 using StreamWriter streamWriter = new StreamWriter(BanFilePath, append: true);
122 streamWriter.WriteLine("//" + Main.player[plr].name);
123 streamWriter.WriteLine(remoteAddress.GetIdentifier());
124 }
125
126 public static bool IsBanned(RemoteAddress address)
127 {
128 try
129 {
130 string identifier = address.GetIdentifier();
132 {
133 using StreamReader streamReader = new StreamReader(BanFilePath);
134 string text;
135 while ((text = streamReader.ReadLine()) != null)
136 {
137 if (text == identifier)
138 {
139 return true;
140 }
141 }
142 }
143 }
144 catch (Exception)
145 {
146 }
147 return false;
148 }
149
150 private static void OpenPort(int port)
151 {
152 }
153
154 private static void ClosePort(int port)
155 {
156 }
157
158 private static void ServerFullWriteCallBack(object state)
159 {
160 }
161
162 private static void OnConnectionAccepted(ISocket client)
163 {
164 int num = FindNextOpenClientSlot();
165 if (num != -1)
166 {
167 Clients[num].Reset();
168 Clients[num].Socket = client;
169 }
170 else
171 {
172 lock (fullBuffer)
173 {
174 KickClient(client, NetworkText.FromKey("CLI.ServerIsFull"));
175 }
176 }
177 if (FindNextOpenClientSlot() == -1)
178 {
180 IsListening = false;
181 }
182 }
183
184 private static void KickClient(ISocket client, NetworkText kickMessage)
185 {
187 if (writer == null)
188 {
189 fullBuffer.ResetWriter();
190 writer = fullBuffer.writer;
191 }
192 writer.BaseStream.Position = 0L;
193 long position = writer.BaseStream.Position;
194 writer.BaseStream.Position += 2L;
195 writer.Write((byte)2);
196 kickMessage.Serialize(writer);
197 if (Main.dedServ)
198 {
199 Console.WriteLine(Language.GetTextValue("CLI.ClientWasBooted", client.GetRemoteAddress().ToString(), kickMessage));
200 }
201 int num = (int)writer.BaseStream.Position;
202 writer.BaseStream.Position = position;
203 writer.Write((short)num);
204 writer.BaseStream.Position = num;
205 client.AsyncSend(fullBuffer.writeBuffer, 0, num, ServerFullWriteCallBack, client);
206 }
207
208 public static void OnConnectedToSocialServer(ISocket client)
209 {
210 StartSocialClient(client);
211 }
212
213 private static bool StartListening()
214 {
215 if (SocialAPI.Network != null)
216 {
217 SocialAPI.Network.StartListening(OnConnectionAccepted);
218 }
219 return TcpListener.StartListening(OnConnectionAccepted);
220 }
221
222 private static void StopListening()
223 {
224 if (SocialAPI.Network != null)
225 {
226 SocialAPI.Network.StopListening();
227 }
228 TcpListener.StopListening();
229 }
230
231 public static void StartServer()
232 {
235 {
236 IsBackground = true,
237 Name = "Server Loop Thread"
238 };
239 _serverThread.Start();
240 }
241
242 private static void InitializeServer()
243 {
244 Connection.ResetSpecialFlags();
245 ResetNetDiag();
246 if (Main.rand == null)
247 {
248 Main.rand = new UnifiedRandom((int)DateTime.Now.Ticks);
249 }
250 Main.myPlayer = 255;
252 Main.menuMode = 14;
253 Main.statusText = Lang.menu[8].Value;
254 Main.netMode = 2;
255 Disconnect = false;
256 for (int i = 0; i < 256; i++)
257 {
258 Clients[i] = new RemoteClient();
259 Clients[i].Reset();
260 Clients[i].Id = i;
261 Clients[i].ReadBuffer = new byte[1024];
262 }
263 TcpListener = new TcpSocket();
264 if (!Disconnect)
265 {
266 if (!StartListening())
267 {
268 Main.statusText = Language.GetTextValue("Error.TriedToRunServerTwice");
269 SaveOnServerExit = false;
270 Disconnect = true;
271 }
272 Main.statusText = Language.GetTextValue("CLI.ServerStarted");
273 }
274 if (!UseUPNP)
275 {
276 return;
277 }
278 try
279 {
281 }
282 catch (Exception)
283 {
284 }
285 }
286
287 private static void ServerLoop()
288 {
289 int num = 0;
291 while (!Disconnect)
292 {
295 num = (num + 1) % 10;
296 Thread.Sleep((num == 0) ? 1 : 0);
297 }
299 }
300
301 private static void UpdateConnectedClients()
302 {
303 int num = 0;
304 for (int i = 0; i < 256; i++)
305 {
306 if (Clients[i].PendingTermination)
307 {
308 if (Clients[i].PendingTerminationApproved)
309 {
310 Clients[i].Reset();
312 }
313 continue;
314 }
315 if (Clients[i].IsConnected())
316 {
317 Clients[i].Update();
318 num++;
319 continue;
320 }
321 if (Clients[i].IsActive)
322 {
323 Clients[i].PendingTermination = true;
324 Clients[i].PendingTerminationApproved = true;
325 continue;
326 }
327 Clients[i].StatusText2 = "";
328 if (i < 255)
329 {
330 bool active = Main.player[i].active;
331 Main.player[i].active = false;
332 if (active)
333 {
335 }
336 }
337 }
338 HasClients = num != 0;
339 }
340
341 private static void StartListeningIfNeeded()
342 {
343 if (IsListening || !Clients.Any((RemoteClient client) => !client.IsConnected()))
344 {
345 return;
346 }
347 try
348 {
350 IsListening = true;
351 }
352 catch
353 {
354 if (!Main.ignoreErrors)
355 {
356 throw;
357 }
358 }
359 }
360
361 private static void UpdateClientInMainThread()
362 {
363 if (Main.netMode == 1 && Connection.Socket.IsConnected() && !Connection.ServerWantsToRunCheckBytesInClientLoopThread && NetMessage.buffer[256].checkBytes)
364 {
366 }
367 }
368
369 public static void AddCurrentServerToRecentList()
370 {
371 if (Connection.Socket.GetRemoteAddress().Type != 0)
372 {
373 return;
374 }
375 for (int i = 0; i < Main.maxMP; i++)
376 {
377 if (Main.recentIP[i].ToLower() == ServerIPText.ToLower() && Main.recentPort[i] == ListenPort)
378 {
379 for (int j = i; j < Main.maxMP - 1; j++)
380 {
381 Main.recentIP[j] = Main.recentIP[j + 1];
382 Main.recentPort[j] = Main.recentPort[j + 1];
383 Main.recentWorld[j] = Main.recentWorld[j + 1];
384 }
385 }
386 }
387 for (int num = Main.maxMP - 1; num > 0; num--)
388 {
389 Main.recentIP[num] = Main.recentIP[num - 1];
390 Main.recentPort[num] = Main.recentPort[num - 1];
391 Main.recentWorld[num] = Main.recentWorld[num - 1];
392 }
397 }
398
399 public static void SocialClientLoop(object threadContext)
400 {
401 ISocket socket = (ISocket)threadContext;
403 Connection.Socket = socket;
405 }
406
407 public static void TcpClientLoop()
408 {
410 Main.menuMode = 14;
411 bool flag = true;
412 while (flag)
413 {
414 flag = false;
415 try
416 {
417 Connection.Socket.Connect(new TcpAddress(ServerIP, ListenPort));
418 flag = false;
419 }
420 catch
421 {
422 if (Platform.IsOSX)
423 {
424 Thread.Sleep(200);
425 Connection.Socket.Close();
426 Connection.Socket = new TcpSocket();
427 }
428 if (!Disconnect && Main.gameMenu)
429 {
430 flag = true;
431 }
432 }
433 }
435 }
436
437 private static void ClientLoopSetup(RemoteAddress address)
438 {
439 Connection.ResetSpecialFlags();
440 ResetNetDiag();
441 Main.ServerSideCharacter = false;
442 if (Main.rand == null)
443 {
444 Main.rand = new UnifiedRandom((int)DateTime.Now.Ticks);
445 }
446 Main.player[Main.myPlayer].hostile = false;
447 Main.clientPlayer = Main.player[Main.myPlayer].clientClone();
448 for (int i = 0; i < 255; i++)
449 {
450 if (i != Main.myPlayer)
451 {
452 Main.player[i] = new Player();
453 }
454 }
455 Main.netMode = 1;
456 Main.menuMode = 14;
457 if (!Main.autoPass)
458 {
459 Main.statusText = Language.GetTextValue("Net.ConnectingTo", address.GetFriendlyName());
460 }
461 Disconnect = false;
462 Connection = new RemoteServer();
463 Connection.ReadBuffer = new byte[1024];
464 }
465
466 private static void InnerClientLoop()
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 {
479 }
480 Connection.IsActive = true;
481 if (Connection.State == 0)
482 {
483 Main.statusText = Language.GetTextValue("Net.FoundServer");
484 Connection.State = 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;
509 Main.cloudAlpha = Main.maxRaining;
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;
571 MapHelper.noStatusText = true;
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 = "";
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 {
610 }
611 }
612
613 private static int FindNextOpenClientSlot()
614 {
615 for (int i = 0; i < Main.maxNetPlayers; i++)
616 {
617 if (!Clients[i].IsConnected())
618 {
619 return i;
620 }
621 }
622 return -1;
623 }
624
625 public static void StartSocialClient(ISocket socket)
626 {
627 Thread thread = new Thread(SocialClientLoop);
628 thread.Name = "Social Client Thread";
629 thread.IsBackground = true;
630 thread.Start(socket);
631 }
632
633 public static void StartTcpClient()
634 {
635 Thread thread = new Thread(TcpClientLoop);
636 thread.Name = "TCP Client Thread";
637 thread.IsBackground = true;
638 thread.Start();
639 }
640
641 public static bool SetRemoteIP(string remoteAddress)
642 {
643 return SetRemoteIPOld(remoteAddress);
644 }
645
646 public static bool SetRemoteIPOld(string remoteAddress)
647 {
648 try
649 {
650 if (IPAddress.TryParse(remoteAddress, out var address))
651 {
652 ServerIP = address;
653 ServerIPText = address.ToString();
654 return true;
655 }
656 IPAddress[] addressList = Dns.GetHostEntry(remoteAddress).AddressList;
657 for (int i = 0; i < addressList.Length; i++)
658 {
659 if (AcceptedFamilyType(addressList[i].AddressFamily))
660 {
661 ServerIP = addressList[i];
662 ServerIPText = remoteAddress;
663 return true;
664 }
665 }
666 }
667 catch (Exception)
668 {
669 }
670 return false;
671 }
672
673 public static void SetRemoteIPAsync(string remoteAddress, Action successCallBack)
674 {
675 try
676 {
677 if (IPAddress.TryParse(remoteAddress, out var address))
678 {
679 ServerIP = address;
680 ServerIPText = address.ToString();
681 successCallBack();
682 }
683 else
684 {
687 {
688 RequestId = _currentRequestId,
689 SuccessCallback = successCallBack,
690 RemoteAddress = remoteAddress
691 });
692 }
693 }
694 catch (Exception)
695 {
696 }
697 }
698
700 {
702 }
703
704 private static bool AcceptedFamilyType(AddressFamily family)
705 {
706 if (family != AddressFamily.InterNetwork)
707 {
708 return false;
709 }
710 return true;
711 }
712
714 {
715 SetRemoteIPRequestInfo setRemoteIPRequestInfo = (SetRemoteIPRequestInfo)ar.AsyncState;
716 if (setRemoteIPRequestInfo.RequestId != _currentRequestId)
717 {
718 return;
719 }
720 try
721 {
722 bool flag = false;
724 for (int i = 0; i < array.Length; i++)
725 {
727 {
728 ServerIP = array[i];
729 ServerIPText = setRemoteIPRequestInfo.RemoteAddress;
730 flag = true;
731 break;
732 }
733 }
734 if (flag)
735 {
736 setRemoteIPRequestInfo.SuccessCallback();
737 }
738 }
739 catch (Exception)
740 {
741 }
742 }
743
744 public static void Initialize()
745 {
746 if (Main.dedServ)
747 {
748 for (int i = 0; i < 257; i++)
749 {
750 if (i < 256)
751 {
752 Clients[i] = new RemoteClient();
753 }
755 NetMessage.buffer[i].whoAmI = i;
756 }
757 }
758 NetMessage.buffer[256] = new MessageBuffer();
759 NetMessage.buffer[256].whoAmI = 256;
760 }
761
762 public static void UpdateInMainThread()
763 {
764 if (Main.dedServ)
765 {
767 }
768 else
769 {
771 }
772 }
773
774 public static int GetSectionX(int x)
775 {
776 return x / 200;
777 }
778
779 public static int GetSectionY(int y)
780 {
781 return y / 150;
782 }
783
784 private static void BroadcastThread()
785 {
787 new IPEndPoint(IPAddress.Any, 0);
788 BroadcastClient.EnableBroadcast = true;
789 new DateTime(0L);
790 long num = 0L;
791 byte[] array;
792 using (MemoryStream memoryStream = new MemoryStream())
793 {
794 using BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
795 int value = 1010;
796 binaryWriter.Write(value);
797 binaryWriter.Write(ListenPort);
798 binaryWriter.Write(Main.worldName);
799 string text = Dns.GetHostName();
800 if (text == "localhost")
801 {
803 }
804 binaryWriter.Write(text);
805 binaryWriter.Write((ushort)Main.maxTilesX);
806 binaryWriter.Write(Main.ActiveWorldFileData.HasCrimson);
807 binaryWriter.Write(Main.ActiveWorldFileData.GameMode);
808 binaryWriter.Write((byte)Main.maxNetPlayers);
809 num = memoryStream.Position;
810 binaryWriter.Write((byte)0);
811 binaryWriter.Write(Main.ActiveWorldFileData.IsHardMode);
812 binaryWriter.Flush();
813 array = memoryStream.ToArray();
814 }
815 while (true)
816 {
817 int num2 = 0;
818 for (int i = 0; i < 255; i++)
819 {
820 if (Main.player[i].active)
821 {
822 num2++;
823 }
824 }
825 array[(int)num] = (byte)num2;
826 try
827 {
828 BroadcastClient.Send(array, array.Length, new IPEndPoint(IPAddress.Broadcast, 8888));
829 }
830 catch
831 {
832 }
833 Thread.Sleep(1000);
834 }
835 }
836
837 public static void StartBroadCasting()
838 {
839 if (broadcastThread != null)
840 {
842 }
844 broadcastThread.Start();
845 }
846
847 public static void StopBroadCasting()
848 {
849 if (broadcastThread != null)
850 {
851 broadcastThread.Abort();
852 broadcastThread = null;
853 }
854 if (BroadcastClient != null)
855 {
856 BroadcastClient.Close();
857 BroadcastClient = null;
858 }
859 }
860}
static bool IsOSX
Definition Platform.cs:21
static void WriteLine()
Definition Console.cs:733
static string MachineName
static bool Exists([NotNullWhen(true)] string? path)
Definition File.cs:97
override long Position
virtual byte[] ToArray()
override void WriteLine(string? value)
static string GetHostName()
Definition Dns.cs:16
static IAsyncResult BeginGetHostAddresses(string hostNameOrAddress, AsyncCallback? requestCallback, object? state)
Definition Dns.cs:220
static IPAddress[] EndGetHostAddresses(IAsyncResult asyncResult)
Definition Dns.cs:225
static IPHostEntry GetHostEntry(IPAddress address)
Definition Dns.cs:36
static readonly IPAddress Broadcast
Definition IPAddress.cs:23
override string ToString()
Definition IPAddress.cs:390
static bool TryParse([NotNullWhen(true)] string? ipString, [NotNullWhen(true)] out IPAddress? address)
Definition IPAddress.cs:303
static readonly IPAddress Any
Definition IPAddress.cs:19
AddressFamily AddressFamily
Definition IPAddress.cs:88
static void Sleep(int millisecondsTimeout)
Definition Thread.cs:658
void Start(object? parameter)
Definition Thread.cs:574
static void StopTrackedSounds()
static void resetClouds()
Definition Cloud.cs:36
static LocalizedText[] gen
Definition Lang.cs:22
static LocalizedText[] menu
Definition Lang.cs:19
static string GetTextValue(string key)
Definition Language.cs:15
void Serialize(BinaryWriter writer)
static NetworkText FromKey(string key, params object[] substitutions)
static int maxSectionsY
Definition Main.cs:1124
static int maxSectionsX
Definition Main.cs:1122
static float windSpeedTarget
Definition Main.cs:1362
static WorldFileData ActiveWorldFileData
Definition Main.cs:1946
static int loadMapLastX
Definition Main.cs:860
static bool autoPass
Definition Main.cs:2507
static int myPlayer
Definition Main.cs:1801
static int netMode
Definition Main.cs:2095
static bool dedServ
Definition Main.cs:1226
static bool loadMapLock
Definition Main.cs:862
static string worldName
Definition Main.cs:1260
static int maxMP
Definition Main.cs:792
static int[] recentPort
Definition Main.cs:798
static void SaveRecent()
Definition Main.cs:3779
static int maxTilesX
Definition Main.cs:1114
static void ToggleGameplayUpdates(bool state)
Definition Main.cs:2959
static WorldMap Map
Definition Main.cs:1673
static PlayerFileData ActivePlayerFileData
Definition Main.cs:1940
static string[] recentIP
Definition Main.cs:796
static bool ignoreErrors
Definition Main.cs:742
static UnifiedRandom rand
Definition Main.cs:1387
static int maxNetPlayers
Definition Main.cs:1136
static float maxRaining
Definition Main.cs:1304
static bool mapEnabled
Definition Main.cs:906
static float cloudBGActive
Definition Main.cs:628
static int menuMode
Definition Main.cs:2379
static bool gameMenu
Definition Main.cs:1926
static string[] recentWorld
Definition Main.cs:794
static INetDiagnosticsUI ActiveNetDiagnosticsUI
Definition Main.cs:2789
static Player[] player
Definition Main.cs:1803
static string statusText
Definition Main.cs:1258
static void SwitchNetMode(int mode)
Definition Main.cs:63222
static void SendData(int msgType, int remoteClient=-1, int ignoreClient=-1, NetworkText text=null, int number=0, float number2=0f, float number3=0f, float number4=0f, int number5=0, int number6=0, int number7=0)
Definition NetMessage.cs:88
static void CheckBytes(int bufferIndex=256)
static MessageBuffer[] buffer
Definition NetMessage.cs:61
static void SyncDisconnectedPlayer(int plr)
static void InnerClientLoop()
Definition Netplay.cs:466
const int MaxConnections
Definition Netplay.cs:29
static void ResetSections()
Definition Netplay.cs:104
static void SocialClientLoop(object threadContext)
Definition Netplay.cs:399
static string GetLocalIPAddress()
Definition Netplay.cs:84
static void SetRemoteIPAsync(string remoteAddress, Action successCallBack)
Definition Netplay.cs:673
static bool Disconnect
Definition Netplay.cs:55
static bool SetRemoteIPOld(string remoteAddress)
Definition Netplay.cs:646
static void ClientLoopSetup(RemoteAddress address)
Definition Netplay.cs:437
static void Initialize()
Definition Netplay.cs:744
static IPAddress ServerIP
Definition Netplay.cs:41
static void TcpClientLoop()
Definition Netplay.cs:407
static Thread _serverThread
Definition Netplay.cs:61
static bool UseUPNP
Definition Netplay.cs:51
static Thread broadcastThread
Definition Netplay.cs:69
static MessageBuffer fullBuffer
Definition Netplay.cs:63
static ISocket TcpListener
Definition Netplay.cs:45
static void ResetNetDiag()
Definition Netplay.cs:99
static void ServerFullWriteCallBack(object state)
Definition Netplay.cs:158
static bool HasClients
Definition Netplay.cs:59
static void KickClient(ISocket client, NetworkText kickMessage)
Definition Netplay.cs:184
static bool IsBanned(RemoteAddress address)
Definition Netplay.cs:126
static int _currentRequestId
Definition Netplay.cs:65
static void OnConnectedToSocialServer(ISocket client)
Definition Netplay.cs:208
static void UpdateConnectedClients()
Definition Netplay.cs:301
static void StopListening()
Definition Netplay.cs:222
static void OnConnectionAccepted(ISocket client)
Definition Netplay.cs:162
static bool AcceptedFamilyType(AddressFamily family)
Definition Netplay.cs:704
static RemoteClient[] Clients
Definition Netplay.cs:37
static int FindNextOpenClientSlot()
Definition Netplay.cs:613
static void InvalidateAllOngoingIPSetAttempts()
Definition Netplay.cs:699
static Action OnDisconnect
Definition Netplay.cs:71
static void BroadcastThread()
Definition Netplay.cs:784
static bool SpamCheck
Definition Netplay.cs:57
static int GetSectionX(int x)
Definition Netplay.cs:774
static void InitializeServer()
Definition Netplay.cs:242
static string ServerIPText
Definition Netplay.cs:43
static void StartSocialClient(ISocket socket)
Definition Netplay.cs:625
static void StartListeningIfNeeded()
Definition Netplay.cs:341
static void OpenPort(int port)
Definition Netplay.cs:150
static bool IsListening
Definition Netplay.cs:49
static void ClosePort(int port)
Definition Netplay.cs:154
static void StartTcpClient()
Definition Netplay.cs:633
const int NetBufferSize
Definition Netplay.cs:31
static void UpdateClientInMainThread()
Definition Netplay.cs:361
static int GetSectionY(int y)
Definition Netplay.cs:779
static string BanFilePath
Definition Netplay.cs:33
static string ServerPassword
Definition Netplay.cs:35
static void SetRemoteIPAsyncCallback(IAsyncResult ar)
Definition Netplay.cs:713
static bool StartListening()
Definition Netplay.cs:213
static int ListenPort
Definition Netplay.cs:47
static void AddBan(int plr)
Definition Netplay.cs:118
static void StopBroadCasting()
Definition Netplay.cs:847
static void StartServer()
Definition Netplay.cs:231
static void UpdateInMainThread()
Definition Netplay.cs:762
static bool SaveOnServerExit
Definition Netplay.cs:53
static RemoteServer Connection
Definition Netplay.cs:39
static void UpdateServerInMainThread()
Definition Netplay.cs:73
static void ServerLoop()
Definition Netplay.cs:287
static UdpClient BroadcastClient
Definition Netplay.cs:67
static void StartBroadCasting()
Definition Netplay.cs:837
static bool SetRemoteIP(string remoteAddress)
Definition Netplay.cs:641
static void AddCurrentServerToRecentList()
Definition Netplay.cs:369
static void PlayerDisconnect(int playerIndex)
Definition Player.cs:308
static void ClearPlayerTempInfo()
Definition Player.cs:51485
static void SavePlayer(PlayerFileData playerFile, bool skipMapSave=false)
Definition Player.cs:51176
static Terraria.Social.Base.NetSocialModule Network
Definition SocialAPI.cs:20
static void clearWorld()
Definition WorldGen.cs:3373
static bool worldCleared
Definition WorldGen.cs:986
void AsyncSend(byte[] data, int offset, int size, SocketSendCallback callback, object state=null)
RemoteAddress GetRemoteAddress()
static DateTime Now
Definition DateTime.cs:103