private bool HandleSpecialApiMessages(APIMessageData data)
        {
            var errorCode = (EtwsErrorCode)data.ErrorCode;

            switch (errorCode)
            {
            case EtwsErrorCode.NoSecurityFound:
                var requestId = (int)data.AdditionalInfo;
                lock (SecurityDataDic)
                {
                    if (SecurityDataDic.ContainsKey(requestId))
                    {
                        Logger.Alert($"Request Id({requestId}) Not found. " +
                                     $" {SecurityDataDic[requestId].Data.GetContract()}");
                    }
                }
                return(true);

            case EtwsErrorCode.EntityIdNotFound:
                HandleEntityIdNotFound(data);
                return(true);

            case EtwsErrorCode.IbTWSConnectivityLost:
            case EtwsErrorCode.ConnectivityTwsServerBroken:
                if (_connectionStatus == ConnectionStatus.Connected)
                {
                    _connectionStatus = ConnectionStatus.Disconnected;
                    Consumer.Enqueue(new BrokerConnectionStatusMessage(
                                         ConnectionStatus.Disconnected, data));
                    Logger.Warn($"Connection status changed to disconnected:  {data}");
                }
                Consumer.Enqueue(data);
                return(true);

            case EtwsErrorCode.IbTWSConnectivityRestoredDataLost:
            case EtwsErrorCode.IbTWSConnectivityRestoredDataMaintained:
                if (_connectionStatus == ConnectionStatus.Disconnected)
                {
                    Consumer.Enqueue(new BrokerConnectionStatusMessage(ConnectionStatus.Connected, data));
                    Logger.Warn($"Connection status changed to connected: {data}");
                    Consumer.Enqueue(data);
                }
                ConnectivityIbTwsRestored?.Invoke();
                return(true);

            case EtwsErrorCode.MarketDataFarmConnected:
                Consumer.Enqueue(new BrokerConnectionStatusMessage(ConnectionStatus.Connected, data));
                ConnectivityIbTwsRestored?.Invoke();
                return(true);

            default:
                return(false);
            }
        }
        private void HandleEntityIdNotFound(APIMessageData data)
        {
            int requestId = (int)data.AdditionalInfo;

            lock (SecurityDataDic)
            {
                if (!SecurityDataDic.ContainsKey(requestId))
                {
                    return;
                }
                Logger.Debug($"Request Id({requestId}) removed from SecurityDataDic, {data} {SecurityDataDic[requestId]}");
                SecurityDataDic.Remove(requestId);
            }
        }
        public void error(int id, int errorCode, string errorMsg)
        {
            APIMessageData apiMessageData = new APIMessageData()
            {
                Message        = errorMsg,
                ErrorCode      = errorCode,
                AdditionalInfo = id,
                UpdateTime     = DateTime.Now
            };

            if (!HandleSpecialApiMessages(apiMessageData))
            {
                Consumer.Enqueue(apiMessageData);
                Logger.Info(apiMessageData.ToString());
            }
        }
Exemple #4
0
        public void AddMessage(APIMessageData apiMessageData)
        {
            APIMessageDataList.Add(apiMessageData);
            Action action = () =>
            {
                _apiMessageDataBindingSource.ResetBindings(false);
                //string.Format("{0:T}",DateTime.Now)
            };

            if (InvokeRequired)
            {
                Invoke(action);
            }
            else
            {
                action.Invoke();
            }
        }
 private void HandleApiMessage(APIMessageData data)
 {
     APIMessageArrive?.Invoke(data);
 }
Exemple #6
0
 private void DistributerOnAPIMessageArrive(APIMessageData apiMessageData)
 {
     apiMesagesView.InvokeIfRequired(() => apiMesagesView.AddMessage(apiMessageData));
 }