示例#1
0
 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;
 }
示例#2
0
        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);
        }
示例#3
0
 public CallSite(MySynchronizedTypeInfo owner, uint id, MethodInfo info, CallSiteFlags flags)
 {
     OwnerType     = owner;
     Id            = id;
     MethodInfo    = info;
     CallSiteFlags = flags;
 }
示例#4
0
 public CallSite(MySynchronizedTypeInfo owner, uint id, MethodInfo info, CallSiteFlags flags)
 {
     OwnerType = owner;
     Id = id;
     MethodInfo = info;
     CallSiteFlags = flags;
 }
示例#5
0
 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;
 }
示例#6
0
        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 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);
        }
示例#8
0
        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();
            }
        }
示例#9
0
 public bool TryGet(Type type, out MySynchronizedTypeInfo typeInfo)
 {
     return(m_typeLookup.TryGetValue(type, out typeInfo));
 }
示例#10
0
 public bool TryGet(Type type, out MySynchronizedTypeInfo typeInfo)
 {
     return m_typeLookup.TryGetValue(type, out typeInfo);
 }