public override void Serialize(SerializationContext context) { if (MessageHeader.MessageType == MessageType.Amf0Data) { var sc = new Amf.Serialization.Amf0.SerializationContext(context.WriteBuffer); foreach (var data in Data) { context.Amf0Writer.WriteValueBytes(data, sc); } } else { var sc = new Amf.Serialization.Amf3.SerializationContext(context.WriteBuffer); foreach (var data in Data) { context.Amf3Writer.WriteValueBytes(data, sc); } } }
public void SerializeAmf0(SerializationContext context) { using (var writeContext = new Amf.Serialization.Amf0.SerializationContext(context.WriteBuffer)) { if (ProcedureName == null) { ProcedureName = GetType().GetCustomAttribute <RtmpCommandAttribute>().Name; } Debug.Assert(!string.IsNullOrEmpty(ProcedureName)); context.Amf0Writer.WriteBytes(ProcedureName, writeContext); context.Amf0Writer.WriteBytes(TranscationID, writeContext); context.Amf0Writer.WriteValueBytes(CommandObject, writeContext); var optionArguments = GetType().GetProperties().Where(p => p.GetCustomAttribute <OptionalArgumentAttribute>() != null).ToList(); foreach (var optionArgument in optionArguments) { context.Amf0Writer.WriteValueBytes(optionArgument.GetValue(this), writeContext); } } }