/// <summary> /// Records an event using the GameEvent class. /// </summary> /// <param name="gameEvent">Event to record.</param> /// <returns><see cref="EventAction"/> for this event</returns> /// <exception cref="System.Exception">Thrown if the SDK has not been started.</exception> public EventAction RecordEvent <T>(T gameEvent) where T : GameEvent <T> { return(delegated.RecordEvent(gameEvent)); }
internal virtual bool Evaluate(GameEvent evnt) { if (evnt.Name != eventName) { return(false); } var parameters = evnt.parameters.AsDictionary(); var stack = new Stack <object>(); foreach (var token in condition) { if (token.ContainsKey("o")) { string op = (string)token["o"]; op = op.ToLower(); object right = stack.Pop(); object left = stack.Pop(); try{ if (right is bool) { if (left is bool) { stack.Push(BOOLS[op]((bool)left, (bool)right)); } else { Logger.LogWarning( left + " and " + right + " have mismatched types"); return(false); } } else if (right is long) { if (left is int) { stack.Push(LONGS[op]((int)left, (long)right)); } else if (left is long) { stack.Push(LONGS[op]((long)left, (long)right)); } else { Logger.LogWarning( left + " and " + right + " have mismatched types"); return(false); } } else if (right is double) { if (left is float) { stack.Push(DOUBLES[op]((float)left, (double)right)); } else if (left is double) { stack.Push(DOUBLES[op]((double)left, (double)right)); } else { Logger.LogWarning( left + " and " + right + " have mismatched types"); return(false); } } else if (right is string) { if (left is string) { stack.Push(STRINGS[op]((string)left, (string)right)); } else { Logger.LogWarning( left + " and " + right + " have mismatched types"); return(false); } } else if (right is DateTime) { if (left is string) { stack.Push(DATES[op]( DateTime.ParseExact( (string)left, Settings.EVENT_TIMESTAMP_FORMAT, System.Globalization.CultureInfo.InvariantCulture), (DateTime)right)); } else { Logger.LogWarning( left + " and " + right + " have mismatched types"); return(false); } } else { Logger.LogWarning("Unexpected type for " + right); return(false); } } catch (KeyNotFoundException) { Logger.LogWarning(string.Format( "Failed to find operation {0} for {1} and {2}", op, left, right)); return(false); } catch (FormatException) { Logger.LogWarning("Failed converting parameter " + left + " to DateTime"); return(false); } } else if (token.ContainsKey("p")) { var param = (string)token["p"]; if (parameters.ContainsKey(param)) { stack.Push(parameters[param]); } else { Logger.LogWarning("Failed to find " + param + " in event params"); return(false); } } else if (token.ContainsKey("b")) { stack.Push((bool)token["b"]); } else if (token.ContainsKey("i")) { // ints are double precision in JSON stack.Push((long)token["i"]); } else if (token.ContainsKey("f")) { var value = token["f"]; // serialiser inserts a whole double as a long if (value is long) { stack.Push((double)(long)token["f"]); } else { // floats are double precision in JSON stack.Push((double)token["f"]); } } else if (token.ContainsKey("s")) { stack.Push((string)token["s"]); } else if (token.ContainsKey("t")) { try{ stack.Push(DateTime.Parse((string)token["t"], null)); } catch (FormatException) { Logger.LogWarning("Failed converting " + token["t"] + " to DateTime"); return(false); } } else { stack.Push(token); } } var result = stack.Count == 0 || (stack.Pop() as bool? ?? false); if (result) { // Default to true if no conditions exist bool triggerConditionsReached = campaignTriggerConditions.Count == 0; // Only one condition needs to be true to flip conditions to true this.executionCountManager.incrementExecutionCount(this.variantId); foreach (TriggerCondition campaignTriggerCondition in campaignTriggerConditions) { if (campaignTriggerCondition.CanExecute()) { triggerConditionsReached = true; } } // If none reached return false if (!triggerConditionsReached) { return(false); } if (limit != -1 && runs >= limit) { return(false); } runs++; var eventTriggeredActionEvent = new GameEvent("ddnaEventTriggeredAction") .AddParam("ddnaEventTriggeredCampaignID", campaignId) .AddParam("ddnaEventTriggeredCampaignPriority", priority) .AddParam("ddnaEventTriggeredVariantID", variantId) .AddParam("ddnaEventTriggeredActionType", GetAction()) .AddParam("ddnaEventTriggeredSessionCount", runs); if (campaignName != null) { eventTriggeredActionEvent.AddParam("ddnaEventTriggeredCampaignName", campaignName); } if (variantName != null) { eventTriggeredActionEvent.AddParam("ddnaEventTriggeredVariantName", variantName); } ddna.RecordEvent(eventTriggeredActionEvent); } return(result); }
/// <summary> /// Records an event using the GameEvent class. /// </summary> /// <param name="gameEvent">Event to record.</param> /// <exception cref="System.Exception">Thrown if the SDK has not been started.</exception> public void RecordEvent <T>(T gameEvent) where T : GameEvent <T> { delegated.RecordEvent(gameEvent); }