100 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using FishNet.Object;
 | |
| using FishNet.Serializing;
 | |
| using MonoFN.Cecil;
 | |
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Reflection;
 | |
| 
 | |
| namespace FishNet.CodeGenerating.Helping
 | |
| {
 | |
|     internal class WriterImports : CodegenBase
 | |
|     {
 | |
|         #region Reflection references.
 | |
|         public MethodReference WriterPool_GetWriter_MethodRef;
 | |
|         public MethodReference WriterPool_GetWriterLength_MethodRef;
 | |
|         public MethodReference Writer_WritePackedWhole_MethodRef;
 | |
|         public TypeReference PooledWriter_TypeRef;
 | |
|         public TypeReference Writer_TypeRef;
 | |
|         public MethodReference PooledWriter_Dispose_MethodRef;
 | |
|         public MethodReference Writer_WriteDictionary_MethodRef;
 | |
|         public MethodReference Writer_WriteList_MethodRef;
 | |
|         public MethodReference Writer_WriteListCache_MethodRef;
 | |
|         public MethodReference Writer_WriteArray_MethodRef;
 | |
|         public TypeReference AutoPackTypeRef;
 | |
| 
 | |
|         public TypeReference GenericWriterTypeRef;
 | |
|         public TypeReference WriterTypeRef;
 | |
|         public MethodReference WriteGetSetMethodRef;
 | |
|         public MethodReference WriteAutoPackGetSetMethodRef;
 | |
|         #endregion
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Imports references needed by this helper.
 | |
|         /// </summary>
 | |
|         /// <param name="moduleDef"></param>
 | |
|         /// <returns></returns>
 | |
|         public override bool ImportReferences()
 | |
|         {
 | |
|             PooledWriter_TypeRef = base.ImportReference(typeof(PooledWriter));
 | |
|             Writer_TypeRef = base.ImportReference(typeof(Writer));
 | |
|             AutoPackTypeRef = base.ImportReference(typeof(AutoPackType));
 | |
| 
 | |
|             GenericWriterTypeRef = base.ImportReference(typeof(GenericWriter<>));
 | |
|             WriterTypeRef = base.ImportReference(typeof(Writer));
 | |
| 
 | |
|             PropertyInfo writePropertyInfo;
 | |
|             writePropertyInfo = typeof(GenericWriter<>).GetProperty(nameof(GenericWriter<int>.Write));
 | |
|             WriteGetSetMethodRef = base.ImportReference(writePropertyInfo.GetSetMethod());
 | |
|             writePropertyInfo = typeof(GenericWriter<>).GetProperty(nameof(GenericWriter<int>.WriteAutoPack));
 | |
|             WriteAutoPackGetSetMethodRef = base.ImportReference(writePropertyInfo.GetSetMethod());
 | |
| 
 | |
|             //WriterPool.GetWriter
 | |
|             Type writerPoolType = typeof(WriterPool);
 | |
|             base.ImportReference(writerPoolType);
 | |
|             foreach (var methodInfo in writerPoolType.GetMethods())
 | |
|             {
 | |
|                 if (methodInfo.Name == nameof(WriterPool.GetWriter))
 | |
|                 {
 | |
|                     //GetWriter().
 | |
|                     if (methodInfo.GetParameters().Length == 0)
 | |
|                     {
 | |
|                         WriterPool_GetWriter_MethodRef = base.ImportReference(methodInfo);
 | |
|                     }
 | |
|                     //GetWriter(?).
 | |
|                     else if (methodInfo.GetParameters().Length == 1)
 | |
|                     {
 | |
|                         ParameterInfo pi = methodInfo.GetParameters()[0];
 | |
|                         //GetWriter(int).
 | |
|                         if (pi.ParameterType == typeof(int))
 | |
|                             WriterPool_GetWriterLength_MethodRef = base.ImportReference(methodInfo);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             WriterProcessor gwh = base.GetClass<WriterProcessor>();
 | |
|             Type pooledWriterType = typeof(PooledWriter);
 | |
|             foreach (MethodInfo methodInfo in pooledWriterType.GetMethods())
 | |
|             {
 | |
|                 int parameterCount = methodInfo.GetParameters().Length;
 | |
| 
 | |
|                 if (methodInfo.Name == nameof(PooledWriter.Dispose))
 | |
|                     PooledWriter_Dispose_MethodRef = base.ImportReference(methodInfo);
 | |
|                 else if (methodInfo.Name == nameof(PooledWriter.WritePackedWhole))
 | |
|                     Writer_WritePackedWhole_MethodRef = base.ImportReference(methodInfo);
 | |
|                 //Relay writers.
 | |
|                 else if (parameterCount == 1 && methodInfo.Name == nameof(PooledWriter.WriteDictionary))
 | |
|                     Writer_WriteDictionary_MethodRef = base.ImportReference(methodInfo);
 | |
|                 else if (parameterCount == 1 && methodInfo.Name == nameof(PooledWriter.WriteList))
 | |
|                     Writer_WriteList_MethodRef = base.ImportReference(methodInfo);
 | |
|                 else if (parameterCount == 1 && methodInfo.Name == nameof(PooledWriter.WriteListCache))
 | |
|                     Writer_WriteListCache_MethodRef = base.ImportReference(methodInfo);
 | |
|                 else if (parameterCount == 1 && methodInfo.Name == nameof(PooledWriter.WriteArray))
 | |
|                     Writer_WriteArray_MethodRef = base.ImportReference(methodInfo);
 | |
|             }
 | |
| 
 | |
|             return true;
 | |
|         }
 | |
| 
 | |
|     }
 | |
| 
 | |
| } |