Exemple #1
0
        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);
        }
Exemple #2
0
        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);
            }
        }