protected void DoCleanOldSecurities() { while (true) { Thread.Sleep(_SECURITIES_REMOVEL_PERIOD);//Once every hour lock (tLock) { try { List <int> keysToRemove = new List <int>(); foreach (int key in ContractsTimeStamps.Keys) { DateTime timeStamp = ContractsTimeStamps[key]; if ((DateTime.Now - timeStamp).Hours >= _MAX_ELAPSED_HOURS_FOR_MARKET_DATA) { keysToRemove.Add(key); } } foreach (int keyToRemove in keysToRemove) { ContractsTimeStamps.Remove(keyToRemove); ActiveSecuritiesQuotes.Remove(keyToRemove); } } catch (Exception ex) { DoLog(string.Format("@{1}: There was an error cleaning old securities from market data flow error={0} ", ex.Message, GetConfig().Name), Main.Common.Util.Constants.MessageType.Error); } } } }
protected void RemoveSymbol(string symbol) { List <int> keysToRemove = new List <int>(); foreach (int key in ActiveSecuritiesQuotes.Keys) { Security sec = ActiveSecuritiesQuotes[key]; if (sec.Symbol == symbol) { keysToRemove.Add(key); } } foreach (int keyToRemove in keysToRemove) { ContractsTimeStamps.Remove(keyToRemove); ActiveSecuritiesQuotes.Remove(keyToRemove); } }
protected CMState ProcessMarketDataRequestQuotes(Wrapper wrapper) { string symbol = (string)wrapper.GetField(MarketDataRequestField.Symbol); int mdReqId = (int)wrapper.GetField(MarketDataRequestField.MDReqId); Security sec = new Security() { Symbol = symbol }; lock (ActiveSecuritiesQuotes) { ActiveSecuritiesQuotes.Add(mdReqId, sec); } Thread RequestMarketDataThread = new Thread(DoRequestMarketDataQuotes); RequestMarketDataThread.Start(symbol); return(CMState.BuildSuccess()); }