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; } } }