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