Esempio n. 1
0
        /// <summary>
        /// Returns true if the given RuntimeTypeModel contains a definition for the given type.
        /// </summary>
        private static bool ContainsType(RuntimeTypeModel model, Type type)
        {
            bool emit      = !type.IsNullableType();
            bool fastCheck = model.IsDefined(type);

            // DEBUGGING: comment this if statement out if there are protobuf-net related issues
            if (emit)
            {
                return(fastCheck);
            }

            foreach (MetaType metaType in model.GetTypes())
            {
                if (metaType.Type == type)
                {
                    if (emit && fastCheck != true)
                    {
                        UnityEngine.Debug.Log("Fast check failed for " + type.CSharpName() + " (nullabe? " + type.IsNullableType() + ")!");
                    }
                    return(true);
                }
            }

            if (emit && fastCheck != false)
            {
                UnityEngine.Debug.Log("Fast check failed for " + type.CSharpName() + " (nullabe? " + type.IsNullableType() + ")!");
            }
            return(false);
        }
Esempio n. 2
0
 public static void AddMessageType(Type type)
 {
     if (_protobufModel.IsDefined(type))
     {
         return;                 //already defined
     }
     AddTypeToModel(type);
 }
    private static void AddProperties(RuntimeTypeModel model, Type type)
    {
        var metaType = model.Add(type, true);

        foreach (var property in type.GetProperties().OrderBy(x => x.Name))
        {
            metaType.Add(property.Name);
            var propertyType = property.PropertyType;
            if (!IsBuiltinType(propertyType) &&
                !model.IsDefined(propertyType) &&
                propertyType.GetProperties().Length > 0)
            {
                AddProperties(model, propertyType);
            }
        }
    }
Esempio n. 4
0
        /// <summary>
        /// Inejct contracts for origodb core types into given RuntimeTypeModel. Can safely be called multiple times.
        /// </summary>
        /// <param name="typeModel"></param>
        public static void RegisterFrameworkTypes(this RuntimeTypeModel typeModel)
        {
            if (typeModel.IsDefined(typeof(Command)))
            {
                return;
            }

            typeModel.Add(typeof(Command), true);

            var journalEntry = typeModel.Add(typeof(JournalEntry), false)
                               .Add(1, "Id")
                               .Add(2, "Created");

            journalEntry.UseConstructor = false;

            journalEntry.AddSubType(3, typeof(JournalEntry <Command>));
            journalEntry.AddSubType(4, typeof(JournalEntry <RollbackMarker>));
            journalEntry.AddSubType(5, typeof(JournalEntry <ModelCreated>));


            typeModel.Add(typeof(JournalEntry <Command>), false)
            .Add(1, "Item")
            .UseConstructor = false;

            typeModel.Add(typeof(JournalEntry <ModelCreated>), false)
            .Add(1, "Item")
            .UseConstructor = false;

            typeModel.Add(typeof(JournalEntry <RollbackMarker>), false)
            .Add(1, "Item")
            .UseConstructor = false;

            typeModel.Add(typeof(ModelCreated), false)
            .Add(1, "Type")
            .UseConstructor = false;

            typeModel.Add(typeof(RollbackMarker), false)
            .UseConstructor = false;
        }