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