public MySynchronizedTypeInfo Register(Type type) { MySynchronizedTypeInfo result; if (!m_typeLookup.TryGetValue(type, out result)) { MySynchronizedTypeInfo baseType = CreateBaseType(type); bool isReplicated = IsReplicated(type); if (isReplicated || HasEvents(type)) { result = new MySynchronizedTypeInfo(type, new TypeId((uint)m_idToType.Count), baseType, isReplicated); m_idToType.Add(result); m_hashLookup.Add(result.TypeHash, result); m_typeLookup.Add(type, result); m_staticEventTable.AddStaticEvents(type); } else if (IsSerializableClass(type)) // Stored only for dynamic serialization. { result = new MySynchronizedTypeInfo(type, new TypeId((uint)m_idToType.Count), baseType, isReplicated); m_idToType.Add(result); m_hashLookup.Add(result.TypeHash, result); m_typeLookup.Add(type, result); } else if (baseType != null)// Base type has some events { result = baseType; m_typeLookup.Add(type, result); } else // Not even base type has some events { result = null; } } return result; }
public MySynchronizedTypeInfo Register(Type type) { MySynchronizedTypeInfo result; if (!m_typeLookup.TryGetValue(type, out result)) { MySynchronizedTypeInfo baseType = CreateBaseType(type); bool isReplicated = IsReplicated(type); if (isReplicated || HasEvents(type)) { result = new MySynchronizedTypeInfo(type, new TypeId((uint)m_idToType.Count), baseType, isReplicated); m_idToType.Add(result); m_hashLookup.Add(result.TypeHash, result); m_typeLookup.Add(type, result); m_staticEventTable.AddStaticEvents(type); } else if (IsSerializableClass(type)) // Stored only for dynamic serialization. { result = new MySynchronizedTypeInfo(type, new TypeId((uint)m_idToType.Count), baseType, isReplicated); m_idToType.Add(result); m_hashLookup.Add(result.TypeHash, result); m_typeLookup.Add(type, result); } else if (baseType != null)// Base type has some events { result = baseType; m_typeLookup.Add(type, result); } else // Not even base type has some events { result = null; } } return(result); }
public CallSite(MySynchronizedTypeInfo owner, uint id, MethodInfo info, CallSiteFlags flags) { OwnerType = owner; Id = id; MethodInfo = info; CallSiteFlags = flags; }
public CallSite(MySynchronizedTypeInfo owner, uint id, MethodInfo info, CallSiteFlags flags, Action <T1, T2, T3, T4, T5, T6, T7> handler, SerializeDelegate <T1, T2, T3, T4, T5, T6, T7> serializer, Func <T1, T2, T3, T4, T5, T6, T7, bool> validator) : base(owner, id, info, flags) { Handler = handler; Serializer = serializer; Validator = validator; }
public MySynchronizedTypeInfo(Type type, TypeId id, MySynchronizedTypeInfo baseType, bool isReplicated) { Type = type; TypeId = id; TypeHash = GetHashFromType(type); TypeName = type.Name; FullTypeName = type.FullName; BaseType = baseType; IsReplicated = isReplicated; EventTable = new MyEventTable(this); }
public MyEventTable(MySynchronizedTypeInfo type) { Type = type; // Copy base type event table so we don't have to crawl hierarchy during every event invocation. if (type != null && type.BaseType != null) { m_idToEvent = new Dictionary <uint, CallSite>(type.BaseType.EventTable.m_idToEvent); m_methodInfoLookup = new Dictionary <MethodInfo, CallSite>(type.BaseType.EventTable.m_methodInfoLookup); m_associateObjectLookup = new Dictionary <object, CallSite>(type.BaseType.EventTable.m_associateObjectLookup); } else { m_idToEvent = new Dictionary <uint, CallSite>(); m_methodInfoLookup = new Dictionary <MethodInfo, CallSite>(); m_associateObjectLookup = new Dictionary <object, CallSite>(); } // Register event from this type if (Type != null) { RegisterEvents(); } }
public bool TryGet(Type type, out MySynchronizedTypeInfo typeInfo) { return(m_typeLookup.TryGetValue(type, out typeInfo)); }
public bool TryGet(Type type, out MySynchronizedTypeInfo typeInfo) { return m_typeLookup.TryGetValue(type, out typeInfo); }