Ejemplo n.º 1
0
        private async Task ConnectAsyncInternal()
        {
            _tokenSource = new CancellationTokenSource();

            string selector = RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort);
            DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(selector);

            DeviceInformation device = (from d in devices where d.Name == _deviceName select d).FirstOrDefault();

            if (device == null)
            {
                ThrowException($"LEGO EV3 brick named '{_deviceName}' not found.");
            }

            RfcommDeviceService service = await RfcommDeviceService.FromIdAsync(device.Id);

            if (service == null)
            {
                ThrowException("Unable to connect to LEGO EV3 brick... Is the manifest set properly ?");
            }

            _socket = new StreamSocket();
            await _socket.ConnectAsync(
                service.ConnectionHostName,
                service.ConnectionServiceName,
                SocketProtectionLevel.BluetoothEncryptionAllowNullAuthentication);

            _reader = new DataReader(_socket.InputStream)
            {
                ByteOrder = ByteOrder.LittleEndian
            };

            await WindowThreadPool.RunAsync(async (_) => await PollInputAsync());
        }
Ejemplo n.º 2
0
        private async Task ConnectAsyncInternal(HostName hostName)
        {
            _tokenSource = new CancellationTokenSource();

            _socket = new StreamSocket();

            // connect to the brick on port 5555
            await _socket.ConnectAsync(hostName, "5555", SocketProtectionLevel.PlainSocket);

            // unlock the brick (doesn't actually need serial number?)
            await _socket.OutputStream.WriteAsync(Encoding.UTF8.GetBytes(UnlockCommand).AsBuffer());

            // read the "Accept:EV340\r\n\r\n" response
            IBuffer bufferResponse = new Buffer(128);
            await _socket.InputStream.ReadAsync(bufferResponse, bufferResponse.Capacity, InputStreamOptions.Partial);

            string response = Encoding.UTF8.GetString(bufferResponse.ToArray(), 0, (int)bufferResponse.Length);

            if (string.IsNullOrEmpty(response))
            {
                throw new Exception("LEGO EV3 brick did not respond to the unlock command.");
            }

            await ThreadPool.RunAsync(PollInput);
        }
Ejemplo n.º 3
0
        private static async Task MoveFolderIterate(List <Folder> list, int folderID, StorageFolder destination,
                                                    CancellationToken cancellationToken, IProgress <double> progress)
        {
            var rootFolder = list.Find(folder => folder.ID == folderID);

            foreach (var file in rootFolder.Files)
            {
                var properties = await file.GetBasicPropertiesAsync();

                var fileSize = properties.Size;
                await file.MoveAsync(destination);

                await ThreadPool.RunAsync(delegate
                {
                    _finishedSize += fileSize;
                    progress.Report(_finishedSize / (double)_totalSize * 100.0);
                });
            }
            var subFolders = list.FindAll(folder => folder.ParentFolderID == folderID);

            if (!subFolders.Any())
            {
                return;
            }
            foreach (var folder in subFolders)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    break;
                }
                var newFolder = await destination.CreateFolderAsync(folder.Name);
                await MoveFolderIterate(list, folder.ID, newFolder, cancellationToken, progress);
            }
        }
        public async Task ConnectAsync()
        {
            _tokenSource = new CancellationTokenSource();

            PeerFinder.AlternateIdentities["Bluetooth:Paired"] = "";
            IReadOnlyList <PeerInformation> peers = await PeerFinder.FindAllPeersAsync();

            PeerInformation peer = (from p in peers where p.DisplayName == _deviceName select p).FirstOrDefault();

            if (peer == null)
            {
                throw new Exception(_deviceName + " Brick not found");
            }

            _socket = new StreamSocket();
            await _socket.ConnectAsync(peer.HostName, "1");

            _reader           = new DataReader(_socket.InputStream);
            _reader.ByteOrder = ByteOrder.LittleEndian;


            //¿qué hacía esto en wp 8.0?
            //ThreadPool.QueueUserWorkItem(PollInput);
            await ThreadPool.RunAsync(PollInput);
        }
