Ejemplo n.º 1
0
        public void DequeueTimeoutTest()
        {
            int         timeout = 5000;
            QueueConfig config  = new QueueConfig()
            {
                QueueDirectory             = @"d:\workspace\data\test-queue",
                DataConverter              = new ObjectConverter(),
                QueueName                  = "test04",
                DequeueTimeoutMilliseconds = timeout
            };

            IFileQueue <string> fq = FileQueue <string> .Create(config);

            DateTime s = DateTime.Now;

            try
            {
                fq.Dequeue();
                Assert.Fail();
            }
            catch (DequeueTimeoutException e)
            {
                if (DateTime.Now - s < TimeSpan.FromMilliseconds(timeout))
                {
                    Assert.Fail();
                }
                else
                {
                    Assert.IsFalse(e.IsBroken);
                }
            }
        }
Ejemplo n.º 2
0
        public void SimpleTest()
        {
            QueueConfig config = new QueueConfig()
            {
                QueueDirectory = @"d:\workspace\data\test-queue",
                DataConverter  = new ObjectConverter(),
                QueueName      = "test01"
            };

            TestObject t1 = new TestObject()
            {
                Str = "t1-str",
                Num = 123,
                Flo = 1.3234f,
                To  = new TestObject()
                {
                    Str = "t2-str",
                    Num = 35654,
                    Flo = 4935.2394f,
                }
            };

            IFileQueue <TestObject> fq = FileQueue <TestObject> .Create(config);

            fq.Enqueue(t1);

            TestObject t2 = fq.Dequeue();

            Assert.AreEqual(t1.Str, t2.Str);
            Assert.AreEqual(t1.Num, t2.Num);
            Assert.AreEqual(t1.Flo, t2.Flo);
            Assert.AreEqual(t1.To.Str, t2.To.Str);
            Assert.AreEqual(t1.To.Num, t2.To.Num);
            Assert.AreEqual(t1.To.Flo, t2.To.Flo);
        }
Ejemplo n.º 3
0
 public MessageBus Start()
 {
     if (webSocket == null)
     {
         throw new NullReferenceException();
     }
     if (fileQueue == null)
     {
         fileQueue = new FileQueue();
     }
     if (messageFormatter == null)
     {
         messageFormatter = new BinaryMessageFormatter();
     }
     return(new MessageBus(webSocket, fileQueue, messageFormatter));
 }
Ejemplo n.º 4
0
        //private readonly IDictionary<string, List<IWebSocket>> clientsByMetadata;
        //private readonly IDictionary<string, MessageQueue> messageQueuesByMetadata;

        public MessageBus(IWebSocket webSocket, IFileQueue fileQueue, IMessageFormatter formatter)
        {
            if (webSocket == null)
            {
                throw new ArgumentNullException("webSocket");
            }
            if (fileQueue == null)
            {
                throw new ArgumentNullException("fileQueue");
            }
            if (formatter == null)
            {
                throw new ArgumentNullException("formatter");
            }
            this.webSocket = webSocket;
            this.formatter = formatter;
            messageQueue   = new MessageQueue(fileQueue);
        }
Ejemplo n.º 5
0
        public FileWatcher(string inputFolder, IFileQueue queue)
        {
            var namesFilter  = NotifyFilters.FileName;
            var notifyFilter = namesFilter | NotifyFilters.Size | NotifyFilters.Attributes | NotifyFilters.LastWrite |
                               NotifyFilters.CreationTime | NotifyFilters.Security;

            _watcher = new FileSystemWatcher(inputFolder)
            {
                NotifyFilter = notifyFilter
            };
            _queue          = queue;
            _syncObject     = new object();
            _filesInTheWork = new ConcurrentDictionary <string, DateTime>();

            _watcher.Changed += CreatedAndChangedHandler;
            _watcher.Created += CreatedAndChangedHandler;
            _watcher.Deleted += DeletedHandler;
            _watcher.Renamed += RenamedHandler;
        }
Ejemplo n.º 6
0
        public void DequeueTimeoutExceptionBrokenTest()
        {
            QueueConfig config = new QueueConfig()
            {
                QueueDirectory             = @"d:\workspace\data\test-queue",
                DataConverter              = new Utf8Converter(),
                QueueName                  = "test06",
                DequeueTimeoutMilliseconds = 5000
            };

            IFileQueue <string> fq = FileQueue <string> .Create(config);

            StringBuilder data = new StringBuilder();

            for (int j = 0; j < 1000; ++j)
            {
                data.Append(Guid.NewGuid().ToString());
            }

            fq.Enqueue(data.ToString());

            try
            {
                string result = fq.Dequeue();
                Assert.Fail();
            }
            catch (DequeueTimeoutException e)
            {
                byte[] remain = fq.DequeueRawData();

                byte[] whole = new byte[e.QueueData.Length + remain.Length];
                using (MemoryStream wholeStream = new MemoryStream(whole))
                {
                    wholeStream.Write(e.QueueData, 0, e.QueueData.Length);
                    wholeStream.Write(remain, 0, remain.Length);
                }

                string result = fq.DeserializeQueueData(whole);

                Assert.AreEqual(data.ToString(), result);
            }
        }
