using FishNet.Connection;
using FishNet.Serializing;
using MonoFN.Cecil;
using System;
using System.Reflection;
namespace FishNet.CodeGenerating.Helping
{
internal class ReaderImports : CodegenBase
{
#region Reflection references.
public TypeReference PooledReader_TypeRef;
public TypeReference Reader_TypeRef;
public TypeReference NetworkConnection_TypeRef;
public MethodReference PooledReader_ReadNetworkBehaviour_MethodRef;
public MethodReference Reader_ReadPackedWhole_MethodRef;
public MethodReference Reader_ReadDictionary_MethodRef;
public MethodReference Reader_ReadList_MethodRef;
public MethodReference Reader_ReadListCache_MethodRef;
public MethodReference Reader_ReadArray_MethodRef;
public TypeReference GenericReaderTypeRef;
public TypeReference ReaderTypeRef;
public MethodReference ReadSetMethodRef;
public MethodReference ReadAutoPackSetMethodRef;
#endregion
///
/// Imports references needed by this helper.
///
///
///
public override bool ImportReferences()
{
ReaderProcessor rp = base.GetClass();
PooledReader_TypeRef = base.ImportReference(typeof(PooledReader));
Reader_TypeRef = base.ImportReference(typeof(Reader));
NetworkConnection_TypeRef = base.ImportReference(typeof(NetworkConnection));
GenericReaderTypeRef = base.ImportReference(typeof(GenericReader<>));
ReaderTypeRef = base.ImportReference(typeof(Reader));
System.Reflection.PropertyInfo readPropertyInfo;
readPropertyInfo = typeof(GenericReader<>).GetProperty(nameof(GenericReader.Read));
ReadSetMethodRef = base.ImportReference(readPropertyInfo.GetSetMethod());
readPropertyInfo = typeof(GenericReader<>).GetProperty(nameof(GenericReader.ReadAutoPack));
ReadAutoPackSetMethodRef = base.ImportReference(readPropertyInfo.GetSetMethod());
Type pooledReaderType = typeof(PooledReader);
foreach (MethodInfo methodInfo in pooledReaderType.GetMethods())
{
int parameterCount = methodInfo.GetParameters().Length;
/* Special methods. */
if (methodInfo.Name == nameof(PooledReader.ReadPackedWhole))
Reader_ReadPackedWhole_MethodRef = base.ImportReference(methodInfo);
//Relay readers.
else if (parameterCount == 0 && methodInfo.Name == nameof(PooledReader.ReadDictionary))
Reader_ReadDictionary_MethodRef = base.ImportReference(methodInfo);
else if (parameterCount == 0 && methodInfo.Name == nameof(PooledReader.ReadListAllocated))
Reader_ReadList_MethodRef = base.ImportReference(methodInfo);
else if (parameterCount == 0 && methodInfo.Name == nameof(PooledReader.ReadListCacheAllocated))
Reader_ReadListCache_MethodRef = base.ImportReference(methodInfo);
else if (parameterCount == 0 && methodInfo.Name == nameof(PooledReader.ReadArrayAllocated))
Reader_ReadArray_MethodRef = base.ImportReference(methodInfo);
}
return true;
}
}
}