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()); } }
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); }
private void DistributerOnAPIMessageArrive(APIMessageData apiMessageData) { apiMesagesView.InvokeIfRequired(() => apiMesagesView.AddMessage(apiMessageData)); }