Ejemplo n.º 7
0
        public void RawDataTest()
        {
            QueueConfig config = new QueueConfig()
            {
                QueueDirectory             = @"d:\workspace\data\test-queue",
                DataConverter              = new Utf8Converter(),
                QueueName                  = "test05",
                DequeueTimeoutMilliseconds = 5000
            };
            IFileQueue <string> fq = FileQueue <string> .Create(config);

            StringBuilder data = new StringBuilder();

            for (int j = 0; j < 20; ++j)
            {
                data.Append(Guid.NewGuid().ToString());
            }

            fq.Enqueue(data.ToString());
            byte[] raw    = fq.DequeueRawData();
            string result = fq.DeserializeQueueData(raw);

            Assert.AreEqual(data.ToString(), result);
        }
Ejemplo n.º 8
0
 public WriteTimeWatcherTask(IWriteTimeWatcherRepository repository, IFileSystem fileSystem, IFileQueue queue, ILogger <WriteTimeWatcherTask <T> > logger) : base(queue, logger)
 {
     _repository = repository;
     _fileSystem = fileSystem;
     _logger     = logger;
 }
Ejemplo n.º 9
0
 public MessageQueue(IFileQueue fileQueue)
 {
     this.fileQueue = fileQueue;
 }
Ejemplo n.º 10
0
 public WatcherBase(IFileQueue queue, ILogger logger)
 {
     _tokenSource = new CancellationTokenSource();
     _queue       = queue;
     _logger      = logger;
 }
Ejemplo n.º 11
0
        public void MultiThreadTest()
        {
            QueueConfig config = new QueueConfig()
            {
                QueueDirectory = @"d:\workspace\data\test-queue",
                DataConverter  = new Utf8Converter(),
                QueueName      = "test02",
                ReadBufferSize = 1024 * 1024
            };

            IFileQueue <string> fq = FileQueue <string> .Create(config);

            HashSet <string> writeData = new HashSet <string>();
            int successCount           = 0;
            int failCount = 0;

            Thread[] ta = new Thread[400];

            for (int i = 0; i < ta.Length; ++i)
            {
                if (i % 2 == 0)
                {
                    ta[i] = new Thread(() =>
                    {
                        StringBuilder data = new StringBuilder();
                        for (int j = 0; j < 20; ++j)
                        {
                            data.Append(Guid.NewGuid().ToString());
                        }

                        lock (writeData)
                        {
                            writeData.Add(data.ToString());
                        }

                        fq.Enqueue(data.ToString());
                    });
                }
                else if (i % 2 == 1)
                {
                    ta[i] = new Thread(() =>
                    {
                        while (true)
                        {
                            string data = fq.Dequeue();
                            if (data != null)
                            {
                                lock (writeData)
                                {
                                    if (writeData.Contains(data))
                                    {
                                        writeData.Remove(data);
                                        Interlocked.Increment(ref successCount);
                                    }
                                    else
                                    {
                                        Interlocked.Increment(ref failCount);
                                    }
                                }

                                break;
                            }
                        }
                    });
                }
            }

            for (int i = 0; i < ta.Length; ++i)
            {
                ta[i].Start();
            }

            while (true)
            {
                if (successCount + failCount == ta.Length / 2)
                {
                    break;
                }

                Thread.Sleep(1000);
            }

            Assert.AreEqual(successCount, ta.Length / 2);
        }
Ejemplo n.º 12
0
        public void MoveFileTest()
        {
            QueueConfig config = new QueueConfig()
            {
                QueueDirectory = @"d:\workspace\data\test-queue",
                DataConverter  = new Utf8Converter(),
                MaxQueueSize   = 1024 * 500,
                QueueName      = "test03",
                ReadBufferSize = 1024 * 1024 * 3
            };

            IFileQueue <string> fq = FileQueue <string> .Create(config);

            HashSet <string> writeData = new HashSet <string>();
            int successCount           = 0;
            int failCount = 0;
            int dataCount = 20000;

            Thread t1 = new Thread(() =>
            {
                for (int i = 0; i < dataCount; ++i)
                {
                    StringBuilder data = new StringBuilder();
                    for (int j = 0; j < 20; ++j)
                    {
                        data.Append(Guid.NewGuid().ToString());
                    }

                    lock (writeData)
                    {
                        writeData.Add(data.ToString());
                    }

                    fq.Enqueue(data.ToString());
                }
            });

            Thread t2 = new Thread(() =>
            {
                for (int i = 0; i < dataCount; ++i)
                {
                    while (true)
                    {
                        string data = fq.Dequeue();
                        if (data != null)
                        {
                            lock (writeData)
                            {
                                if (writeData.Contains(data))
                                {
                                    writeData.Remove(data);
                                    Interlocked.Increment(ref successCount);
                                }
                                else
                                {
                                    Interlocked.Increment(ref failCount);
                                }
                            }

                            break;
                        }
                    }
                }
            });

            t1.Start();
            t2.Start();

            while (true)
            {
                if (successCount + failCount == dataCount)
                {
                    break;
                }

                Thread.Sleep(1000);
            }

            Assert.AreEqual(successCount, dataCount);
        }
Ejemplo n.º 13
0
 public MessageBusBuilder PersistingIn(IFileQueue fileQueue)
 {
     this.fileQueue = fileQueue;
     return(this);
 }