Ejemplo n.º 1
0
 /// <summary>
 /// Called when a publisher has committed an event to the <see cref="T:Disruptor.RingBuffer`1"/>
 /// </summary>
 /// <param name="data">Data committed to the <see cref="T:Disruptor.RingBuffer`1"/></param><param name="sequence">Sequence number committed to the <see cref="T:Disruptor.RingBuffer`1"/></param><param name="endOfBatch">flag to indicate if this is the last event in a batch from the <see cref="T:Disruptor.RingBuffer`1"/></param>
 public void OnNext(MessageQueueObject data, long sequence, bool endOfBatch)
 {
     // Send Data to Client
     _tradeManagerClient.SendExecution(data);
 }
        public void NewExecution_SendInformationToTradeManagerServer_ExecutionReceivedByServer()
        {
            Thread.Sleep(2000);

            bool executionReceived         = false;
            var  executionManualResetEvent = new ManualResetEvent(false);

            // Create Order Object
            Order order = new Order(OrderExecutionProvider.Simulated)
            {
                OrderID   = "1",
                OrderSide = OrderSide.BUY,
                Security  = new Security()
                {
                    Symbol = "GOOG"
                }
            };

            // Create Fill Object
            Fill fill = new Fill(new Security()
            {
                Symbol = "GOOG"
            }, OrderExecutionProvider.Simulated, "1");

            fill.ExecutionId       = "1";
            fill.ExecutionSide     = OrderSide.BUY;
            fill.ExecutionSize     = 40;
            fill.ExecutionDateTime = new DateTime(2014, 01, 22, 18, 20, 57);
            // Create Execution Object
            Execution execution = new Execution(fill, order);

            Execution executionReceivedObject = null;

            _tradeManagerMqServer.NewExecutionReceivedEvent += delegate(Execution executionObject)
            {
                executionReceivedObject = executionObject;
                executionReceived       = true;
                executionManualResetEvent.Set();
            };

            byte[] message = Encoding.UTF8.GetBytes(execution.DataToPublish());

            var requestMessage = new MessageQueueObject();

            requestMessage.Message = message;

            // Publish Execution to MQ Exchange
            _tradeManagerClient.SendExecution(requestMessage);

            executionManualResetEvent.WaitOne(10000, false);

            Assert.AreEqual(true, executionReceived, "Execution Received");
            Assert.AreEqual(execution.Order.OrderExecutionProvider, executionReceivedObject.Order.OrderExecutionProvider, "Order Execution Provider");
            Assert.AreEqual(execution.Order.OrderID, executionReceivedObject.Order.OrderID, "Order ID");
            Assert.AreEqual(execution.Order.Security.Symbol, executionReceivedObject.Order.Security.Symbol, "Order Symbol");
            Assert.AreEqual(execution.Order.OrderSide, executionReceivedObject.Order.OrderSide, "Order Side");
            Assert.AreEqual(execution.Fill.Security.Symbol, executionReceivedObject.Fill.Security.Symbol, "Fill Symbol");
            Assert.AreEqual(execution.Fill.OrderExecutionProvider, executionReceivedObject.Fill.OrderExecutionProvider, "Fill Execution Provider");
            Assert.AreEqual(execution.Fill.ExecutionId, executionReceivedObject.Fill.ExecutionId, "Execution ID");
            Assert.AreEqual(execution.Fill.OrderId, executionReceivedObject.Fill.OrderId, "Order ID in Fill");
            Assert.AreEqual(execution.Fill.ExecutionSide, executionReceivedObject.Fill.ExecutionSide, "Execution Side");
            Assert.AreEqual(execution.Fill.ExecutionSize, executionReceivedObject.Fill.ExecutionSize, "Execution Size");
        }