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); }
public static void CASES() { int x_choose; try { x_choose = Convert.ToInt32(Console.ReadLine()); if (x_choose > 26 || x_choose < 1) { Console.WriteLine("\t\t\tEntered number is out of scope!"); Console.WriteLine("\t\t\tPlease, reenter number!"); CASES(); } else { switch (x_choose) { case 1: //Working with variables { Console.BackgroundColor = ConsoleColor.Green; Console.Clear(); Console.ForegroundColor = ConsoleColor.Black; Console.WriteLine("1\t\t\t\tVARIABLE TYPES & LITERALS & CASTING and TYPE CONVERSIONS"); Console.WriteLine("1_1\tLITERALS"); Console.WriteLine("1_2\tVARIABLE TYPES"); Console.WriteLine("1_3\tCASTING & TYPE CONVERSIONS"); VARIABLES vars = new VARIABLES(); vars.VARIABLES_TYPES_CAST_M(); break; } case 2: //Basic operations { Console.BackgroundColor = ConsoleColor.Yellow; Console.Clear(); Console.ForegroundColor = ConsoleColor.Black; OPERATORS oper = new OPERATORS(); oper.OPERATIONS(); break; } case 3: //Conditions (IF/ELSE, SWITCH/CASE) { Console.BackgroundColor = ConsoleColor.DarkGreen; Console.Clear(); Console.ForegroundColor = ConsoleColor.White; CONDITIONS cond = new CONDITIONS(); cond.CONDITIONS_M(); break; } case 4: //Loops (FOR/WHILE/DO WHILE) { Console.BackgroundColor = ConsoleColor.Cyan; Console.Clear(); Console.ForegroundColor = ConsoleColor.DarkBlue; LOOPS loop_block = new LOOPS(); loop_block.LOOPS_M(); break; } case 5: //ARRAYS { Console.BackgroundColor = ConsoleColor.DarkMagenta; Console.Clear(); Console.ForegroundColor = ConsoleColor.White; ARRAYS arr = new ARRAYS(); arr.ARRAYS_M(); break; } case 6: //Multi-dimensional arrays { Console.BackgroundColor = ConsoleColor.DarkGray; Console.Clear(); Console.ForegroundColor = ConsoleColor.Yellow; MULTI_ARRAYS arr_m = new MULTI_ARRAYS(); arr_m.MULTI_ARRAYS_M(); break; } case 7: //Lists - we don't know number of elements, uses more memory { Console.BackgroundColor = ConsoleColor.DarkBlue; Console.Clear(); Console.ForegroundColor = ConsoleColor.White; LISTS list = new LISTS(); list.LISTS_M(); break; } case 8: //Strings { STRINGS str = new STRINGS(); str.STRINGS_M(); break; } case 9: //Try & Catch { TRY_CATCH tr = new TRY_CATCH(); tr.TRY_CATCH_M(); break; } case 10: //Object & Classes, Properties, GET/SETS (for private) { CLASSES_OBJECTS clas = new CLASSES_OBJECTS(); clas.CLASSES_OBJECTS_M(); break; } case 11: //METHODS, FUNCTIONS, { METHODS_FUNCTIONS mth = new METHODS_FUNCTIONS(); mth.METHODS_FUNCTIONS_M(); break; } case 12: //INHERITANCE, AS/IS, Virtual methods (From External Class file) { INHERITANCE_ASIS_VIRT inh = new INHERITANCE_ASIS_VIRT(); inh.INHERITANCE_ASIS_M(); break; } case 13: { MULTI_INHERITANCE m_inh = new MULTI_INHERITANCE(); m_inh.MULTI_INHERITANCE_M(); break; } case 14: { RELOAD_METHODS_OPERAT_TYPES reloading = new RELOAD_METHODS_OPERAT_TYPES(); reloading.RELOAD_METHODS_OPERAT_TYPES_M(); break; } case 15: { ENUMS enums = new ENUMS(); enums.ENUMS_M(); break; } case 16: { STRUCTURES str = new STRUCTURES(); str.STRUCTURES_M(); break; } case 17: { TUPLES tupl = new TUPLES(); tupl.TUPLES_M(); break; } case 18: { REFERENCES refer = new REFERENCES(); refer.REFERENCES_M(); break; } case 19: { SHADOWING_HIDING_METHODS shad = new SHADOWING_HIDING_METHODS(); shad.SHADOWING_HIDING_METHODS_M(); break; } case 20: { REGUL_EXP_IO reg = new REGUL_EXP_IO(); reg.REGUL_EXP_IO_M(); break; } case 21: { PREPROCESSOR_DIRECTIVES prep = new PREPROCESSOR_DIRECTIVES(); prep.PREPROCESSOR_DIRECTIVES_M(); break; } case 22: { NAMESPACES nam = new NAMESPACES(); nam.NAMESPACES_M(); break; } case 23: { NullableTypesExamples nullab = new NullableTypesExamples(); nullab.NULLABLES_M(); break; } case 24: { IDENTIFIERS iden = new IDENTIFIERS(); iden.IDENTIFIERS_M(); break; } case 25: { FILE_SYSTEM files = new FILE_SYSTEM(); files.FILE_SYSTEM_M(); break; } case 26: { LINQ link = new LINQ(); link.LINQ_M(); break; } } } } catch (Exception x) { Console.WriteLine("INFORMATIVE DESCRIPTION OF ERROR: \n " + x); CheckReturnToContent(); } }