public static void ProcessOrder(ExchangeAMd message)
        {
            if(message.Sequence <= LastHighestSequenceNumber)
                return;
            if(message.Sequence > LastHighestSequenceNumber + 1)
                //Inconsistent state (Message lost)
            LastHighestSequenceNumber = message.Sequence;

            LimitBook book;
            lock (Books)
            {
                book = Books.Find(b => b.Contract.Equals(message.Contract));
                if (book == null)
                {
                    var newBook = new LimitBook(message.Contract);
                    Books.Add(newBook);
                    book = newBook;
                }
            }
            if (message.Type == MessageType.NewLevel)
            {
                book.ProcessNewOrder(message);
            }
            if (message.Type == MessageType.UpdateLevel)
            {
                book.ProcessModifyOrder(message);
            }
            if (message.Type == MessageType.DeleteLevel)
            {
                book.ProcessDeleteOrder(message);
            }
        }
        public void ProcessNewOrder(ExchangeAMd message)
        {
            if (message.Side == LimitOrderSide.Sell)
            {
                ProcessSellAddOrder(message.Level, message.Price, message.Quantity);
            }

            if (message.Side == LimitOrderSide.Buy)
            {
                ProcessBuyAddOrder(message.Level, message.Price, message.Quantity);
            }
        }
        public void ProcessDeleteOrder(ExchangeAMd message)
        {
            if(message.Side == LimitOrderSide.Sell)
            {
                ProcessSellDeleteOrder(message.Level);
            }

            if(message.Side == LimitOrderSide.Buy)
            {
                ProcessBuyDeleteOrder(message.Level);
            }
        }
        public void GenerateData()
        {
            var contract = new List<string>() {"APPLE","IBM","GOOGLE","MICROSOFT","AMAZON","FACEBOOK"};

            bool sideFlag = false;
            var random = new Random();
            var sequence = 1;
            //UDPClient clientOne = new UDPClient(EP1);
            //UDPClient clientTwo = new UDPClient(EP2);

            for (int i = 0; i < 5; i++)
            {
                for (int j = 1; j < 6; j++)
                {
                    var side = sideFlag ? LimitOrderSide.Sell : LimitOrderSide.Buy;
                    sideFlag = sideFlag != true;
                    var message = new ExchangeAMd(sequence++, contract[i], j, random.Next(500), random.Next(500), side,
                                                  MessageType.NewLevel);
                    var randomNum = random.Next(100);
                    string data = JsonHelper.JsonSerializer(message);

                    if (randomNum <= 100*ProbabilityParameter)
                    {
                        Client.Client.ProcessOrder(message);
                        Client.Client.ProcessOrder(message);
                        //clientOne.Send(data);
                        //clientTwo.Send(data);
                    }
                    else
                    {
                        Client.Client.ProcessOrder(message);
                        Client.Client.ProcessOrder(message);
                        //clientTwo.Send(data);
                        //clientOne.Send(data);
                    }
                }
            }
        }