/// <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); }
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); } } }
/// <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; }