예제 #1
0
        protected override void OnMessageReceived(object sender, MessageReceivedEventArgs e)
        {
            if (!IsInitialised)
            {
                return;
            }
            DateTime   niffleTimeStamp = DateTime.FromBinary(e.Message.Timestamp);
            RoutingKey routingKey      = new RoutingKey(e.EventArgs.RoutingKey);
            string     source          = routingKey.GetSource();
            string     action          = routingKey.GetAction();
            string     _event          = routingKey.GetEvent();

            //Service messages received will be notify
            if (e.Message.Type == Niffle.Types.Type.Service)
            {
                if (e.Message.Service != null)
                {
                    if (e.Message.Service.Success)
                    {
                        ReportExecution(source, action, _event, Utils.FormatDateTimeWithSeparators(niffleTimeStamp));
                    }
                }
            }

            //Positions messages will be for Position Opened, Closed or Modified.
            if (e.Message.Type == Niffle.Types.Type.Positions)
            {
                if (e.Message.Positions != null)
                {
                    Messaging.Protobuf.Positions positions = e.Message.Positions;
                    for (int count = 0; count < positions.Count; count++)
                    {
                        if (routingKey.GetEventAsEnum() == Event.ONPOSITIONCLOSED)
                        {
                            if (positions.Position[count].StateChange == Messaging.Protobuf.Position.Types.StateChange.Closed)
                            {
                                ReportPositionClosed(positions.Position[count]);
                            }
                        }

                        if (routingKey.GetEventAsEnum() == Event.ONPOSITIONOPENED)
                        {
                            if (positions.Position[count].StateChange == Messaging.Protobuf.Position.Types.StateChange.Opened)
                            {
                                ReportPositionOpened(positions.Position[count]);
                            }
                        }

                        if (routingKey.GetEventAsEnum() == Event.ONPOSITIONMODIFIED)
                        {
                            if (positions.Position[count].StateChange == Messaging.Protobuf.Position.Types.StateChange.Modified)
                            {
                                ReportPositionModified(positions.Position[count], Utils.FormatDateTimeWithSeparators(niffleTimeStamp));
                            }
                        }
                    }
                }
            }

            //Orders messages will be for Orders Placed, Cancelled or Modified
            if (e.Message.Type == Niffle.Types.Type.Orders)
            {
                if (e.Message.Orders != null)
                {
                    Messaging.Protobuf.Orders orders = e.Message.Orders;
                    for (int count = 0; count < orders.Count; count++)
                    {
                        if (routingKey.GetEventAsEnum() == Event.ONORDERPLACED)
                        {
                            if (orders.Order[count].StateChange == Messaging.Protobuf.Order.Types.StateChange.Placed)
                            {
                                ReportOrderPlaced(orders.Order[count]);
                            }
                        }

                        if (routingKey.GetEventAsEnum() == Event.ONORDERCANCELLED)
                        {
                            if (orders.Order[count].StateChange == Messaging.Protobuf.Order.Types.StateChange.Cancelled)
                            {
                                ReportOrderCancelled(orders.Order[count], Utils.FormatDateTimeWithSeparators(niffleTimeStamp));
                            }
                        }

                        if (routingKey.GetEventAsEnum() == Event.ONORDERMODIFIED)
                        {
                            if (orders.Order[count].StateChange == Messaging.Protobuf.Order.Types.StateChange.Modified)
                            {
                                ReportOrderModified(orders.Order[count], Utils.FormatDateTimeWithSeparators(niffleTimeStamp));
                            }
                        }
                    }
                }
            }

            //Error messages
            if (e.Message.Type == Niffle.Types.Type.Orders)
            {
                if (e.Message.Error != null)
                {
                    ReportError(source, e.Message.Error, Utils.FormatDateTimeWithSeparators(niffleTimeStamp));
                }
            }
        }
예제 #2
0
        protected override void OnMessageReceived(object sender, MessageReceivedEventArgs e)
        {
            if (!IsInitialised)
            {
                return;
            }
            DateTime   niffleTimeStamp = DateTime.FromBinary(e.Message.TimeStamp);
            RoutingKey routingKey      = new RoutingKey(e.EventArgs.RoutingKey);
            string     source          = routingKey.GetSource();
            string     action          = routingKey.GetAction();
            string     _event          = routingKey.GetEvent();

            //Service messages received will be notify
            if (e.Message.Type == Niffle.Types.Type.Service)
            {
                if (e.Message.Service != null)
                {
                    if (e.Message.Service.Success)
                    {
                        ReportExecution(source, action, _event, Utils.FormatDateTimeWithSeparators(niffleTimeStamp));

                        //If Strategy ended then report.
                        if (source == nameof(OnTerminateTime))
                        {
                            Report();
                            //Reset();
                        }
                    }
                }
            }

            //Position message will be for Position Opened or Closed
            if (e.Message.Type == Niffle.Types.Type.Position)
            {
                if (e.Message.Position != null)
                {
                    if (routingKey.GetEventAsEnum() == Event.ONPOSITIONCLOSED)
                    {
                        if (e.Message.Position.StateChange == Messaging.Protobuf.Position.Types.StateChange.Closed)
                        {
                            ReportPositionClosed(e.Message.Position);
                        }
                    }

                    if (routingKey.GetEventAsEnum() == Event.ONPOSITIONOPENED)
                    {
                        if (e.Message.Position.StateChange == Messaging.Protobuf.Position.Types.StateChange.Opened)
                        {
                            ReportPositionOpened(e.Message.Position);
                        }
                    }

                    if (routingKey.GetEventAsEnum() == Event.ONPOSITIONMODIFIED)
                    {
                        if (e.Message.Position.StateChange == Messaging.Protobuf.Position.Types.StateChange.Modified)
                        {
                            ReportPositionModified(e.Message.Position, Utils.FormatDateTimeWithSeparators(niffleTimeStamp));
                        }
                    }
                }
            }

            //Orders messages will be for Orders Placed, Cancelled or Modified
            if (e.Message.Type == Niffle.Types.Type.Order)
            {
                if (e.Message.Order != null)
                {
                    if (routingKey.GetEventAsEnum() == Event.ONORDERPLACED)
                    {
                        if (e.Message.Order.StateChange == Messaging.Protobuf.Order.Types.StateChange.Filled)
                        {
                            ReportOrderPlaced(e.Message.Order);
                        }
                    }

                    if (routingKey.GetEventAsEnum() == Event.ONORDERCANCELLED)
                    {
                        if (e.Message.Order.StateChange == Messaging.Protobuf.Order.Types.StateChange.Canceled)
                        {
                            ReportOrderCancelled(e.Message.Order, Utils.FormatDateTimeWithSeparators(niffleTimeStamp));
                        }
                    }

                    //Need to work out how to determine if order has been modified
                    if (routingKey.GetEventAsEnum() == Event.ONORDERMODIFIED)
                    {
                        if (e.Message.Order.StateChange == Messaging.Protobuf.Order.Types.StateChange.Filled)
                        {
                            ReportOrderModified(e.Message.Order, Utils.FormatDateTimeWithSeparators(niffleTimeStamp));
                        }
                    }
                }
            }

            //Error messages
            if (e.Message.Type == Niffle.Types.Type.Error)
            {
                if (e.Message.Error != null)
                {
                    ReportError(source, e.Message.Error, Utils.FormatDateTimeWithSeparators(niffleTimeStamp));
                }
            }
        }