71 lines
3.4 KiB
C#
71 lines
3.4 KiB
C#
|
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
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Imports references needed by this helper.
|
|||
|
/// </summary>
|
|||
|
/// <param name="moduleDef"></param>
|
|||
|
/// <returns></returns>
|
|||
|
public override bool ImportReferences()
|
|||
|
{
|
|||
|
ReaderProcessor rp = base.GetClass<ReaderProcessor>();
|
|||
|
|
|||
|
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<int>.Read));
|
|||
|
ReadSetMethodRef = base.ImportReference(readPropertyInfo.GetSetMethod());
|
|||
|
readPropertyInfo = typeof(GenericReader<>).GetProperty(nameof(GenericReader<int>.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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|