public async Task ProcessStreamItem(StreamRule rule) { StreamRule currentRule = null; bool found = _rules.TryGetValue(rule.Id, out currentRule); switch (rule.Operation) { case StreamOperation.Insert: case StreamOperation.Update: if (!found || currentRule.Compare(rule) != 0) { if (_persistenceLayer != null) { await _persistenceLayer.ProcessStreamItem(rule); } } _rules[rule.Id] = rule; break; case StreamOperation.Delete: if (found) { if (_persistenceLayer != null) { await _persistenceLayer.ProcessStreamItem(rule); } _rules.TryRemove(rule.Id, out currentRule); } break; default: break; } }
private async Task InsertRule(StreamRule rule) { var CallSPCmd = new SqlCommand(); await DoSqlCmd(CallSPCmd, () => { var Id = int.Parse(rule.Id.Split('-')[1]); var PortfolioId = int.Parse(rule.PortfolioId.Split(':')[1]); CallSPCmd.CommandText = "exec InsertRule @Id, @PortfolioId, @Expression, @Timestamp"; CallSPCmd.Parameters.Add("@Id", SqlDbType.Int).Value = PortfolioId * 1000000 + Id; CallSPCmd.Parameters.Add("@PortfolioId", SqlDbType.Int).Value = PortfolioId; CallSPCmd.Parameters.Add("@Expression", SqlDbType.NVarChar).Value = rule.Expression; CallSPCmd.Parameters.Add("@Timestamp", SqlDbType.DateTime).Value = rule.Date; }); }
public virtual Task RuleUpdated(StreamRule streamItem) { return(Task.CompletedTask); }
public override Task RuleUpdated(StreamRule streamItem) { return(_dataLayer.ProcessStreamItem(streamItem)); }