예제 #1
0
        public void write(object obj, IProtocolFormatter formatter)
        {
            ReferenceCache referenceCache = formatter.GetReferenceCache();
            int            refId          = referenceCache.GetObjectId(obj);

            if (refId != -1)
            {
#if FULL_BUILD
                if (VectorUtils.IsVector(obj) && formatter is AmfV3Formatter)
                {
                    Type           collectionType = obj.GetType();
                    AmfV3Formatter amfV3Formatter = (AmfV3Formatter)formatter;

                    if (VectorUtils.isIntType(collectionType))
                    {
                        amfV3Formatter.WriteVarIntWithoutMarker(Datatypes.INT_VECTOR_V3);
                    }
                    else if (VectorUtils.isUIntType(collectionType))
                    {
                        amfV3Formatter.WriteVarIntWithoutMarker(Datatypes.UINT_VECTOR_V3);
                    }
                    else if (VectorUtils.isNumberType(collectionType))
                    {
                        amfV3Formatter.WriteVarIntWithoutMarker(Datatypes.DOUBLE_VECTOR_V3);
                    }
                    else
                    {
                        amfV3Formatter.WriteVarIntWithoutMarker(Datatypes.OBJECT_VECTOR_V3);
                    }

                    amfV3Formatter.WriteVarIntWithoutMarker(refId << 1);
                }
                else
#endif
                if (obj is IWebORBArrayCollection || obj is IDictionary)
                {
                    formatter.WriteObjectReference(refId);
                }
                else if (obj is ICollection || obj is Array || obj is IWebORBArray)
                {
                    formatter.WriteArrayReference(refId);
                }
            }
            else
            {
                referenceCache.AddObject(obj);
                formatter.getContextWriter().write(obj, formatter);
            }
        }
예제 #2
0
        public void write(object obj, IProtocolFormatter formatter)
        {
            ReferenceCache referenceCache = formatter.GetReferenceCache();
            int            refId          = referenceCache.GetStringId(obj);

            if (refId != -1)
            {
                formatter.WriteStringReference(refId);
            }
            else
            {
                referenceCache.AddString(obj);
                formatter.getContextWriter().write(obj, formatter);
            }
        }
예제 #3
0
        public virtual void write(object obj, IProtocolFormatter formatter)
        {
            ReferenceCache referenceCache = formatter.GetReferenceCache();
            DateTime       date           = (DateTime)obj;
            int            refId          = referenceCache.GetObjectId(date.ToUniversalTime());

            if (refId != -1)
            {
                formatter.WriteDateReference(refId);
            }
            else
            {
                referenceCache.AddObject(date.ToUniversalTime());
                formatter.getContextWriter().write(obj, formatter);
            }
        }
예제 #4
0
        public void write(object obj, IProtocolFormatter writer)
        {
            int            refId          = -1;
            ReferenceCache referenceCache = null;

            if (isReferenceable)
            {
                referenceCache = writer.GetReferenceCache();
                refId          = referenceCache.GetStringId(obj);
            }

            if (refId != -1)
            {
                writer.WriteStringReference(refId);
            }
            else
            {
                if (isReferenceable)
                {
                    referenceCache.AddString(obj);
                }

                //formatter.getContextWriter().write( obj, formatter );
                if (obj is string)
                {
                    writer.WriteString((string)obj);
                }
                else if (obj is StringBuilder)
                {
                    writer.WriteString(((StringBuilder)obj).ToString());
                }
                else if (obj is Char)
                {
                    writer.WriteString(obj.ToString());
                }
                else if (obj is char[])
                {
                    writer.WriteString(new String((char[])obj));
                }
            }
        }