本文整理汇总了C#中AMFReader.ReadData方法的典型用法代码示例。如果您正苦于以下问题:C# AMFReader.ReadData方法的具体用法?C# AMFReader.ReadData怎么用?C# AMFReader.ReadData使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AMFReader
的用法示例。
在下文中一共展示了AMFReader.ReadData方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Read
public static DsoAmfBody Read(AMFReader reader, bool isAmf3) {
reader.Reset();
ushort targetUriLen = reader.ReadUInt16();
string targetUri = reader.ReadUTF(targetUriLen); // When the message holds a response from a remote endpoint, the target URI specifies which method on the local client (i.e. reader request originator) should be invoked to handle the response.
ushort responseUriLen = reader.ReadUInt16();
string responseUri = reader.ReadUTF(responseUriLen); // The response's target URI is set to the request's response URI with an '/onResult' suffix to denote a success or an '/onStatus' suffix to denote a failure.
long dataLen = reader.ReadUInt32();
if (dataLen >= 2147483648) {
dataLen = -4294967296;
}
object bodyObj;
// Check for AMF3 kAvmPlusObjectType object type
if (isAmf3) {
byte typeMarker = reader.ReadByte();
if (typeMarker == 17) {
bodyObj = reader.ReadAMF3Data();
} else {
bodyObj = reader.ReadData();
}
} else {
bodyObj = reader.ReadData();
}
DsoAmfBody body = new DsoAmfBody(targetUri, responseUri, bodyObj);
return body;
}
示例2: Read
public static DsoAmfHeader Read(AMFReader reader) {
reader.Reset();
ushort nameLen = reader.ReadUInt16();
string name = reader.ReadUTF(nameLen);
bool required = (reader.ReadByte() > 0); // find the must understand flag
uint dataLen = reader.ReadUInt32();
object headObj = reader.ReadData();
DsoAmfHeader header = new DsoAmfHeader(name, required, headObj);
return header;
}
示例3: LoadObject
private IPersistable LoadObject(string name, IPersistable obj) {
string fileName = PersistenceUtils.GetFilename(_scope, _path, name, _extension);
FileInfo file = _scope.Context.GetResource(fileName).File;
if (!file.Exists)
return null;// No such file
IPersistable result = obj;
lock (this.SyncRoot) {
using (FileStream fs = new FileStream(file.FullName, FileMode.Open, FileAccess.Read, FileShare.Read)) {
AMFReader reader = new AMFReader(fs);
string typeName = reader.ReadData() as string;
result = ObjectFactory.CreateInstance(typeName) as IPersistable;
//result.Path = GetObjectPath(name, result.Name);
//result = amfDeserializer.ReadData() as IPersistable;
result.Deserialize(reader);
}
}
return result;
}
示例4: Read
public static DsoAmfBody Read(AMFReader reader) {
reader.Reset();
ushort targetUriLen = reader.ReadUInt16();
string targetUri = reader.ReadUTF(targetUriLen); // When the message holds a response from a remote endpoint, the target URI specifies which method on the local client (i.e. reader request originator) should be invoked to handle the response.
ushort responseUriLen = reader.ReadUInt16();
string responseUri = reader.ReadUTF(responseUriLen); // The response's target URI is set to the request's response URI with an '/onResult' suffix to denote a success or an '/onStatus' suffix to denote a failure.
int numBytes = 4;
uint dataLen = 0;
while (numBytes-- > 0)
dataLen = (dataLen << 8) | reader.ReadByte();
// Need to skip 1 byte more, dont know why..
reader.ReadByte();
object bodyObj = reader.ReadData(); // turn the element into real data
DsoAmfBody body = new DsoAmfBody(targetUri, responseUri, bodyObj);
return body;
}
示例5: Deserialize
/// <summary>
/// Loads the object from the specified input stream.
/// </summary>
/// <param name="reader">Reader to load from.</param>
public void Deserialize(AMFReader reader)
{
this.RemoveAttributes();
IDictionary persistentAttributes = reader.ReadData() as IDictionary;
this.SetAttributes(persistentAttributes);
}
示例6: CreateReadDataMethod
protected virtual ReadDataInvoker CreateReadDataMethod(Type type, AMFReader reader, object instance)
{
#if !(MONO) && !(NET_2_0) && !(NET_3_5) && !(SILVERLIGHT)
bool canSkipChecks = _ps.IsSubsetOf(AppDomain.CurrentDomain.PermissionSet);
#else
bool canSkipChecks = SecurityManager.IsGranted(new ReflectionPermission(ReflectionPermissionFlag.MemberAccess));
#endif
DynamicMethod method = new DynamicMethod(string.Empty, typeof(object), new Type[] { typeof(AMFReader), typeof(ClassDefinition) }, this.GetType(), canSkipChecks);
ILGenerator il = method.GetILGenerator();
LocalBuilder instanceLocal = il.DeclareLocal(type);//[0] instance
LocalBuilder typeCodeLocal = il.DeclareLocal(typeof(byte));//[1] uint8 typeCode
LocalBuilder keyLocal = il.DeclareLocal(typeof(string));//[2] string key
LocalBuilder objTmp = il.DeclareLocal(typeof(object));//[3] temp object store
LocalBuilder intTmp1 = il.DeclareLocal(typeof(int));//[4] temp int store, length
LocalBuilder intTmp2 = il.DeclareLocal(typeof(int));//[5] temp int store, index
LocalBuilder objTmp2 = il.DeclareLocal(typeof(object));//[6] temp object store
LocalBuilder typeTmp = il.DeclareLocal(typeof(Type));//[7] temp Type store
EmitHelper emit = new EmitHelper(il);
ConstructorInfo typeConstructor = type.GetConstructor(EmitHelper.AnyVisibilityInstance, null, CallingConventions.HasThis, System.Type.EmptyTypes, null);
MethodInfo miAddReference = typeof(AMFReader).GetMethod("AddReference");
MethodInfo miReadString = typeof(AMFReader).GetMethod("ReadString");
MethodInfo miReadByte = typeof(AMFReader).GetMethod("ReadByte");
emit
//object instance = new object();
.newobj(typeConstructor) //Create the new instance and push the object reference onto the evaluation stack
.stloc_0 //Pop from the top of the evaluation stack and store it in a the local variable list at index 0
//reader.AddReference(instance);
.ldarg_0 //Push the argument indexed at 1 onto the evaluation stack 'reader'
.ldloc_0 //Loads the local variable at index 0 onto the evaluation stack 'instance'
.callvirt(miAddReference) //Arguments are popped from the stack, the method call is performed, return value is pushed onto the stack
//typeCode = 0;
.ldc_i4_0 //Push the integer value of 0 onto the evaluation stack as an int32
.stloc_1 //Pop and store it in a the local variable list at index 1
//string key = null;
.ldnull //Push a null reference onto the evaluation stack
.stloc_2 //Pop and store it in a the local variable list at index 2 'key'
.end()
;
string key = reader.ReadString();
for (byte typeCode = reader.ReadByte(); typeCode != AMF0TypeCode.EndOfObject; typeCode = reader.ReadByte())
{
emit
.ldarg_0
.callvirt(miReadString)
.stloc_2
.ldarg_0
.callvirt(miReadByte)
.stloc_1
.end()
;
object value = reader.ReadData(typeCode);
reader.SetMember(instance, key, value);
MemberInfo[] memberInfos = type.GetMember(key);
if (memberInfos != null && memberInfos.Length > 0)
GeneratePropertySet(emit, typeCode, memberInfos[0]);
else
{
//Log this error (do not throw exception), otherwise our current AMF stream becomes unreliable
log.Warn(__Res.GetString(__Res.Optimizer_Warning));
string msg = __Res.GetString(__Res.Reflection_MemberNotFound, string.Format("{0}.{1}", type.FullName, key));
log.Warn(msg);
//reader.ReadAMF3Data(typeCode);
emit
.ldarg_0 //Push 'reader'
.ldloc_1 //Push 'typeCode'
.callvirt(typeof(AMFReader).GetMethod("ReadData", new Type[] { typeof(byte) }))
.pop
.end()
;
}
key = reader.ReadString();
}
Label labelExit = emit.DefineLabel();
ConstructorInfo exceptionConstructor = typeof(UnexpectedAMF).GetConstructor(EmitHelper.AnyVisibilityInstance, null, CallingConventions.HasThis, Type.EmptyTypes, null);
//key = reader.ReadString();
emit
.ldarg_0 //Push 'reader'
.callvirt(miReadString)
.stloc_2 //Pop 'key'
//typeCode = reader.ReadByte();
.ldarg_0 //Push 'reader'
.callvirt(miReadByte)
.stloc_1 //Pop 'typeCode'
.ldloc_1
.ldc_i4_s(AMF0TypeCode.EndOfObject)
.ceq
.brtrue_s(labelExit)
//if( typeCode != AMF0TypeCode.EndOfObject ) throw new UnexpectedAMF();
.newobj(exceptionConstructor)
[email protected]
.end()
;
emit
//.........这里部分代码省略.........
示例7: ReadMetaData
/// <summary>
/// Reads the Metadata.
/// </summary>
/// <param name="buffer">Byte buffer source.</param>
/// <returns>Metadata.</returns>
public MetaData ReadMetaData(byte[] buffer) {
MetaData retMeta = new MetaData();
MemoryStream ms = new MemoryStream(buffer);
AMFReader reader = new AMFReader(ms);
string metaType = reader.ReadData() as string;
IDictionary data = reader.ReadData() as IDictionary;
retMeta.PutAll(data);
return retMeta;
}
示例8: Deserialize
public void Deserialize(AMFReader reader)
{
_name = reader.ReadData() as string;
_path = reader.ReadData() as string;
_attributes.Clear();
#if !(NET_1_1)
_attributes = new CopyOnWriteDictionary<string, object>(reader.ReadData() as IDictionary<string, object>);
#else
_attributes = new CopyOnWriteDictionary(reader.ReadData() as IDictionary);
#endif
_persistent = true; _persistentSO = true;
_ownerMessage.SetName(_name);
_ownerMessage.SetIsPersistent(true);
}
示例9: FlvWriter
public FlvWriter(Stream stream, bool append)
{
_writer = new AMFWriter(stream);
_append = append;
if (_append)
{
if (stream.Length > 9 + 15)
{
try
{
//Skip header
stream.Position = 9;
byte[] tagBuffer = new byte[15];
//previousTagSize
stream.Read(tagBuffer, 0, 4);
//start of flv tag
byte dataType = (byte)stream.ReadByte();
if (dataType == IOConstants.TYPE_METADATA)
{
_metaPosition = stream.Position - 1;
//body size
stream.Read(tagBuffer, 5, 3);
int bodySize = tagBuffer[5] << 16 | tagBuffer[6] << 8 | tagBuffer[7];
//timestamp
stream.Read(tagBuffer, 8, 4);
//streamid
stream.Read(tagBuffer, 12, 3);
byte[] buffer = new byte[bodySize];
stream.Read(buffer, 0, buffer.Length);
MemoryStream ms = new MemoryStream(buffer);
AMFReader input = new AMFReader(ms);
string onMetaData = input.ReadData() as string;//input.ReadString();
IDictionary properties = input.ReadData() as IDictionary;
if (properties.Contains("duration"))
_duration = System.Convert.ToInt32(properties["duration"]);
else
{
#if !SILVERLIGHT
log.Warn("Could not read Flv duration from metadata");
#endif
}
}
else
{
#if !SILVERLIGHT
log.Warn("Could not read Flv duration");
#endif
}
}
catch (Exception ex)
{
#if !SILVERLIGHT
log.Warn("Error reading Flv duration", ex);
#endif
}
}
stream.Seek(0, SeekOrigin.End);//Appending
}
}