/// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="type">Type.</param>
 /// <param name="typeId">Type ID.</param>
 /// <param name="typeName">Type name.</param>
 /// <param name="userType">User type flag.</param>
 /// <param name="nameConverter">Name converter.</param>
 /// <param name="mapper">Mapper.</param>
 /// <param name="serializer">Serializer.</param>
 /// <param name="metaEnabled">Metadata enabled flag.</param>
 /// <param name="keepDeserialized">Whether to cache deserialized value in IPortableObject</param>
 /// <param name="affKeyFieldName">Affinity field key name.</param>
 /// <param name="typedHandler">Typed handler.</param>
 /// <param name="untypedHandler">Untyped handler.</param>
 public PortableFullTypeDescriptor(
     Type type,
     int typeId,
     string typeName,
     bool userType,
     IPortableNameMapper nameConverter,
     IPortableIdMapper mapper,
     IPortableSerializer serializer,
     bool metaEnabled,
     bool keepDeserialized,
     string affKeyFieldName,
     object typedHandler,
     PortableSystemWriteDelegate untypedHandler)
 {
     _type             = type;
     _typeId           = typeId;
     _typeName         = typeName;
     _userType         = userType;
     _nameConverter    = nameConverter;
     _mapper           = mapper;
     _serializer       = serializer;
     _metaEnabled      = metaEnabled;
     _keepDeserialized = keepDeserialized;
     _affKeyFieldName  = affKeyFieldName;
     _typedHandler     = typedHandler;
     _untypedHandler   = untypedHandler;
 }
Exemple #2
0
        /// <summary>
        /// Write field.
        /// </summary>
        /// <param name="fieldName">Field name.</param>
        /// <param name="typeId">Type ID.</param>
        /// <param name="val">Value.</param>
        /// <param name="handler">Handler.</param>
        private void WriteField(string fieldName, byte typeId, object val,
                                PortableSystemWriteDelegate handler)
        {
            int fieldId = PortableUtils.FieldId(_curTypeId, fieldName, _curConverter, _curMapper);

            WriteField(fieldId, val, handler);

            if (_curMetaHnd != null)
            {
                _curMetaHnd.OnFieldWrite(fieldId, fieldName, typeId);
            }
        }
Exemple #3
0
        /// <summary>
        /// Write field.
        /// </summary>
        /// <param name="fieldId">Field ID.</param>
        /// <param name="val">Value.</param>
        /// <param name="handler">Handler.</param>
        private void WriteField(int fieldId, object val, PortableSystemWriteDelegate handler)
        {
            CheckNotRaw();

            _stream.WriteInt(fieldId);

            int pos = _stream.Position;

            _stream.Seek(4, SeekOrigin.Current);

            Write(val, handler);

            WriteFieldLength(_stream, pos);
        }
        /**
         * <summary>Constructor.</summary>
         * <param name="flag0">Flag.</param>
         * <param name="writeHnd0">Write handler.</param>
         * <param name="writeMthd0">Generic write method.</param>
         * <param name="readMthd0">Generic read method.</param>
         */
        private PortableCollectionInfo(byte flag0, PortableSystemWriteDelegate writeHnd0,
                                       MethodInfo writeMthd0, MethodInfo readMthd0)
        {
            _flag     = flag0;
            _writeHnd = writeHnd0;

            if (writeMthd0 != null)
            {
                _writeFunc = DelegateConverter.CompileFunc <Action <object, PortableWriterImpl> >(null, writeMthd0, null,
                                                                                                  new[] { true, false, false });
            }

            if (readMthd0 != null)
            {
                _readFunc = DelegateConverter.CompileFunc <Func <PortableReaderImpl, object, object> >(null, readMthd0,
                                                                                                       null, new[] { false, true, false });
            }
        }
Exemple #5
0
        /// <summary>
        /// Try invoking predefined handler on object.
        /// </summary>
        /// <param name="typedHandler">Handler</param>
        /// <param name="untypedHandler">Not typed handler.</param>
        /// <param name="obj">Object.</param>
        /// <returns>True if handler was called.</returns>
        private bool InvokeHandler <T>(object typedHandler, PortableSystemWriteDelegate untypedHandler, T obj)
        {
            var typedHandler0 = typedHandler as PortableSystemTypedWriteDelegate <T>;

            if (typedHandler0 != null)
            {
                typedHandler0.Invoke(_stream, obj);

                return(true);
            }

            if (untypedHandler != null)
            {
                untypedHandler.Invoke(this, obj);

                return(true);
            }

            return(false);
        }
