private async Task ListenForRemoteConnection() { bool listening = true; Console.WriteLine("STATUS: Listening for a connection"); while (listening) { Receiver = await NetworkService.AcceptConnectionAsync(Listener); if (Receiver != null) { Console.WriteLine($"RESULT: Connection request from {((IPEndPoint) Receiver.RemoteEndPoint).Address} accepted"); } else { Console.WriteLine("RESULT: Accept of connection failed"); Receiver = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); } if (Receiver != null && Receiver.Connected) { Console.WriteLine("STATUS: Waiting to receive request data"); NetworkData networkData = await NetworkService.ReceiveDataAsync(Receiver); if (networkData != null && networkData.DataType == NetworkDataType.Request) { Console.WriteLine($"RESULT: Received request data from {networkData.User.UserName}"); RemoteUser = networkData.User; listening = false; } else { Console.WriteLine("RESULT: Receive of request data failed"); Receiver.Shutdown(SocketShutdown.Both); } if (!Sender.Connected) { await ConnectToRemoteUser(RemoteUser.IpAddress, RemoteUser.PortNumber); State = ConnectionState.Responding; } else { State = ConnectionState.Waiting; } } else { Console.WriteLine("STATUS: Listening for connection canceled"); listening = false; } } }