public async Task <bool> ConnectToServer(CancellationToken cancellationToken) { if (isConnected) { return(true); } // Start looking for server state = ClientState.LookingForServer; var task = FindServerBroadcast(cancellationToken); ReceivedBroadcastData broadcastData = await task; // Connect to the found server if (task.Status == TaskStatus.RanToCompletion) { connection = await host.ConnectWithConfirmation(broadcastData.senderAddress, broadcastData.broadcastMessagePort); if (connection != null) { connection.OnDisconnectEvent.RegisterListenerOnce(HandleDisconnect); connection.OnDataEvent.RegisterListenerOnce(HandleDataReceived); state = ClientState.Connected; HandleConnect(); return(true); } else { state = ClientState.NotConnected; return(false); } } else { state = ClientState.NotConnected; return(false); } }