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