Example #1
0
        /// <summary>
        /// Sends the given message over the network to the other endpoint.
        /// </summary>
        public void SendMessage(OutgoingMessage outgoingMessage)
        {
            LaggedMessage nextLaggedMessage = this.pairedNetworkConnection.getMessageToAddToIncomingQueue();

            double now = this.stopwatch.Elapsed.TotalMilliseconds;

            nextLaggedMessage.LaggedArrivalTime = now + this.SimulatedLatency;
            nextLaggedMessage.IncomingMessage.CopyFrom(outgoingMessage);
        }
Example #2
0
        /// <summary>
        /// Returns a message that will be added to the queue of messages that have arrived. This will always return a
        /// message and the message is immediately added to the queue. The consumer must fill in the data of the message.
        /// </summary>
        private LaggedMessage getMessageToAddToIncomingQueue()
        {
            LaggedMessage pooledLaggedMessage;

            if (this.pooledIncomingMessages.Count == 0)
            {
                pooledLaggedMessage = new LaggedMessage(new IncomingMessage(new byte[this.MaxMessageSize]));
            }
            else
            {
                pooledLaggedMessage = this.pooledIncomingMessages.Dequeue();
            }
            this.nextIncomingMessages.Enqueue(pooledLaggedMessage);
            pooledLaggedMessage.IncomingMessage.Clear();
            return(pooledLaggedMessage);
        }
Example #3
0
        /// <summary>
        /// Returns the next message that is coming in over the network. Returns null if no message is ready.
        /// </summary>
        public IncomingMessage GetNextIncomingMessage()
        {
            if (this.nextIncomingMessages.Count == 0)
            {
                return(null);
            }

            double now = this.stopwatch.Elapsed.TotalMilliseconds;

            if (this.nextIncomingMessages.Peek().LaggedArrivalTime > now)
            {
                return(null);
            }

            LaggedMessage nextLaggedMessage = this.nextIncomingMessages.Dequeue();

            this.pooledIncomingMessages.Enqueue(nextLaggedMessage);
            nextLaggedMessage.IncomingMessage.Reset();
            return(nextLaggedMessage.IncomingMessage);
        }