コード例 #1
0
        public Task StartAsync(CancellationToken cancellationToken)
        {
            _poll = _folderSource.CreateFileWatcher(_fileWatcherType, OnFileWatcher, nextItem: null, pollIntervalInSeconds: _pollIntervalInSeconds > 0 ? _pollIntervalInSeconds : DefaultPollIntervalInSeconds);

            if (_poll == null)
            {
                var errorText = string.Format("Path '{0}' is invalid. IFolderItem.RootPath must be set to a valid directory location.", _folderSource.Path);
                _trace.Error(errorText);

                throw new InvalidOperationException(errorText);
            }

            // TODO: need to decide what to do when _poll is null i.e. trigger folder does not exist.
            return(Task.FromResult(0));
        }
コード例 #2
0
        private static async Task FileWatchTestsAsync(IFolderItem folder)
        {
            bool fileAddedTrigger   = false;
            bool fileUpdatedTrigger = false;

            var poll = folder.CreateFileWatcher(FileWatcherType.Created,
                                                (fr, obj) =>
            {
                Console.WriteLine("File {0} was added.", fr.Path);

                var uri = obj as Uri;
                if (uri != null)
                {
                    Console.WriteLine("Next Uri: {0}", uri.AbsolutePath);
                }
                fileAddedTrigger = true;
                return(Task.FromResult(0));
            }, null, 1);

            var poll2 = folder.CreateFileWatcher(FileWatcherType.Updated,
                                                 (fr, obj) =>
            {
                Console.WriteLine("File {0} was updated.", fr.Path);

                var uri = obj as Uri;
                if (uri != null)
                {
                    Console.WriteLine("Next Uri: {0}", uri.AbsolutePath);
                }
                fileUpdatedTrigger = true;
                return(Task.FromResult(0));
            }, null, 1);

            var newFile = folder.GetFileReference(Guid.NewGuid().ToString());
            await newFile.WriteAsync(new byte[0]);

            // Adding some wait to make sure triggers are fired.
            await Task.Delay(1000);

            await newFile.WriteAsync(new byte[1] {
                0
            });

            // Adding some wait to make sure triggers are fired.
            Console.WriteLine("Waiting for 20 seconds...");
            await Task.Delay(20000);

            if (!fileAddedTrigger)
            {
                Console.WriteLine("Error: New file was not triggered when a new file was added.");
            }

            if (!fileUpdatedTrigger)
            {
                Console.WriteLine("Error: Update file was not triggered when an existing file was updated.");
            }

            var trigger = await folder.CheckForFileAsync(FileWatcherType.Updated);

            await newFile.WriteAsync(new byte[1] {
                1
            });

            trigger = await folder.CheckForFileAsync(FileWatcherType.Updated, trigger.NextUri);

            if (trigger.FileItem != null)
            {
                Console.WriteLine("Updated file: {0}", trigger.FileItem.Path);
            }

            await newFile.DeleteAsync();
        }