summaryrefslogtreecommitdiff
path: root/Client/Assembly-CSharp/InnerNet/InnerDiscover.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Client/Assembly-CSharp/InnerNet/InnerDiscover.cs')
-rw-r--r--Client/Assembly-CSharp/InnerNet/InnerDiscover.cs114
1 files changed, 114 insertions, 0 deletions
diff --git a/Client/Assembly-CSharp/InnerNet/InnerDiscover.cs b/Client/Assembly-CSharp/InnerNet/InnerDiscover.cs
new file mode 100644
index 0000000..b596ef5
--- /dev/null
+++ b/Client/Assembly-CSharp/InnerNet/InnerDiscover.cs
@@ -0,0 +1,114 @@
+using System;
+using System.Collections;
+using System.Net.Sockets;
+using Hazel.Udp;
+using UnityEngine;
+
+namespace InnerNet
+{
+ public class InnerDiscover : DestroyableSingleton<InnerDiscover>
+ {
+ public event Action<BroadcastPacket> OnPacketGet;
+
+ private UdpBroadcastListener listener;
+
+ private UdpBroadcaster sender;
+
+ public int Port = 47777;
+
+ public float Interval = 1f;
+
+ public void StartAsServer(string data)
+ {
+ bool flag = this.sender == null;
+ if (flag)
+ {
+ this.sender = new UdpBroadcaster(this.Port);
+ }
+ this.sender.SetData(data);
+ if (flag)
+ {
+ base.StartCoroutine(this.RunServer());
+ }
+ }
+
+ private IEnumerator RunServer()
+ {
+ while (this.sender != null)
+ {
+ this.sender.Broadcast();
+ for (float timer = 0f; timer < this.Interval; timer += Time.deltaTime)
+ {
+ yield return null;
+ }
+ }
+ yield break;
+ }
+
+ public void StopServer()
+ {
+ if (this.sender != null)
+ {
+ this.sender.Dispose();
+ this.sender = null;
+ }
+ }
+
+ public void StartAsClient()
+ {
+ if (this.listener == null)
+ {
+ try
+ {
+ this.listener = new UdpBroadcastListener(this.Port);
+ this.listener.StartListen();
+ base.StartCoroutine(this.RunClient());
+ }
+ catch (SocketException)
+ {
+ AmongUsClient.Instance.LastDisconnectReason = DisconnectReasons.Custom;
+ AmongUsClient.Instance.LastCustomDisconnect = "Couldn't start local network listener. You may need to restart Among Us.";
+ DestroyableSingleton<DisconnectPopup>.Instance.Show();
+ }
+ }
+ }
+
+ private IEnumerator RunClient()
+ {
+ while (this.listener != null)
+ {
+ if (!this.listener.Running)
+ {
+ this.listener.StartListen();
+ }
+ BroadcastPacket[] packets = this.listener.GetPackets();
+ for (int i = 0; i < packets.Length; i++)
+ {
+ Action<BroadcastPacket> onPacketGet = this.OnPacketGet;
+ if (onPacketGet != null)
+ {
+ onPacketGet(packets[i]);
+ }
+ }
+ yield return null;
+ }
+ yield break;
+ }
+
+ public void StopClient()
+ {
+ if (this.listener != null)
+ {
+ this.listener.Dispose();
+ this.listener = null;
+ }
+ }
+
+ public override void OnDestroy()
+ {
+ this.StopServer();
+ this.StopClient();
+ base.OnDestroy();
+ }
+ }
+}