public void   WriteObject(Amf3Writer writer, object obj)
        {
            if (obj.GetType() != mType)
            {
                throw new Exception("Serializer type mismatch");
            }

            // begin write
            writer.WriteObjectHeader(mClassDef);

            // write all fields using reflection
            foreach (var field in mFieldList)
            {
                // get field value and write it
                object value = field.GetValue(obj);
                writer.Write(value);
            }

            // read all properties using reflection
            foreach (var property in mPropertyList)
            {
                // get property value and write it
                object value = property.GetValue(obj, null);
                writer.Write(value);
            }
        }
示例#2
0
			public int    delta;	// time since last span (in microseconds)

			#region IAmf3Serializable implementation
			public void Serialize(Amf3Writer writer)
			{
				writer.WriteObjectHeader(ClassDef);
				writer.Write(name);
				writer.Write(span);
				writer.Write(delta);
			}
示例#3
0
        public void Serialize(Amf3Writer writer)
        {
            writer.WriteObjectHeader(ClassDef, this);

            // write class properties
            for (int i = 0; i < Values.Length; i++)
            {
                writer.Write(Values[i]);
            }

            if (ClassDef.Dynamic)
            {
                // write dynamic properties
                // TODO: this is a little weird and shouldnt be here.. should be handled by the writer
                foreach (var kvp in DynamicProperties)
                {
                    writer.TypelessWrite(kvp.Key);
                    writer.Write(kvp.Value);
                }

                // write terminator
                writer.TypelessWrite("");
            }
        }
示例#4
0
        // this function parses json text, generates class definitions, and writes object graph to output stream
        public static void JsonStringToAmfStream(string jsonText, Stream outStream, bool generateClassDefinitions)
        {
            // parse json
            object jsonRoot = _root.JSON.parse(jsonText);

            // generate class definitions (optionally)
            if (generateClassDefinitions)
            {
                GenerateAndApplyClassDefinitions(jsonRoot);
            }

            // write to amf stream
            var amfWriter = new Amf3Writer(outStream);

            amfWriter.Write(jsonRoot);
        }
        public void   WriteObject(Amf3Writer writer, object obj)
        {
            var expando = (ExpandoObject)obj;

            writer.Write(expando);
        }
示例#6
0
 void IAmf3Serializable.Serialize(Amf3Writer writer)
 {
     writer.Write(this);
 }
示例#7
0
		public void Serialize(Amf3Writer writer)
		{
			writer.Write(this);
		}
示例#8
0
			public void Serialize(Amf3Writer writer)
			{
				writer.WriteObjectHeader(ClassDef);
				writer.Write(name);
				writer.Write(value);
			}
示例#9
0
			public void Serialize(Amf3Writer writer)
			{
				writer.WriteObjectHeader(ClassDef);
				writer.Write(time);
				writer.Write(numticks);
				writer.Write(ticktimes);
				writer.Write(callstack);
			}
示例#10
0
			public void Serialize(Amf3Writer writer)
			{
				writer.WriteObjectHeader(ClassDef);
				writer.Write(time);
				writer.Write(id);
			}
示例#11
0
			public void Serialize(Amf3Writer writer)
			{
				writer.WriteObjectHeader(ClassDef);
				writer.Write(xmin);
				writer.Write(xmax);
				writer.Write(ymin);
				writer.Write(ymax);
				writer.Write(name);
				writer.Write(symbolname);
				writer.Write(modified);
			}
示例#12
0
			public void Serialize(Amf3Writer writer)
			{
				writer.WriteObjectHeader(ClassDef);
				writer.Write(xmin);
				writer.Write(xmax);
				writer.Write(ymin);
				writer.Write(ymax);
			}
示例#13
0
 public void Serialize(Amf3Writer writer)
 {
     writer.Write(this);
 }
示例#14
0
		private static void WriteLogEntry(ref LogEntry entry, ref int timeBase, Amf3Writer output)
		{
			if (entry.Span == LogValue) {
				// emit Value
				output.WriteObjectHeader(Protocol.Value.ClassDef);
				output.Write(entry.Name);
				output.Write(entry.Value);
			} else 	if (entry.Span == LogTime) {
				// emit Time
				int time = ToMicroSeconds(entry.Time);
				int delta = time - timeBase; 
				timeBase = time;

				output.WriteObjectHeader(Protocol.Time.ClassDef);
				output.Write(entry.Name);
				output.Write(delta);
			} else {
				// emit Span or SpanValue
				// convert times to microseconds for output
				int time      = ToMicroSeconds(entry.Time);
				int beginTime = ToMicroSeconds(entry.Time - entry.Span);

				// compute span and delta in microseconds
				// this must be done this exact way to preserve rounding errors across spans
				// if not, the server may produce an error if a span exceeds its expected length
				int span  = time - beginTime;
				int delta = time - timeBase; 
				timeBase = time;

				if (entry.Value == null) {
					output.WriteObjectHeader(Protocol.Span.ClassDef);
					output.Write(entry.Name);
					output.Write(span);
					output.Write(delta);
				} else {
					output.WriteObjectHeader(Protocol.SpanValue.ClassDef);
					output.Write(entry.Name);
					output.Write(span);
					output.Write(delta);
					output.Write(entry.Value);
				}
			}
		}
示例#15
0
        public void Write(object obj)
        {
            if (obj == null)
            {
                Write(AmfTypeCode.Null);
                return;
            }

            if (obj is IAmfSerializable)
            {
                ((IAmfSerializable)obj).Serialize(this);
                return;
            }

            if (obj is string)
            {
                Write((string)obj);
                return;
            }

            if (obj is AmfObject)
            {
                Write((AmfObject)obj);
                return;
            }

            if (obj is DateTime)
            {
                Write((DateTime)obj);
                return;
            }

            if (obj is IList)
            {
                Write((IList)obj);
                return;
            }

            if (obj is Amf3Wrapper)
            {
                Write(AmfTypeCode.Amf3Data);
                amf3Writer.Write(((Amf3Wrapper)obj).Content);
                return;
            }

            if (obj is Amf3Array ||
                obj is Amf3Object)
            {
                Write(AmfTypeCode.Amf3Data);
                amf3Writer.Write(obj);
                return;
            }

            if (obj is bool)
            {
                Write((bool)obj);
                return;
            }

            if (obj is byte ||
                obj is sbyte ||
                obj is short ||
                obj is ushort ||
                obj is int ||
                obj is uint ||
                obj is long ||
                obj is ulong ||
                obj is float ||
                obj is double)
            {
                Write(Convert.ToDouble(obj));
                return;
            }

            throw new ArgumentException("obj: Cannot serialize instance of type " + obj.GetType().FullName);
        }
示例#16
0
		void IAmf3Serializable.Serialize(Amf3Writer writer)
		{
			writer.Write(this);
		}