Пример #1
0
        /// <summary>
        /// Gets an available cached instance of the serializer.  If one is not cached, generate a new one.
        /// </summary>
        /// <param name="message">Message to initialize the MqReader with.  Null to just reset.</param>
        /// <returns>Cached serializer.</returns>
        public Serializer Get(MqMessage message = null)
        {
            Serializer serializer;

            // Try to get an existing cached serializer.
            if (_cachedContainers.TryDequeue(out serializer) == false)
            {
                // A cached serializer does not exist.  Create a new one.
                var mqWriter = new MqMessageWriter(_config);
                var mqReader = new MqMessageReader();

                serializer = new Serializer
                {
                    MessageWriter = mqWriter,
                    MessageReader = mqReader,
                    Stream        = new MemoryStream()
                };
            }
            else
            {
                serializer.Stream.SetLength(0);
                serializer.MessageWriter.Clear();
            }

            serializer.MessageReader.Message = message;

            return(serializer);
        }
        private static void StartClient(int totalLoops, int totalMessages, int totalFrames, int frameSize)
        {
            var cl = new MqClient <SimpleMqSession, MqConfig>(new MqConfig()
            {
                Ip   = "127.0.0.1",
                Port = 2828
            });

            var stopwatch     = new Stopwatch();
            var messageReader = new MqMessageReader();
            var messageSize   = totalFrames * frameSize;
            var message       = new MqMessage();

            double[] totalValues = { 0, 0, 0 };

            for (int i = 0; i < totalFrames; i++)
            {
                message.Add(new MqFrame(SequentialBytes(frameSize), MqFrameType.More, (MqConfig)cl.Config));
            }

            cl.IncomingMessage += (sender, args) =>
            {
                MqMessage msg;
                while (args.Messages.Count > 0)
                {
                    msg = args.Messages.Dequeue();

                    messageReader.Message = msg;
                    var result = messageReader.ReadString();

                    if (result == "COMPLETE")
                    {
                        if (totalLoops-- > 0)
                        {
                            stopwatch.Stop();

                            var messagesPerSecond =
                                (int)((double)totalMessages / stopwatch.ElapsedMilliseconds * 1000);
                            var msgSizeNoHeader = messageSize;
                            var mbps            = totalMessages * (double)(msgSizeNoHeader) / stopwatch.ElapsedMilliseconds / 1000;
                            Console.WriteLine("| {0,10:N0} | {1,9:N0} | {2,12:N0} | {3,10:N0} | {4,8:N2} |",
                                              totalMessages,
                                              msgSizeNoHeader, stopwatch.ElapsedMilliseconds, messagesPerSecond, mbps);

                            totalValues[0] += stopwatch.ElapsedMilliseconds;
                            totalValues[1] += messagesPerSecond;
                            totalValues[2] += mbps;
                        }

                        if (totalLoops == 0)
                        {
                            Console.WriteLine("|            |  AVERAGES | {0,12:N0} | {1,10:N0} | {2,8:N2} |",
                                              totalValues[0] / totalLoops,
                                              totalValues[1] / totalLoops, totalValues[2] / totalLoops);
                            Console.WriteLine();
                            Console.WriteLine("Test complete");
                        }


                        cl.Close();
                    }
                    else if (result == "START")
                    {
                        if (totalLoops > 0)
                        {
                            stopwatch.Restart();
                            for (var i = 0; i < totalMessages; i++)
                            {
                                cl.Send(message);
                            }
                        }
                    }
                }
            };

            cl.Connect();
        }
Пример #3
0
 public MqMessageWriterReaderTests(ITestOutputHelper output)
 {
     Output          = output;
     _messageBuilder = new MqMessageWriter(_config);
     _messageReader  = new MqMessageReader();
 }