/// <summary>
        /// Sends Locate Response to OEE
        /// </summary>
        /// <param name="locateResponse">TradeHub LocateResponse for the Locate Message</param>
        public bool SendLocateResponse(LocateResponse locateResponse)
        {
            try
            {
                if (_asyncClassLogger.IsDebugEnabled)
                {
                    _asyncClassLogger.Debug("New locate response received: " + locateResponse, _type.FullName, "SendLocateResponse");
                }

                // Check if OEE-Client is connected to OEE
                if (_isConnected)
                {
                    // Send Locate Response to OEE-Server
                    _executionEngineClient.SendLocateResponse(locateResponse);
                    return(true);
                }

                if (_asyncClassLogger.IsDebugEnabled)
                {
                    _asyncClassLogger.Debug("Request not sent to OEE as OEE-Client is not connected.", _type.FullName, "SendLocateResponse");
                }
                return(false);
            }
            catch (Exception exception)
            {
                _asyncClassLogger.Error(exception, _type.FullName, "SendLocateResponse");
                return(false);
            }
        }
        /// <summary>
        /// Handles New Locate response messages from Applications
        /// </summary>
        /// <param name="locateResponse">TradeHub LocateResponse</param>
        /// <param name="appId">Unique Application ID</param>
        public void LocateResponseReceived(LocateResponse locateResponse, string appId)
        {
            try
            {
                if (Logger.IsInfoEnabled)
                {
                    Logger.Info(
                        "Locate Response received from: " + appId + " for: " + locateResponse.OrderExecutionProvider,
                        _type.FullName, "LocateResponseReceived");
                }

                IOrderExecutionProvider orderExecutionProvider;
                if (_providersMap.TryGetValue(locateResponse.OrderExecutionProvider, out orderExecutionProvider))
                {
                    // Send Locate Response to Execution Provider
                    orderExecutionProvider.LocateMessageResponse(locateResponse);
                }
                else
                {
                    if (Logger.IsInfoEnabled)
                    {
                        Logger.Info(
                            "Order Execution Provider module not available for: " + locateResponse.OrderExecutionProvider,
                            _type.FullName, "LocateResponseReceived");
                    }
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _type.FullName, "LocateResponseReceived");
            }
        }
 /// <summary>
 /// Sends Locate message Accepted/Rejected response to Broker
 /// </summary>
 /// <param name="locateResponse"> </param>
 /// <returns></returns>
 public bool LocateMessageResponse(LocateResponse locateResponse)
 {
     try
     {
         return(true);
     }
     catch (Exception exception)
     {
         Logger.Error(exception, _type.FullName, "LocateMessageResponse");
         return(false);
     }
 }
Пример #4
0
        /// <summary>
        /// Sends Locate Response to the Order Execution Engine
        /// </summary>
        /// <param name="locateResponse">TradeHub Locate Response object</param>
        public void SendLocateResponse(LocateResponse locateResponse)
        {
            try
            {
                // Add Unique Application level ID to help identify the application from which the LocateResponse is generated
                locateResponse.StrategyId = _appId + "|" + locateResponse.OrderId;
                if (_asyncClassLogger.IsDebugEnabled)
                {
                    _asyncClassLogger.Debug("Sending locate response: " + locateResponse, _type.FullName, "SendLocateResponse");
                }

                // Send message though the Mq Server
                _mqServer.SendLocateResponse(locateResponse);
            }
            catch (Exception exception)
            {
                _asyncClassLogger.Error(exception, _type.FullName, "SendCancelOrderRequest");
            }
        }
