public int RequestRealTimeData(RealTimeDataRequest request) { if (!request.Instrument.ID.HasValue) { throw new Exception("ID doesn't have value."); } _requestIDs++; var requestGrouping = new RequestGrouping { Instrument = request.Instrument, Frequency = request.Frequency }; var requestList = _connectedRequests.GetOrAdd(requestGrouping, new ConcurrentDictionary <int, RealTimeDataRequest>()); bool success = requestList.TryAdd(_requestIDs, request); lock (_historicalDataRequestLock) { int historicalRequestId; if (!_historicalRequests.TryGetValue(requestGrouping, out historicalRequestId)) { var asyncCall = new RequestHistoricalDataCaller(RequestHistoricalData); asyncCall.BeginInvoke(requestGrouping, null, null); } } Timer timer; bool result = _timers.TryGetValue(request.Frequency, out timer); if (result) { // start timer if not is already started: if (!timer.Enabled) { timer.Start(); } } ShortTimerController controller; result = _shortTimers.TryGetValue(request.Frequency, out controller); if (result) { if (!controller.Active) { controller.Active = true; // start simulatetimer controller.AsyncResult = controller.Caller.BeginInvoke(controller, request.Frequency, null, null); } } return(_requestIDs); }
public void CancelRealTimeData(int requestID) { RealTimeDataRequest request = null; foreach (var key1Request in _connectedRequests) { if (key1Request.Value.TryGetValue(requestID, out request)) { break; } } if (request == null) { // kein Request gefunden ... return; } var requestGrouping = new RequestGrouping { Instrument = request.Instrument, Frequency = request.Frequency }; RealTimeDataRequest dummy; Timer timer; ConcurrentDictionary <int, RealTimeDataRequest> dummy2; if (_connectedRequests[requestGrouping].TryRemove(requestID, out dummy)) { if (_connectedRequests[requestGrouping].Count == 0) { if (_connectedRequests.TryRemove(requestGrouping, out dummy2)) { if (_connectedRequests.Count == 0) { if (_timers.TryGetValue(request.Frequency, out timer)) { if (timer.Enabled) { timer.Stop(); } } } } } } }
private void RequestHistoricalData(RequestGrouping request) { lock (_historicalDataRequestLock) { _historicalRequestIDs++; if (_historicalRequests.TryAdd(request, _historicalRequestIDs)) { _historicalDataSource.RequestHistoricalData(new HistoricalDataRequest { Instrument = request.Instrument, Frequency = request.Frequency, DataLocation = _dataLocation, StartingDate = _startingDate, EndingDate = _endingDate, RTHOnly = _rthOnly, SaveDataToStorage = _saveDataToStorage, RequestID = _historicalRequestIDs }); } } }