Exemple #6
0
        /// <summary>
        /// Add type.
        /// </summary>
        /// <param name="type">Type.</param>
        /// <param name="typeId">Type ID.</param>
        /// <param name="typeName">Type name.</param>
        /// <param name="userType">User type flag.</param>
        /// <param name="metaEnabled">Metadata enabled flag.</param>
        /// <param name="keepDeserialized">Whether to cache deserialized value in IPortableObject</param>
        /// <param name="nameMapper">Name mapper.</param>
        /// <param name="idMapper">ID mapper.</param>
        /// <param name="serializer">Serializer.</param>
        /// <param name="affKeyFieldName">Affinity key field name.</param>
        /// <param name="typedHandler">Typed handler.</param>
        /// <param name="untypedHandler">Untyped handler.</param>
        private void AddType(Type type, int typeId, string typeName, bool userType, bool metaEnabled,
                             bool keepDeserialized, IPortableNameMapper nameMapper, IPortableIdMapper idMapper,
                             IPortableSerializer serializer, string affKeyFieldName, object typedHandler,
                             PortableSystemWriteDelegate untypedHandler)
        {
            long typeKey = PortableUtils.TypeKey(userType, typeId);

            if (_idToDesc.ContainsKey(typeKey))
            {
                string type1 = _idToDesc[typeKey].Type != null ? _idToDesc[typeKey].Type.AssemblyQualifiedName : null;
                string type2 = type != null ? type.AssemblyQualifiedName : null;

                throw new PortableException("Conflicting type IDs [type1=" + type1 + ", type2=" + type2 +
                                            ", typeId=" + typeId + ']');
            }

            if (userType && _typeNameToDesc.ContainsKey(typeName))
            {
                throw new PortableException("Conflicting type name: " + typeName);
            }

            IPortableTypeDescriptor descriptor =
                new PortableFullTypeDescriptor(type, typeId, typeName, userType, nameMapper, idMapper, serializer,
                                               metaEnabled, keepDeserialized, affKeyFieldName, typedHandler, untypedHandler);

            if (type != null)
            {
                _typeToDesc[type] = descriptor;
            }

            if (userType)
            {
                _typeNameToDesc[typeName] = descriptor;
            }

            _idToDesc[typeKey] = descriptor;
        }
        /**
         * <summary>Constructor.</summary>
         * <param name="flag0">Flag.</param>
         * <param name="writeHnd0">Write handler.</param>
         * <param name="writeMthd0">Generic write method.</param>
         * <param name="readMthd0">Generic read method.</param>
         */
        private PortableCollectionInfo(byte flag0, PortableSystemWriteDelegate writeHnd0,
            MethodInfo writeMthd0, MethodInfo readMthd0)
        {
            _flag = flag0;
            _writeHnd = writeHnd0;

            if (writeMthd0 != null)
                _writeFunc = DelegateConverter.CompileFunc<Action<object, PortableWriterImpl>>(null, writeMthd0, null,
                    new[] {true, false, false});

            if (readMthd0 != null)
                _readFunc = DelegateConverter.CompileFunc<Func<PortableReaderImpl, object, object>>(null, readMthd0, 
                    null, new[] {false, true, false});
        }
Exemple #8
0
 /// <summary>
 /// Add predefined type.
 /// </summary>
 /// <param name="type">Type.</param>
 /// <param name="typeId">Type ID.</param>
 /// <param name="typedHandler">Typed handler.</param>
 /// <param name="untypedHandler">Untyped handler.</param>
 private void AddPredefinedType(Type type, int typeId, object typedHandler,
                                PortableSystemWriteDelegate untypedHandler)
 {
     AddType(type, typeId, GetTypeName(type), false, false, false, null, null, null, null, typedHandler,
             untypedHandler);
 }