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);
        }
Example #2
0
        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();
                                }
                            }
                        }
                    }
                }
            }
        }
Example #3
0
        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
                    });
                }
            }
        }