/// <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); }
/// <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); }
/// <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 < 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); }