예제 #1
0
        /// <summary>
        /// Determines whether a given object is equal to the current <c>QuoteMessage</c> object.
        /// </summary>
        /// <param name="obj">the object for comparison.</param>
        /// <returns>True if <c>obj</c> is a <c>QuoteMessage</c> object and is equal to the current object; false otherwise.</returns>
        public override bool Equals(object obj)
        {
            if (obj == null)
            {
                return(false);
            }

            QuoteMessage msg = obj as QuoteMessage;

            if ((object)msg == null)
            {
                return(false);
            }

            return(Compare(this, msg) == 0);
        }
예제 #2
0
        /// <summary>
        /// Creates a <c>QuoteMessage</c> object with its encoding in a byte array.
        /// </summary>
        /// <param name="message">the message encoded in a byte array.</param>
        /// <param name="offset">the start index in the byte array.</param>
        /// <param name="count">the actual length of message.</param>
        /// <returns>An initialized <c>QuoteMessage</c> object.</returns>
        /// <exception cref="System.NotSupportedException">The message is of unsupported auction session or malformed.</exception>
        private static QuoteMessage CreateQuoteMessage(byte[] message, int offset, int count)
        {
            QuoteMessage result = null;

            switch (QuoteMessage.PeekSession(message, offset))
            {
            case AuctionSessions.SessionA:
                result = new SessionAMessage(message, offset, count);
                break;

            case AuctionSessions.SessionB:
                result = new SessionBMessage(message, offset, count);
                break;

            case AuctionSessions.SessionC:
                result = new SessionCMessage(message, offset, count);
                break;

            case AuctionSessions.SessionD:
                result = new SessionDMessage(message, offset, count);
                break;

            case AuctionSessions.SessionE:
                result = new SessionEMessage(message, offset, count);
                break;

            case AuctionSessions.SessionF:
                result = new SessionFMessage(message, offset, count);
                break;

            case AuctionSessions.SessionG:
                result = new SessionGMessage(message, offset, count);
                break;

            case AuctionSessions.SessionH:
                result = new SessionHMessage(message, offset, count);
                break;

            default:
                throw new NotSupportedException("Unsupported auction session.");
            }

            Debug.Assert(result != null);
            return(result);
        }
예제 #3
0
        /// <summary>
        /// Compares two <c>QuoteMessage</c> objects.
        /// </summary>
        /// <param name="m1">the first <c>QuoteMessage</c> object.</param>
        /// <param name="m2">the first <c>QuoteMessage</c> object.</param>
        /// <returns>1 if m1 > m2, 0 if m1 == m2, and -1 if m1 &lt; m2.</returns>
        public static int Compare(QuoteMessage m1, QuoteMessage m2)
        {
            if ((object)m1 == null)
            {
                if ((object)m2 == null)
                {
                    return(0);
                }
                else
                {
                    return(-1);
                }
            }
            else if ((object)m2 == null)
            {
                return(1);
            }

            int result = DateTime.Compare(m1.UpdateTimestamp, m2.UpdateTimestamp);

            if (result > 0)
            {
                return(1);
            }
            else if (result < 0)
            {
                return(-1);
            }

            int sessionComparison = CompareSession(m1.AuctionSession, m2.AuctionSession);

            if (sessionComparison != 0)
            {
                return(sessionComparison);
            }

            if (m1 is QuoteDataMessage)
            {
                QuoteDataMessage dataMessage1 = (QuoteDataMessage)m1;
                QuoteDataMessage dataMessage2 = (QuoteDataMessage)m2;

                result = TimeSpan.Compare(dataMessage1.ServerTime, dataMessage2.ServerTime);
                if (result > 0)
                {
                    return(1);
                }
                else if (result < 0)
                {
                    return(-1);
                }

                if (m1 is SessionAMessage)
                {
                    SessionAMessage aMessage1 = (SessionAMessage)m1;
                    SessionAMessage aMessage2 = (SessionAMessage)m2;

                    int bidQuantity1 = aMessage1.BidQuantity;
                    int bidQuantity2 = aMessage2.BidQuantity;
                    if (bidQuantity1 > bidQuantity2)
                    {
                        return(1);
                    }
                    else if (bidQuantity1 < bidQuantity2)
                    {
                        return(-1);
                    }
                }

                int bidPrice1 = dataMessage1.BidPrice;
                int bidPrice2 = dataMessage2.BidPrice;
                if (bidPrice1 > bidPrice2)
                {
                    return(1);
                }
                else if (bidPrice1 < bidPrice2)
                {
                    return(-1);
                }

                result = DateTime.Compare(dataMessage1.BidTime, dataMessage2.BidTime);
                if (result < 0)
                {
                    return(1);
                }
                else if (result > 0)
                {
                    return(-1);
                }
            }

            return(0);
        }