Exemple #1
0
        private void Write()
        {
            try
            {
                using (FileStream _fileCompressed = new FileStream(path: DestinationFile + ".gz", mode: FileMode.Append))
                {
                    while (!Cancelled)
                    {
                        ByteBlock _block = QueueWriter.Dequeue();
                        if (_block == null)
                        {
                            return;
                        }

                        BitConverter.GetBytes(value: _block.Buffer.Length).CopyTo(array: _block.Buffer, index: 4);
                        _fileCompressed.Write(array: _block.Buffer, offset: 0, count: _block.Buffer.Length);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(value: ex.Message);
                Cancelled = true;
            }
        }
Exemple #2
0
 private static void LastDataInsert(CancellationToken token, QueueWriter writer)
 {
     token.Register(() =>
     {
         writer.WriteToDbAsync(true).GetAwaiter().GetResult();
     });
 }
Exemple #3
0
        private void Compress(object i)
        {
            try
            {
                while (!Cancelled)
                {
                    ByteBlock _block = QueueReader.Dequeue();

                    if (_block == null)
                    {
                        return;
                    }

                    using (MemoryStream _memoryStream = new MemoryStream())
                    {
                        using (GZipStream cs = new GZipStream(_memoryStream, CompressionMode.Compress))
                        {
                            cs.Write(_block.Buffer, 0, _block.Buffer.Length);
                        }


                        byte[]    compressedData = _memoryStream.ToArray();
                        ByteBlock _out           = new ByteBlock(_block.ID, compressedData);
                        QueueWriter.EnqueueForWriting(_out);
                    }
                    WaitHandle doneEvent = DoneEvents[(int)i];
                    doneEvent.Dispose();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ошибка в номере потока {0}. \n описание ошибки: {1}", i, ex.Message);
                Cancelled = true;
            }
        }
        public async Task cache_many_requests()
        {
            using (var inputWriter = new QueueWriter(cacheInputFormatName))
                using (var rr = new RequestReply(cacheInputFormatName, replyFormatName, postman))
                {
                    var cachedMsg = new Message {
                        Label = "some.value.1", AppSpecific = 1
                    };
                    await inputWriter.DeliverAsync(cachedMsg, postman, QueueTransaction.None);

                    var cachedMsg2 = new Message {
                        Label = "some.value.2", AppSpecific = 2
                    };
                    await inputWriter.DeliverAsync(cachedMsg2, postman, QueueTransaction.None);

                    var sw = new Stopwatch();
                    for (int j = 0; j < 5; j++)
                    {
                        for (int i = 1; i <= 2; i++)
                        {
                            sw.Restart();
                            var request = new Message {
                                Label = "cache.some.value." + i
                            };
                            var reply = await rr.SendRequestAsync(request);

                            Console.WriteLine($"took {sw.Elapsed.TotalMilliseconds:N1}MS");
                            Assert.AreEqual("some.value." + i, reply.Label, "Label");
                            Assert.AreEqual(i, reply.AppSpecific, "AppSpecific");
                        }
                    }
                }
        }
Exemple #5
0
        public void Setup()
        {
            inputQueueFormatName   = Queues.TryCreate(inputQueuePath, QueueTransactional.None);
            adminQueueFormatName   = Queues.TryCreate(adminQueuePath, QueueTransactional.None);
            outputQueueFormatName1 = Queues.TryCreate(outputQueuePath1, QueueTransactional.None);
            outputQueueFormatName2 = Queues.TryCreate(outputQueuePath2, QueueTransactional.None);
            deadQueueFormatName    = $"{inputQueueFormatName };Poison";

            Queues.Purge(inputQueueFormatName);
            Queues.Purge(adminQueueFormatName);

            input = new QueueWriter(inputQueueFormatName);

            dead = new QueueReader(deadQueueFormatName);
            dead.Purge();

            outRead1 = new QueueReader(outputQueueFormatName1);
            outRead1.Purge();

            outRead2 = new QueueReader(outputQueueFormatName2);
            outRead2.Purge();

            outSend1 = new QueueWriter(outputQueueFormatName1);
            outSend2 = new QueueWriter(outputQueueFormatName2);

            sender = new Postman(adminQueueFormatName);
        }
Exemple #6
0
        public override void Write(object destinationFile)
        {
            try
            {
                using (FileStream _file = new FileStream((string)destinationFile, FileMode.Append))
                {
                    while (true && !_cancelled)
                    {
                        ByteBlock _block = QueueWriter.Dequeue();
                        if (_block == null)
                        {
                            _workComplited = true;
                            _writerEvent.Set();
                            return;
                        }

                        _file.Write(_block.Buffer, 0, _block.Buffer.Length);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                _cancelled     = true;
                _workComplited = true;
            }
        }
Exemple #7
0
        public static void Main(string[] args)
        {
            var configuration = new ConfigurationBuilder()
                                .SetBasePath(Directory.GetCurrentDirectory())
                                .AddJsonFile("appsettings.json", optional: false)
                                .Build();

            var rpcConfig = configuration.GetSection("RpcConfig").Get <RpcConfig>();

            rpcClient = new WalletRpcClient(rpcConfig.Port, rpcConfig.User, rpcConfig.Password, rpcConfig.Passphrase);

            optionsBuilder = new DbContextOptionsBuilder <DataContext>();
            optionsBuilder.UseSqlServer(configuration.GetConnectionString("Database"));

            serviceBusConnectionString = configuration.GetConnectionString("ServiceBusConnectionString");
            sendCoinsQueueName         = configuration.GetConnectionString("SendCoinsQueueName");

            contractAddress = configuration.GetValue <string>("ContractAddress");
            network         = configuration.GetValue <string>("Network");
            nrOfCoins       = configuration.GetValue <decimal>("NrOfCoins");
            sleepTime       = configuration.GetValue <int>("SleepTime");

            sendCoinsQueueWriter = new QueueWriter <SendCoinsMessage>(serviceBusConnectionString, sendCoinsQueueName);

            dataManager = new DataManager(() => new DataContext(optionsBuilder.Options));

            MainAsync().GetAwaiter().GetResult();
        }
        private void AddWriters(Node node, NodeReader reader, BufferTree tree, QueueIndex queue)
        {
            if (node.Index.Count > 0)
            {
                FieldWriter writer = new FieldWriter(node)
                {
                    BufferIndex = node.Index.ToArray(),
                    NamePart    = this.GetNamePart(node, queue, tree),
                    Queue       = queue,
                };

                reader.Writers.Add(writer);
                tree.Fields.Add(writer);

                if (queue != null && queue.Type == RelationQueueType.Cached)
                {
                    CacheWriter cacheWriter = new CacheWriter(node)
                    {
                        BufferIndex = writer.BufferIndex.First(),
                        CacheIndex  = queue.Cache.Count,
                        Queue       = queue,
                    };

                    queue.Cache.Add(cacheWriter);
                }
            }

            if (node.Item != null || node.Metadata.HasFlag(RelationMetadataFlags.List | RelationMetadataFlags.Recursive))
            {
                QueueIndex prevQueue = tree.Queues.LastOrDefault()?.Index;
                QueueIndex nextQueue = this.CreateIndex(node, tree);

                QueueWriter writer = new QueueWriter(node)
                {
                    NamePart = this.GetNamePart(node.Item ?? node, queue, tree),
                    Queue    = queue,
                    Next     = nextQueue,
                };

                if ((node.Item ?? node).Metadata.HasFlag(RelationMetadataFlags.Recursive))
                {
                    nextQueue.Type = RelationQueueType.Recursive;
                }
                else if (prevQueue != null && !prevQueue.List.Identity.Equals(nextQueue.List.Owner.Parent?.Identity))
                {
                    nextQueue.Type = RelationQueueType.Cached;
                }
                else if (prevQueue != null && prevQueue.Type == RelationQueueType.Cached)
                {
                    nextQueue.Type = RelationQueueType.Cached;
                }

                reader.Writers.Add(writer);

                if (node.Item != null)
                {
                    this.CreateQueue(node.Item, tree, nextQueue);
                }
            }
        }
Exemple #9
0
        public async Task CreateQueueWriter(PlayerType playerType, QueueData queueData = null)
        {
            if (StaticResources.user.type == PlayerType.Host)
            {
                await QueueListner.DisconnectFromQueue();
            }

            if (QueueWriter != null)
            {
                await QueueWriter.DisconnectFromQueue();
            }

            QueueTypes queueTypes = new QueueTypes();

            QueueData writerData = queueData;

            if (playerType == PlayerType.Guest)
            {
                string queueName = "Join-" + StaticResources.sessionCode;
                writerData                       = new QueueData();
                writerData.queueName             = queueName;
                writerData.QueueConnectionString = ServiceBusData.ConnectionString;
            }

            // pass over connection data
            QueueWriter = new QueueWriterHandler(writerData);
        }
Exemple #10
0
        private void Write()
        {
            try
            {
                using (FileStream _decompressedFile = new FileStream(SourceFile.Remove(SourceFile.Length - 3), FileMode.Append))
                {
                    while (!Cancelled)
                    {
                        ByteBlock _block = QueueWriter.Dequeue();
                        if (_block == null)
                        {
                            return;
                        }

                        _decompressedFile.Write(_block.Buffer, 0, _block.Buffer.Length);
                    }
                }
            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Cancelled = true;
            }
        }
        public async Task can_route_multiple_message()
        {
            var key = Environment.TickCount;

            using (var router = new SubQueueRouter(testQueueFormatName, GetSubQueue))
            {
                await router.StartAsync();

                try
                {
                    using (var q = new QueueWriter(testQueueFormatName))
                    {
                        q.Write(new Message {
                            Label = "my.sq", AppSpecific = key
                        });
                        q.Write(new Message {
                            Label = "my.sq", AppSpecific = key + 1
                        });
                    }

                    using (var sq = new QueueReader(testQueueFormatName + ";sq"))
                    {
                        var got = sq.Read(Properties.AppSpecific, timeout: TimeSpan.FromMilliseconds(500));
                        Assert.AreEqual(key, got.AppSpecific);

                        got = sq.Read(Properties.AppSpecific, timeout: TimeSpan.FromMilliseconds(500));
                        Assert.AreEqual(key + 1, got.AppSpecific);
                    }
                }
                finally
                {
                    await router.StopAsync();
                }
            }
        }
Exemple #12
0
        static void Main(string[] args)
        {
            var eventAggregator = new EventAggregator <Message>();
            var projectionHost  = new ProjectionHost(eventAggregator);

            projectionHost.SetUpProjections();

            var inMemQueue = new InMemQueue <Message>();
            var reader     = new QueueReader <Message>(inMemQueue);

            eventAggregator.AttachTo(reader);

            var foo = new QueueWriter <Message>(inMemQueue);

            reader.Start();
            while (true)
            {
                foo.Handle(new FooMessage());
                Thread.Sleep(1000);
            }

            //var dispatcher = new ByTypeDispatcher();
            //dispatcher.Subscribe(new FooHandler());
            //dispatcher.Handle(new FooMessage());
        }
Exemple #13
0
        public async Task can_remove_subscription()
        {
            using (var requestWriter = new QueueWriter(requestFN))
                using (var replyReader = new QueueReader(replyFN))
                {
                    var addReq = new Message {
                        AppSpecific = (int)PubSubAction.Add, ResponseQueue = replyFN
                    };
                    addReq.BodyUTF8("thing.one" + Environment.NewLine + "thing.two");
                    requestWriter.Write(addReq);

                    var removeReq = new Message {
                        AppSpecific = (int)PubSubAction.Remove, ResponseQueue = replyFN
                    };
                    removeReq.BodyUTF8("thing.one");
                    requestWriter.Write(removeReq);

                    var listReq = new Message {
                        AppSpecific = (int)PubSubAction.List, ResponseQueue = replyFN
                    };
                    requestWriter.Write(listReq);

                    var got = replyReader.Read(timeout: TimeSpan.FromSeconds(3));
                    Assert.IsNotNull(got);
                    Assert.AreEqual("thing.two", got.BodyUTF8());
                }
        }
        async Task OnNewMessage(Message msg)
        {
            var         lookupId = msg.LookupId;
            QueueWriter dest     = null;

            try
            {
                dest = GetRoute(msg);
                await dest.DeliverAsync(msg, Sender, QueueTransaction.None);

                var removed = _input.Lookup(Properties.LookupId, lookupId, timeout: TimeSpan.Zero); // remove message from queue
                if (removed == null)
                {
                    Console.Error.WriteLine($"WARN: router message to {dest.FormatName} but could not remove message from input queue");
                }
            }
            catch (QueueException ex)
            {
                //TODO: logging
                Console.Error.WriteLine($"WARN {ex.Message} {{{dest?.FormatName}}}");
                BadMessageHandler(_input, lookupId, QueueTransaction.None);
            }
            catch (RouteException ex)
            {
                //TODO: logging
                Console.Error.WriteLine($"WARN {ex.Message} {{{ex.Destination}}}");
                BadMessageHandler(_input, ex.LookupId, QueueTransaction.None);
            }
        }
Exemple #15
0
        public void TestInitialize()
        {
            dataAccess = new Mock <IBusDataAccess>();
            counters   = new Mock <IPerfCounters>();
            serializer = new Mock <ISerializer>();
            clock      = new Mock <ISystemClock>();

            clock.SetupGet(c => c.UtcNow)
            .Returns(new DateTime(2022, 2, 23, 10, 49, 32, 33, DateTimeKind.Utc));

            dataAccess.Setup(d => d.AddMessage(It.IsAny <QueueMessage>(), It.IsAny <string>()))
            .Callback <QueueMessage, string>((msg, qn) =>
            {
                AddedMessage = msg;
                AddedToQueue = qn;
            })
            .Returns(Task.FromResult <long>(12345));

            serializer.Setup(s => s.SerializeHeaders(It.IsAny <Headers>()))
            .Callback <Headers>(h => SerializedHeaders = h)
            .Returns("SerialziedHeaders");

            serializer.Setup(s => s.SerializeMessage(It.IsAny <object>(), It.IsAny <Type>()))
            .Returns("SerialziedMessage");

            writer = new QueueWriter(dataAccess.Object, counters.Object, serializer.Object, clock.Object);
        }
Exemple #16
0
        private void Decompress(object i)
        {
            try
            {
                while (!Cancelled)
                {
                    ByteBlock _block = QueueReader.Dequeue();
                    if (_block == null)
                    {
                        return;
                    }

                    using (MemoryStream ms = new MemoryStream(_block.CompressedBuffer))
                    {
                        using (GZipStream _gz = new GZipStream(ms, CompressionMode.Decompress))
                        {
                            _gz.Read(_block.Buffer, 0, _block.Buffer.Length);
                            byte[]    decompressedData = _block.Buffer.ToArray();
                            ByteBlock block            = new ByteBlock(_block.ID, decompressedData);
                            QueueWriter.EnqueueForWriting(block);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error in thread number {0}. \n Error description: {1}", i, ex.Message);
                Cancelled = true;
            }
        }
        public void fred()
        {
            QueueWriter q   = null;
            Message     msg = null;
            Postman     pm  = null;

            q.Deliver(msg, pm);
        }
        private Expression GetNewQueueItemExpression(QueueWriter writer, Expression value)
        {
            Type            itemType = this.GetQueueItemGenericType(writer.Next);
            ConstructorInfo ctor     = itemType.GetConstructors()[0];

            Expression namePart = this.GetFieldNameExpression(writer);

            return(Expression.New(ctor, value, namePart, Arguments.Notation));
        }
Exemple #19
0
 public void Setup()
 {
     destFormatName  = Queues.TryCreate(destQueuePath, QueueTransactional.Transactional);
     adminFormatName = Queues.TryCreate(adminQueuePath, QueueTransactional.None);
     Queues.Purge(destFormatName);
     dest  = new QueueWriter(destFormatName);
     admin = new QueueReader(adminFormatName);
     admin.Purge();
 }
Exemple #20
0
        public RequestReply(string requestQueueFormantName, string replyQueueFormatName, Postman postman)
        {
            Contract.Requires(postman != null);
            Contract.Requires(requestQueueFormantName != null);
            Contract.Requires(replyQueueFormatName != null);

            _requestQueue  = new QueueWriter(requestQueueFormantName);
            _responseQueue = new QueueReader(replyQueueFormatName);
            _postman       = postman;
        }
        private Expression GetQueueAddExpression(QueueWriter writer, Expression value)
        {
            Type       queueType = this.GetQueueGenericType(writer.Next);
            MethodInfo addMethod = queueType.GetMethod("Enqueue");

            Expression queue     = this.GetQueueIndexExpression(writer.Next);
            Expression queueItem = this.GetNewQueueItemExpression(writer, value);

            return(Expression.Call(queue, addMethod, queueItem));
        }
Exemple #22
0
        /// <summary>
        /// Sends a <paramref name="message"/> to the <paramref name="queue"/> and waits for it to be delivered.
        /// Waits for responses from all queues when the <paramref name="queue"/> is a multi-element format name.
        /// Note that the transaction MUST commit before the acknowledgements are received.
        /// </summary>
        /// <returns>Task that completes when the message has been delivered</returns>
        /// <exception cref="TimeoutException">Thrown if the message does not reach the queue before the <see cref="ReachQueueTimeout"/> has been reached</exception>
        /// <exception cref="AcknowledgmentException">Thrown if something bad happens, e.g. message could not be sent, access denied, the queue was purged, etc</exception>
        public static Task DeliverAsync(this QueueWriter queue, Message message, Postman postman, QueueTransaction transaction = null)
        {
            Contract.Requires(queue != null);
            Contract.Requires(message != null);
            Contract.Requires(postman != null);
            Contract.Requires(transaction == null || transaction == QueueTransaction.None || transaction == QueueTransaction.Single);

            var t = postman.RequestDelivery(message, queue, transaction);

            return(postman.WaitForDeliveryAsync(t));
        }
 private void Server(int count)
 {
     using (var requestQ = new QueueReader(requestQueueFormatName))
         using (var replyQ = new QueueWriter(replyQueueFormatName))
         {
             for (int i = 0; i < count; i++)
             {
                 var msg = requestQ.Read(Properties.All, TimeSpan.FromSeconds(0.5));
                 msg.CorrelationId = msg.Id;
                 replyQ.Write(msg);
             }
         }
 }
Exemple #24
0
        public void Setup()
        {
            inputQueueFormatName = Queues.TryCreate(inputQueuePath, QueueTransactional.None);
            adminQueueFormatName = Queues.TryCreate(adminQueuePath, QueueTransactional.None);
            Queues.Purge(inputQueueFormatName);
            Queues.Purge(adminQueueFormatName);

            inputWriter = new QueueWriter(inputQueueFormatName);

            dispatcher = new LabelSubscriber(inputQueueFormatName);
            dispatcher.StartAsync().Wait();

            postman = new Postman(adminQueueFormatName);
            postman.StartAsync().Wait();
        }
        private async Task PerformWrites(string queueName, int numWrites)
        {
            ParmCheck.NotNullOrEmpty(nameof(queueName), queueName);
            ParmCheck.Positive(nameof(numWrites), numWrites);

            var queueWriter = new QueueWriter(_connectionString, queueName);

            for (int i = 0; i < numWrites; i++)
            {
                FishObservation observation = DataGenerator.CreateFishObservation();

                string messageId = await queueWriter.Write(observation);

                Console.WriteLine($"Message {messageId} sent.");
            }
        }
Exemple #26
0
        /// <summary>
        /// Posts a <paramref name="message"/> to the <paramref name="queue"/> with acknowledgement requested to be sent to <see cref="AdminQueueFormatName"/>.
        /// </summary>
        public Tracking RequestDelivery(Message message, QueueWriter queue, QueueTransaction transaction = null)
        {
            Contract.Requires(message != null);
            Contract.Requires(queue != null);
            Contract.Assert(_run != null);
            Contract.Assert(_adminQueue != null);

            message.AcknowledgmentTypes |= AcknowledgmentTypes.FullReachQueue;
            message.TimeToReachQueue     = ReachQueueTimeout;
            message.AdministrationQueue  = _adminQueue.FormatName;
            queue.Write(message, transaction);

            // acknowledgements for multicast messages get an empty DestinationQueue, so we need to remove it here
            var formatName = queue.FormatName.StartsWith("multicast=", StringComparison.OrdinalIgnoreCase)? "" : queue.FormatName;

            return(new Tracking(formatName, message.Id, message.LookupId));
        }
Exemple #27
0
        protected QueueWriter GetRoute(Message msg)
        {
            QueueWriter r = null;

            try
            {
                r = _route(msg);
                if (r == null)
                {
                    throw new NullReferenceException("route");
                }
                return(r);
            }
            catch (Exception ex)
            {
                throw new RouteException("Failed to get route", ex, msg.LookupId);
            }
        }
        public async Task can_route_many()
        {
            using (var input = new QueueWriter(testQueueFormatName))
                using (var out1 = new QueueReader(testQueueFormatName + ";one"))
                    using (var out2 = new QueueReader(testQueueFormatName + ";two"))
                        using (var router = new SubQueueRouter(testQueueFormatName, GetSubQueue))
                        {
                            out1.Purge();
                            out2.Purge();

                            for (int i = 0; i < 1000; i++)
                            {
                                input.Write(new Message {
                                    Label = "1", AppSpecific = i
                                });
                                input.Write(new Message {
                                    Label = "2", AppSpecific = i
                                });
                            }
                            var sw = new Stopwatch();
                            sw.Start();

                            var rtask = router.StartAsync();
                            try
                            {
                                for (int i = 0; i < 1000; i++)
                                {
                                    var got = out1.Read(Properties.Label | Properties.AppSpecific);
                                    Assert.AreEqual("1", got.Label, "Label");
                                    Assert.AreEqual(i, got.AppSpecific, "AppSpecific");
                                    got = out2.Read(Properties.Label | Properties.AppSpecific);
                                    Assert.AreEqual("2", got.Label, "Label");
                                    Assert.AreEqual(i, got.AppSpecific, "AppSpecific");
                                }
                                sw.Stop();
                            }
                            finally
                            {
                                await router.StopAsync();
                            }

                            Console.WriteLine($"Reading 2000 routed messages took {sw.ElapsedMilliseconds:N0} MS");
                        }
        }
Exemple #29
0
        public void can_peek_when_opened_with_move_acces()
        {
            var fn   = Queues.TryCreate(".\\private$\\subqtest", QueueTransactional.None);
            var sqfn = fn + ";sq";

            using (var qWriter = new QueueWriter(fn))
            {
                qWriter.Write(new Message {
                    AppSpecific = 234
                });
            }
            using (var qReader = new QueueReader(fn))
                using (var subQueue = new SubQueue(sqfn))
                {
                    var msg = qReader.Peek(Properties.LookupId);
                    Queues.MoveMessage(qReader, subQueue, msg.LookupId);
                    var got = subQueue.Read();
                    Assert.AreEqual(234, got.AppSpecific);
                }
        }
        public void CreateQueueWriter(PlayerType playerType, QueueData queueData = null)
        {
            if (QueueWriter != null)
            {
                QueueWriter.DisconnectFromQueue();
            }

            QueueTypes queueTypes = new QueueTypes();

            QueueData writerData = queueData;

            if (playerType == PlayerType.Guest)
            {
                string queueName = "Join-" + StaticResources.sessionCode;
                writerData = QueueManipulator.CreateNewQueue(queueName);
            }

            // pass over connection data
            QueueWriter = new QueueWriterHandler(writerData);
        }