Пример #5
0
        /// <summary>
        /// Sends Locate message Accepted/Rejected response to Broker
        /// </summary>
        /// <param name="locateResponse">TradeHub LocateResponse containing Acceptence/Rejection Info</param>
        /// <returns></returns>
        public bool LocateMessageResponse(LocateResponse locateResponse)
        {
            try
            {
                // Check whether the Order Execution session is connected or not
                if (IsConnected())
                {
                    BWOrder locateMsg;
                    if (_locateOrders.TryRemove(locateResponse.OrderId, out locateMsg))
                    {
                        if (locateResponse.Accepted)
                        {
                            _locateOrdersToLocalIdsMap.AddOrUpdate(locateMsg.Symbol, locateResponse.StrategyId,
                                                                   (key, value) => locateResponse.StrategyId);

                            // Accept Locate Message
                            locateMsg.AcceptLocate();

                            if (Logger.IsInfoEnabled)
                            {
                                Logger.Info("Accepted locate message: " + locateMsg.ToString(), _type.FullName, "LocateMessageResponse");
                            }
                            return(true);
                        }
                        else
                        {
                            if (Logger.IsInfoEnabled)
                            {
                                Logger.Info("Rejected locate message: " + locateMsg.ToString(), _type.FullName, "LocateMessageResponse");
                            }
                            return(true);
                        }
                    }
                }
                return(false);
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _type.FullName, "LocateMessageResponse");
                return(false);
            }
        }
        /// <summary>
        /// Sends Locate message Accepted/Rejected response to Broker
        /// </summary>
        /// <param name="locateResponse"> </param>
        /// <returns></returns>
        public bool LocateMessageResponse(LocateResponse locateResponse)
        {
            try
            {
                if (Logger.IsInfoEnabled)
                {
                    Logger.Info("Locate Response received: " + locateResponse, _type.FullName, "LocateMessageResponse");
                }

                LimitOrder locateMsg;
                if (_locateOrders.TryRemove(locateResponse.OrderId, out locateMsg))
                {
                    if (locateResponse.Accepted)
                    {
                        _locateOrdersToLocalIdsMap.AddOrUpdate(locateMsg.Security.Symbol, locateResponse.StrategyId,
                                                               (key, value) => locateResponse.StrategyId);

                        if (Logger.IsInfoEnabled)
                        {
                            Logger.Info("Accepted locate message: " + locateMsg.ToString(), _type.FullName, "LocateMessageResponse");
                        }
                        return(true);
                    }
                    else
                    {
                        if (Logger.IsInfoEnabled)
                        {
                            Logger.Info("Rejected locate message: " + locateMsg.ToString(), _type.FullName, "LocateMessageResponse");
                        }
                        return(true);
                    }
                }

                return(true);
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _type.FullName, "LocateMessageResponse");
                return(false);
            }
        }
Пример #7
0
        /// <summary>
        /// Called when LocateMessage is received from OEE
        /// </summary>
        /// <param name="locateMessage">TradeHub LimitOrder containing details for the LocateMessage</param>
        public override void OnLocateMessageArrived(LimitOrder locateMessage)
        {
            try
            {
                ConsoleWriter.WriteLine(ConsoleColor.Green, "Locate messaeg received : " + locateMessage);

                if (Logger.IsInfoEnabled)
                {
                    Logger.Info("Locate messaeg received : " + locateMessage, _type.FullName, "OnLocateMessageArrived");
                }

                // Create LocateRespone object
                LocateResponse locateResponse = new LocateResponse(locateMessage.OrderID, _orderExecutionProvider, true);

                // Sends Locate Response to OEP
                SendLocateResponse(locateResponse);
            }
            catch (Exception exception)
            {
                Logger.Error(exception, _type.FullName, "OnLocateMessageArrived");
            }
        }
 public bool LocateMessageResponse(LocateResponse locateResponse)
 {
     throw new NotImplementedException();
 }
 public bool LocateMessageResponse(LocateResponse locateResponse)
 {
     //not provided by Tradier
     throw new NotImplementedException();
 }
Пример #10
0
        public void LocateMessageTestCase()
        {
            bool logonArrived  = false;
            bool logoutArrived = false;
            bool connected     = false;
            bool locateArrived = false;

            ManualResetEvent manualLogonEvent     = new ManualResetEvent(false);
            ManualResetEvent manualLogoutEvent    = new ManualResetEvent(false);
            ManualResetEvent manualConnectedEvent = new ManualResetEvent(false);
            ManualResetEvent manualLocateEvent    = new ManualResetEvent(false);

            _executionEngineClient.ServerConnected += delegate()
            {
                connected = true;
                _executionEngineClient.SendLoginRequest(new Login()
                {
                    OrderExecutionProvider = TradeHubConstants.OrderExecutionProvider.Simulated
                });
                manualConnectedEvent.Set();
            };

            _executionEngineClient.LogonArrived +=
                delegate(string obj)
            {
                logonArrived = true;
                manualLogonEvent.Set();
            };

            _executionEngineClient.LocateMessageArrived +=
                delegate(LimitOrder obj)
            {
                locateArrived = true;

                LocateResponse locateResponse = new LocateResponse(obj.OrderID, TradeHubConstants.OrderExecutionProvider.Simulated, true);

                _executionEngineClient.SendLocateResponse(locateResponse);
                _executionEngineClient.SendLogoutRequest(new Logout {
                    OrderExecutionProvider = TradeHubConstants.OrderExecutionProvider.Simulated
                });
                manualLocateEvent.Set();
            };

            _executionEngineClient.LogoutArrived +=
                delegate(string obj)
            {
                logoutArrived = true;
                manualLogoutEvent.Set();
            };

            _executionEngineClient.Start();

            manualConnectedEvent.WaitOne(30000, false);
            manualLogonEvent.WaitOne(30000, false);
            manualLocateEvent.WaitOne(30000, false);
            manualLogoutEvent.WaitOne(30000, false);

            Thread.Sleep(1000);

            Assert.AreEqual(true, logonArrived, "Logon Arrived");
            Assert.AreEqual(true, locateArrived, "Locate Arrived");
            Assert.AreEqual(true, logoutArrived, "Logout Arrived");
        }