94 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using FishNet.CodeGenerating.Helping.Extension;
 | |
| using FishNet.Connection;
 | |
| using FishNet.Object;
 | |
| using FishNet.Object.Synchronizing;
 | |
| using FishNet.Object.Synchronizing.Internal;
 | |
| using MonoFN.Cecil;
 | |
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Reflection;
 | |
| 
 | |
| namespace FishNet.CodeGenerating.Helping
 | |
| {
 | |
|     internal class ObjectHelper : CodegenBase
 | |
|     {
 | |
|         #region Reflection references.
 | |
|         //Fullnames.
 | |
|         public string SyncList_Name;
 | |
|         public string SyncDictionary_Name;
 | |
|         public string SyncHashSet_Name;
 | |
|         //Is checks.
 | |
|         public MethodReference InstanceFinder_IsServer_MethodRef;
 | |
|         public MethodReference InstanceFinder_IsClient_MethodRef;
 | |
|         //Misc.
 | |
|         public TypeReference NetworkBehaviour_TypeRef;
 | |
|         public MethodReference NetworkConnection_IsValid_MethodRef;
 | |
|         public MethodReference NetworkConnection_IsActive_MethodRef;
 | |
|         public MethodReference Dictionary_Add_UShort_SyncBase_MethodRef;
 | |
|         public MethodReference NetworkConnection_GetIsLocalClient_MethodRef;
 | |
|         #endregion
 | |
| 
 | |
|         public override bool ImportReferences()
 | |
|         {
 | |
|             Type tmpType;
 | |
|             /* SyncObject names. */
 | |
|             //SyncList.
 | |
|             tmpType = typeof(SyncList<>);
 | |
|             base.ImportReference(tmpType);
 | |
|             SyncList_Name = tmpType.Name;
 | |
|             //SyncDictionary.
 | |
|             tmpType = typeof(SyncDictionary<,>);
 | |
|             base.ImportReference(tmpType);
 | |
|             SyncDictionary_Name = tmpType.Name;
 | |
|             //SyncHashSet.
 | |
|             tmpType = typeof(SyncHashSet<>);
 | |
|             base.ImportReference(tmpType);
 | |
|             SyncHashSet_Name = tmpType.Name;
 | |
| 
 | |
|             NetworkBehaviour_TypeRef = base.ImportReference(typeof(NetworkBehaviour));
 | |
| 
 | |
|             tmpType = typeof(NetworkConnection);
 | |
|             TypeReference networkConnectionTr = base.ImportReference(tmpType);
 | |
|             foreach (PropertyDefinition item in networkConnectionTr.CachedResolve(base.Session).Properties)
 | |
|             {
 | |
|                 if (item.Name == nameof(NetworkConnection.IsLocalClient))
 | |
|                     NetworkConnection_GetIsLocalClient_MethodRef = base.ImportReference(item.GetMethod);
 | |
|             }
 | |
| 
 | |
|             //Dictionary.Add(ushort, SyncBase).
 | |
|             Type dictType = typeof(Dictionary<ushort, SyncBase>);
 | |
|             TypeReference dictTypeRef = base.ImportReference(dictType);
 | |
|             //Dictionary_Add_UShort_SyncBase_MethodRef = dictTypeRef.CachedResolve(base.Session).GetMethod("add_Item", )
 | |
|             foreach (MethodDefinition item in dictTypeRef.CachedResolve(base.Session).Methods)
 | |
|             {
 | |
|                 if (item.Name == nameof(Dictionary<ushort, SyncBase>.Add))
 | |
|                 {
 | |
|                     Dictionary_Add_UShort_SyncBase_MethodRef = base.ImportReference(item);
 | |
|                     break;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             //InstanceFinder infos.
 | |
|             Type instanceFinderType = typeof(InstanceFinder);
 | |
|             foreach (PropertyInfo pi in instanceFinderType.GetProperties())
 | |
|             {
 | |
|                 if (pi.Name == nameof(InstanceFinder.IsClient))
 | |
|                     InstanceFinder_IsClient_MethodRef = base.ImportReference(pi.GetMethod);
 | |
|                 else if (pi.Name == nameof(InstanceFinder.IsServer))
 | |
|                     InstanceFinder_IsServer_MethodRef = base.ImportReference(pi.GetMethod);
 | |
|             }
 | |
| 
 | |
|             //NetworkConnection.
 | |
|             foreach (PropertyInfo pi in typeof(NetworkConnection).GetProperties((BindingFlags.Static | BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic)))
 | |
|             {
 | |
|                 if (pi.Name == nameof(NetworkConnection.IsValid))
 | |
|                     NetworkConnection_IsValid_MethodRef = base.ImportReference(pi.GetMethod);
 | |
|                 else if (pi.Name == nameof(NetworkConnection.IsActive))
 | |
|                     NetworkConnection_IsActive_MethodRef = base.ImportReference(pi.GetMethod);
 | |
|             }
 | |
| 
 | |
|             return true;
 | |
|         }
 | |
| 
 | |
|     }
 | |
| } |