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); } }
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); }
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); }
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; }