Ejemplo n.º 5
0
        private static async Task CopyFolderIterate(List <Folder> list, int folderID, StorageFolder destination,
                                                    CancellationToken cancellationToken, IProgress <double> progress)
        {
            var rootFolder = list.Find(folder => folder.ID == folderID);

            foreach (var file in rootFolder.Files)
            {
                var buffer     = new byte[MaxBufferSize];
                var readStream = await file.OpenStreamForReadAsync();

                var writeFile = await destination.CreateFileAsync(file.Name);

                var writeStream = await writeFile.OpenStreamForWriteAsync();

                while (true)
                {
                    int buffersize;
                    buffersize = (readStream.Length - readStream.Position) < MaxBufferSize
                        ? (int)(readStream.Length - readStream.Position)
                        : MaxBufferSize;
                    var readSize = readStream.Read(buffer, 0, buffersize);
                    if (readSize > 0)
                    {
                        writeStream.Write(buffer, 0, buffersize);
                        await ThreadPool.RunAsync(delegate
                        {
                            _finishedSize += (ulong)buffersize;
                            progress.Report(_finishedSize / (double)_totalSize * 100.0);
                        });
                    }
                    else
                    {
                        break;
                    }
                }
                readStream.Close();
                writeStream.Close();
            }
            var subFolders = list.FindAll(folder => folder.ParentFolderID == folderID);

            if (!subFolders.Any())
            {
                return;
            }
            foreach (var folder in subFolders)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    break;
                }
                var newFolder = await destination.CreateFolderAsync(folder.Name);
                await CopyFolderIterate(list, folder.ID, newFolder, cancellationToken, progress);
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        ///     Initializes a thread and starts pinging the specified server
        ///     Calculates the ping and delta of each ping in ms
        /// </summary>
        public void StartPing(int numberOfPings)
        {
            _isRunning = true;
            _totalTime = 0;

            IAsyncAction _pingAction = ThreadPool.RunAsync(async workItem => {
                var previousPingTime = 0;
                var delta            = 0;
                var pingIteration    = 1;
                while (pingIteration <= numberOfPings && _isRunning)
                {
                    var stopwatch = new Stopwatch();
                    var socket    = new StreamSocket();
                    stopwatch.Start();
                    try
                    {
                        await socket.ConnectAsync(new HostName(_url), "80");
                    } catch (Exception e)
                    {
                        OnThreadFinished(FinishType.ERROR);
                        OnThreadFinished(FinishType.FINISHED);
                        return;
                    }

                    stopwatch.Stop();

                    var ms = (int)stopwatch.ElapsedMilliseconds;

                    // First time there is no delta
                    if (pingIteration > 0)
                    {
                        delta            = Math.Abs(ms - previousPingTime);
                        previousPingTime = ms;
                    }

                    Interlocked.Add(ref _totalTime, ms + delta);

                    HorseProgressEventArgs horseProgressEventArgs = new HorseProgressEventArgs(_totalTime, pingIteration);
                    OnPingReceived(horseProgressEventArgs);

                    Thread.Sleep(1000);
                    pingIteration++;
                }

                if (!_isRunning)
                {
                    OnThreadFinished(FinishType.CANCELED);
                    return;
                }

                OnThreadFinished(FinishType.FINISHED);
            });
        }
Ejemplo n.º 7
0
        public async void Run(IBackgroundTaskInstance taskInstance)
        {
            _deferral              = taskInstance.GetDeferral();
            taskInstance.Canceled += OnTaskCanceled;

            _source   = new CancellationTokenSource();
            _listener = new DeviceListener(
                brick: new Brick(new CommunicationFactory(), new FileProvider()),
                notify: NotifyMethodAsync
                );

            await ThreadPool.RunAsync(async _ =>
            {
                await _listener.ConnectAsync(_source.Token);
                await _listener.InitializeAsync();
            });
        }