Exemple #1
0
        /// <summary>
        /// Must be used ONLY before bot cycle started as no parent item is accepted. Usually used while feeding by input file.
        /// </summary>
        /// <param name="item_type"></param>
        /// <param name="field_value_pairs"></param>
        /// <returns></returns>
        static internal bool Add2QueueBeforeStart(InputItemQueue queue, Type item_type, Dictionary <string, string> field2value)
        {
            InputItem item = (InputItem)FormatterServices.GetUninitializedObject(item_type);
            Dictionary <string, FieldInfo> serialized_field_name2serialized_field_fis = item_types2serialized_field_names2serialized_field_fi[item_type];

            foreach (string field in field2value.Keys)
            {
                try
                {
                    FieldInfo fi = serialized_field_name2serialized_field_fis[field];
                    fi.SetValue(item, Convert.ChangeType(field2value[field], fi.FieldType));
                }
                catch (Exception e)
                {
                    throw new Exception("Field '" + field + "' does not exist.\n" + e.Message);
                }
            }

            ConstructorInfo ci;

            if (item_types2constructor_info.TryGetValue(item_type, out ci))
            {
                ci.Invoke(item, new object[] {});
            }

            typeof(Item).GetField("__Id", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(item, Session.This.GetNewItemId());
            return(item.add2queue(queue));
        }
Exemple #2
0
        internal static InputItem Restore(InputItemQueue queue, Type item_type, string item_seed, int item_id, InputItem parent_item, Dictionary <string, TagItem> field2tag_items)
        {
            InputItem item = (InputItem)Item.Restore(item_type, item_seed, item_id);

            item.set_parent_members(parent_item);
            foreach (KeyValuePair <string, TagItem> kv in field2tag_items)
            {
                item_type.GetField(kv.Key).SetValue(item, kv.Value);
            }
            item.add2queue(queue);
            return(item);
        }