public void Subscribe(string symbol, Action <string, IEnumerable <CutterData> > snapshotHandler, Action <string, CutterData> updateHandler)
        {
            CutterDataHeader dataHeader;

            if (!_dataHeaders.TryGetValue(symbol, out dataHeader))
            {
                throw new ApplicationException(string.Format("Invalid Symbol {0}", symbol));
            }

            var subscription = new CutterSubscription
            {
                Symbol          = symbol,
                DataHeader      = dataHeader,
                SnapshotHandler = snapshotHandler,
                UpdateHandler   = updateHandler
            };

            Log.InfoFormat("$$$$ Subscribe {0} ", symbol);

            lock (_subscriptionSync)
            {
                //OnStatus(DataStatus.SplashBegin);
                //OnStatus(DataStatus.SplashDisplay, string.Format("Loading {0} ...", symbol));

                PublishSnapshot(subscription);

                _subscriptions.Add(subscription);

                //OnStatus(DataStatus.SplashEnd);
            }
        }
Example #2
0
        private CutterData ProcessRow(CutterSubscription subscription, DataRow row)
        {
            var        dataHeader = subscription.DataHeader;
            CutterData data       = null;

            try
            {
                switch (dataHeader.Type)
                {
                case "Double":
                    data = SetDouble(dataHeader, row, subscription.LastData);
                    break;

                case "Error":
                    data = SetError(dataHeader, row);
                    break;

                case "Status":
                    data = SetStatus(dataHeader, row);
                    break;

                case "String":
                    data = SetString(dataHeader, row);
                    break;
                }

                subscription.LastData = data;

                if (Verbose)
                {
                    Log.InfoFormat("ProcessRow: {0}", data);
                }
            }
            catch (Exception ex)
            {
                Error++;
                if (dataHeader != null)
                {
                    Log.WarnFormat("Exception Column: {0}", dataHeader);
                }
                DumpRow("Exception", row);
                Log.WarnFormat("Exception Data: {0}", ex);
            }
            return(data);
        }
Example #3
0
        private void PublishUpdate(CutterSubscription subscription, DataRow row)
        {
            if (_uiContext == null)
            {
                return;
            }
            if (!subscription.DeliverRealtime)
            {
                return;
            }

            var cutterData = ProcessRow(subscription, row);

            if (cutterData == null)
            {
                return;
            }

            //subscription.UpdateHandler(subscription.Symbol, cutterData);
            //SynchronizationContext.Current.Post(x => subscription.UpdateHandler(subscription.Symbol, (CutterData)x), cutterData);
            _uiContext.Post(x => subscription.UpdateHandler(subscription.Symbol, (CutterData)x), cutterData);
        }
Example #4
0
        private void PublishSnapshot(CutterSubscription subscription)
        {
            Log.InfoFormat("$$$$ PublishSnapshot {0} ", subscription.Symbol);
            if (_uiContext == null)
            {
                return;
            }

            var series = new List <CutterData>();

            lock (_tableSync)
            {
                foreach (DataRow row in _table.Rows)
                {
                    var cutterData = ProcessRow(subscription, row);
                    if (cutterData == null)
                    {
                        continue;
                    }


                    //var time = cutterData.Date.Second;
                    //cutterData.Date = DateTime.Now.AddSeconds(time);

                    series.Add(cutterData);
                }
            }

            Log.InfoFormat("$$$$ PublishSnapshot {0}  Count={1}", subscription.Symbol, series.Count);

            //subscription.SnapshotHandler(subscription.Symbol, series);

            // SynchronizationContext.Current.Post(x => subscription.SnapshotHandler(subscription.Symbol, (IEnumerable<CutterData>)x), series);
            _uiContext.Post(x => subscription.SnapshotHandler(subscription.Symbol, (IEnumerable <CutterData>)x), series);

            subscription.DeliverRealtime = true;
        }