private async Task <ReceivedBroadcastData> FindServerBroadcast(CancellationToken cancellationToken) { broadcastEventReceivedTaskCompletionSource = new TaskCompletionSource <ReceivedBroadcastData>(); cancellationToken.Register(() => { broadcastEventReceivedTaskCompletionSource.TrySetCanceled(); }); NetCore.Instance.StartScanningForBroadcast(); // Wait for server to be found ReceivedBroadcastData broadcastData = null; try { broadcastData = await broadcastEventReceivedTaskCompletionSource.Task; } finally { NetCore.Instance.StopScanningForBroadcast(); } return(broadcastData); }
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); } }