public BenchmarkRuleAction() { Expression <Action <IContext, string, int, decimal> > expression = (c, s, i, d) => PerformAction(c, s, i, d); var element = Element.Action(expression); var map = IndexMap.CreateMap(element.Imports, element.Imports); _ruleAction = ExpressionCompiler.CompileAction(element, element.Imports.ToList(), new List <DependencyElement>(), map); var compiledRule = new CompiledRule(null, element.Imports, new [] { _ruleAction }, null, map); var tuple = ToTuple("abcd", 4, 1.0m); var activation = new Activation(compiledRule, tuple); _actionContext = new ActionContext(Context.Session, activation, CancellationToken.None); }
private async Task SendResponse(CompiledRule rule, ISocketMessageChannel channel) { var msg = rule.GetRandomMessage(); if (msg == null) { return; } // looks as if the bot is typing var isTypingState = channel.EnterTypingState(); // calculate some average typing speed // float kph = 15000; // 15k keystrokes per hour // float kpm = kph / 60; // keystrokes per minute // float kps = kpm / 60; // keystrokes per second. float keysPerSec = 6.0f; float timeToWait = (1f / keysPerSec) * msg.Length; await Task.Delay(TimeSpan.FromSeconds(timeToWait)); isTypingState.Dispose(); msg = placeholderHandler.Replace(msg, this); await channel.SendMessageAsync(msg); }
public void AddOrUpdateCompiledRule(string compiledRuleKey, CompiledRule compiledRule) { _compileRules.AddOrUpdate(compiledRuleKey, compiledRule, (k, v) => compiledRule); }