Ejemplo n.º 1
0
        private void StoreVariable(string name, MondValue value)
        {
            if (name.Length > MaxVariableNameSize)
            {
                throw new MondRuntimeException($"Variable name '{name}' is too long");
            }

            var data = JsonModule.Serialize(_state, value);

            if (data.Length > MaxVariableContentSize)
            {
                throw new MondRuntimeException($"Variable '{name}' exceeds maximum size");
            }

            var cmd = new SqlCommand(_connection, _transaction, @"INSERT INTO mondbot.variables (name, type, data, version) VALUES (:name, :type, :data, 2)
                                                                  ON CONFLICT (name) DO UPDATE SET type = :type, data = :data, version = 2;")
            {
                ["name"] = name,
                ["type"] = (int)VariableType.Serialized,
                ["data"] = data
            };

            using (cmd)
            {
                cmd.ExecuteNonQuery().Wait();
            }
        }
Ejemplo n.º 2
0
        public static bool TrySerialize(MondState state, MondValue value, out MondValue serialized)
        {
            bool canSerialize = value[Serialize];

            if (!canSerialize)
            {
                serialized = MondValue.Undefined;
                return(false);
            }

            serialized = JsonModule.Serialize(state, value);
            return(true);
        }