public async Task RelayEndtoEndFakeIP()
        {
            SteamNetworkingUtils.InitRelayNetworkAccess();
            SteamNetworkingUtils.DebugLevel     = NetDebugOutput.Warning;
            SteamNetworkingUtils.OnDebugOutput += DebugOutput;

            // For some reason giving steam a couple of seconds here
            // seems to prevent it returning null connections from ConnectNormal
            await Task.Delay(2000);

            Console.WriteLine($"----- Creating Socket Relay Socket..");
            var socket = SteamNetworkingSockets.CreateRelaySocketFakeIP <TestSocketInterface>();
            var server = socket.RunAsync();

            await Task.Delay(1000);

            Console.WriteLine($"----- Retrieving Fake IP..");
            SteamNetworkingSockets.GetFakeIP(0, out NetAddress address);

            Console.WriteLine($"----- Connecting To Socket via Fake IP ({address})");
            var connection = SteamNetworkingSockets.ConnectNormal <TestConnectionInterface>(address);
            var client     = connection.RunAsync();

            await Task.WhenAll(server, client);
        }
        public async Task CreateRelayServerFakeIP()
        {
            SteamNetworkingUtils.DebugLevel     = NetDebugOutput.Everything;
            SteamNetworkingUtils.OnDebugOutput += DebugOutput;

            var si = SteamNetworkingSockets.CreateRelaySocketFakeIP <TestSocketInterface>();

            Console.WriteLine($"Created Socket: {si}");

            // Give it a second for something to happen
            await Task.Delay(1000);

            si.Close();
        }