Пример #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 StartServer(int totalMessages, int totalClients)
        {
            var server = new MqServer <SimpleMqSession, MqConfig>(new MqConfig()
            {
                Ip   = "127.0.0.1",
                Port = 2828
            });

            var builder = new MqMessageWriter((MqConfig)server.Config);

            builder.Write("COMPLETE");

            var completeMessage = builder.ToMessage(true);

            builder.Write("START");
            var startMessage = builder.ToMessage(true);

            ConcurrentDictionary <SimpleMqSession, ClientRunInfo> clientsInfo =
                new ConcurrentDictionary <SimpleMqSession, ClientRunInfo>();


            server.Connected += (sender, session) =>
            {
                var currentInfo = new ClientRunInfo()
                {
                    Session = session.Session,
                    Runs    = 0
                };
                clientsInfo.TryAdd(session.Session, currentInfo);

                if (clientsInfo.Count == totalClients)
                {
                    foreach (var mqSession in clientsInfo.Keys)
                    {
                        mqSession.Send(startMessage);
                    }
                }
            };

            server.Closed += (session, value) =>
            {
                ClientRunInfo info;
                clientsInfo.TryRemove(value.Session, out info);
            };

            server.IncomingMessage += (sender, args) =>
            {
                var clientInfo = clientsInfo[args.Session];

                // Count the total messages.
                clientInfo.Runs += args.Messages.Count;

                if (clientInfo.Runs == totalMessages)
                {
                    args.Session.Send(completeMessage);
                    args.Session.Send(startMessage);
                    clientInfo.Runs = 0;
                }
            };


            server.Start();
        }
Пример #3
0
 /// <summary>
 /// Create a RpcStream in reader mode.
 /// </summary>
 /// <param name="session">Session to write to.</param>
 public RpcByteTransport(RpcSession <TSession, TConfig> session, ushort id)
 {
     this.session = session;
     writer       = new MqMessageWriter(this.session.Config);
 }
Пример #4
0
 public MqMessageWriterReaderTests(ITestOutputHelper output)
 {
     Output          = output;
     _messageBuilder = new MqMessageWriter(_config);
     _messageReader  = new MqMessageReader();
 }