This commit is contained in:
Mister_Nebula 2021-05-03 20:27:52 +01:00
parent c94e85af64
commit 417433f59b
13 changed files with 402 additions and 445 deletions

View File

@ -7,7 +7,6 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
namespace QNetWeaver
{
@ -209,13 +208,10 @@ namespace QNetWeaver
{
throw new Exception("Assembly resolver doesn't implement AddSearchDirectory method.");
}
this._addSearchDirectory = (Helpers.AddSearchDirectoryHelper.AddSearchDirectoryDelegate)Delegate.CreateDelegate(typeof(Helpers.AddSearchDirectoryHelper.AddSearchDirectoryDelegate), assemblyResolver, method);
_addSearchDirectory = (Helpers.AddSearchDirectoryHelper.AddSearchDirectoryDelegate)Delegate.CreateDelegate(typeof(Helpers.AddSearchDirectoryHelper.AddSearchDirectoryDelegate), assemblyResolver, method);
}
public void AddSearchDirectory(string directory)
{
this._addSearchDirectory(directory);
}
public void AddSearchDirectory(string directory) => _addSearchDirectory(directory);
private readonly Helpers.AddSearchDirectoryHelper.AddSearchDirectoryDelegate _addSearchDirectory;

View File

@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QNetWeaver
{

View File

@ -1,9 +1,5 @@
using Mono.Cecil;
using Mono.Cecil.Cil;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QNetWeaver
{
@ -12,43 +8,43 @@ namespace QNetWeaver
public MessageClassProcessor(TypeDefinition td)
{
Weaver.DLog(td, "MessageClassProcessor for " + td.Name, new object[0]);
this.m_td = td;
m_td = td;
}
public void Process()
{
Weaver.DLog(this.m_td, "MessageClassProcessor Start", new object[0]);
Weaver.DLog(m_td, "MessageClassProcessor Start", new object[0]);
Weaver.ResetRecursionCount();
this.GenerateSerialization();
GenerateSerialization();
if (!Weaver.fail)
{
this.GenerateDeSerialization();
Weaver.DLog(this.m_td, "MessageClassProcessor Done", new object[0]);
GenerateDeSerialization();
Weaver.DLog(m_td, "MessageClassProcessor Done", new object[0]);
}
}
private void GenerateSerialization()
{
Weaver.DLog(this.m_td, " MessageClass GenerateSerialization", new object[0]);
foreach (var methodDefinition in this.m_td.Methods)
Weaver.DLog(m_td, " MessageClass GenerateSerialization", new object[0]);
foreach (var methodDefinition in m_td.Methods)
{
if (methodDefinition.Name == "Serialize")
{
Weaver.DLog(this.m_td, " Abort - is Serialize", new object[0]);
Weaver.DLog(m_td, " Abort - is Serialize", new object[0]);
return;
}
}
if (this.m_td.Fields.Count != 0)
if (m_td.Fields.Count != 0)
{
foreach (var fieldDefinition in this.m_td.Fields)
foreach (var fieldDefinition in m_td.Fields)
{
if (fieldDefinition.FieldType.FullName == this.m_td.FullName)
if (fieldDefinition.FieldType.FullName == m_td.FullName)
{
Weaver.fail = true;
Log.Error(string.Concat(new string[]
{
"GenerateSerialization for ",
this.m_td.Name,
m_td.Name,
" [",
fieldDefinition.FullName,
"]. [MessageBase] member cannot be self referencing."
@ -59,7 +55,7 @@ namespace QNetWeaver
var methodDefinition2 = new MethodDefinition("Serialize", MethodAttributes.FamANDAssem | MethodAttributes.Family | MethodAttributes.Virtual | MethodAttributes.HideBySig, Weaver.voidType);
methodDefinition2.Parameters.Add(new ParameterDefinition("writer", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(Weaver.NetworkWriterType)));
var ilprocessor = methodDefinition2.Body.GetILProcessor();
foreach (var fieldDefinition2 in this.m_td.Fields)
foreach (var fieldDefinition2 in m_td.Fields)
{
if (!fieldDefinition2.IsStatic && !fieldDefinition2.IsPrivate && !fieldDefinition2.IsSpecialName)
{
@ -69,7 +65,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new object[]
{
"GenerateSerialization for ",
this.m_td.Name,
m_td.Name,
" [",
fieldDefinition2.FieldType,
"/",
@ -84,7 +80,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new object[]
{
"GenerateSerialization for ",
this.m_td.Name,
m_td.Name,
" [",
fieldDefinition2.FieldType,
"/",
@ -100,7 +96,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new object[]
{
"GenerateSerialization for ",
this.m_td.Name,
m_td.Name,
" unknown type [",
fieldDefinition2.FieldType,
"/",
@ -116,26 +112,26 @@ namespace QNetWeaver
}
}
ilprocessor.Append(ilprocessor.Create(OpCodes.Ret));
this.m_td.Methods.Add(methodDefinition2);
m_td.Methods.Add(methodDefinition2);
}
}
private void GenerateDeSerialization()
{
Weaver.DLog(this.m_td, " GenerateDeserialization", new object[0]);
foreach (var methodDefinition in this.m_td.Methods)
Weaver.DLog(m_td, " GenerateDeserialization", new object[0]);
foreach (var methodDefinition in m_td.Methods)
{
if (methodDefinition.Name == "Deserialize")
{
return;
}
}
if (this.m_td.Fields.Count != 0)
if (m_td.Fields.Count != 0)
{
var methodDefinition2 = new MethodDefinition("Deserialize", MethodAttributes.FamANDAssem | MethodAttributes.Family | MethodAttributes.Virtual | MethodAttributes.HideBySig, Weaver.voidType);
methodDefinition2.Parameters.Add(new ParameterDefinition("reader", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(Weaver.NetworkReaderType)));
var ilprocessor = methodDefinition2.Body.GetILProcessor();
foreach (var fieldDefinition in this.m_td.Fields)
foreach (var fieldDefinition in m_td.Fields)
{
if (!fieldDefinition.IsStatic && !fieldDefinition.IsPrivate && !fieldDefinition.IsSpecialName)
{
@ -146,7 +142,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new object[]
{
"GenerateDeSerialization for ",
this.m_td.Name,
m_td.Name,
" unknown type [",
fieldDefinition.FieldType,
"]. [SyncVar] member variables must be basic types."
@ -160,7 +156,7 @@ namespace QNetWeaver
}
}
ilprocessor.Append(ilprocessor.Create(OpCodes.Ret));
this.m_td.Methods.Add(methodDefinition2);
m_td.Methods.Add(methodDefinition2);
}
}

View File

@ -1,27 +1,20 @@
using Mono.Cecil;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QNetWeaver
{
internal class MonoBehaviourProcessor
{
public MonoBehaviourProcessor(TypeDefinition td)
{
this.m_td = td;
}
public MonoBehaviourProcessor(TypeDefinition td) => m_td = td;
public void Process()
{
this.ProcessSyncVars();
this.ProcessMethods();
ProcessSyncVars();
ProcessMethods();
}
private void ProcessSyncVars()
{
foreach (var fieldDefinition in this.m_td.Fields)
foreach (var fieldDefinition in m_td.Fields)
{
foreach (var customAttribute in fieldDefinition.CustomAttributes)
{
@ -30,7 +23,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new string[]
{
"Script ",
this.m_td.FullName,
m_td.FullName,
" uses [SyncVar] ",
fieldDefinition.Name,
" but is not a NetworkBehaviour."
@ -40,7 +33,7 @@ namespace QNetWeaver
}
if (Helpers.InheritsFromSyncList(fieldDefinition.FieldType))
{
Log.Error(string.Format("Script {0} defines field {1} with type {2}, but it's not a NetworkBehaviour", this.m_td.FullName, fieldDefinition.Name, Helpers.PrettyPrintType(fieldDefinition.FieldType)));
Log.Error(string.Format("Script {0} defines field {1} with type {2}, but it's not a NetworkBehaviour", m_td.FullName, fieldDefinition.Name, Helpers.PrettyPrintType(fieldDefinition.FieldType)));
Weaver.fail = true;
}
}
@ -48,7 +41,7 @@ namespace QNetWeaver
private void ProcessMethods()
{
foreach (var methodDefinition in this.m_td.Methods)
foreach (var methodDefinition in m_td.Methods)
{
foreach (var customAttribute in methodDefinition.CustomAttributes)
{
@ -57,7 +50,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new string[]
{
"Script ",
this.m_td.FullName,
m_td.FullName,
" uses [Command] ",
methodDefinition.Name,
" but is not a NetworkBehaviour."
@ -69,7 +62,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new string[]
{
"Script ",
this.m_td.FullName,
m_td.FullName,
" uses [ClientRpc] ",
methodDefinition.Name,
" but is not a NetworkBehaviour."
@ -81,7 +74,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new string[]
{
"Script ",
this.m_td.FullName,
m_td.FullName,
" uses [TargetRpc] ",
methodDefinition.Name,
" but is not a NetworkBehaviour."
@ -94,7 +87,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new string[]
{
"Script ",
this.m_td.FullName,
m_td.FullName,
" uses the attribute [Server] on the method ",
methodDefinition.Name,
" but is not a NetworkBehaviour."
@ -106,7 +99,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new string[]
{
"Script ",
this.m_td.FullName,
m_td.FullName,
" uses the attribute [ServerCallback] on the method ",
methodDefinition.Name,
" but is not a NetworkBehaviour."
@ -118,7 +111,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new string[]
{
"Script ",
this.m_td.FullName,
m_td.FullName,
" uses the attribute [Client] on the method ",
methodDefinition.Name,
" but is not a NetworkBehaviour."
@ -130,7 +123,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new string[]
{
"Script ",
this.m_td.FullName,
m_td.FullName,
" uses the attribute [ClientCallback] on the method ",
methodDefinition.Name,
" but is not a NetworkBehaviour."

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +1,12 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace QNetWeaver
{
public class Program
{
static void Main(string[] args)
private static void Main(string[] args)
{
Console.WriteLine("Start!");

View File

@ -1,5 +1,4 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following

View File

@ -1,9 +1,5 @@
using Mono.Cecil;
using Mono.Cecil.Cil;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QNetWeaver
{
@ -12,12 +8,12 @@ namespace QNetWeaver
public SyncListStructProcessor(TypeDefinition typeDef)
{
Weaver.DLog(typeDef, "SyncListStructProcessor for " + typeDef.Name, new object[0]);
this.m_TypeDef = typeDef;
m_TypeDef = typeDef;
}
public void Process()
{
var genericInstanceType = (GenericInstanceType)this.m_TypeDef.BaseType;
var genericInstanceType = (GenericInstanceType)m_TypeDef.BaseType;
if (genericInstanceType.GenericArguments.Count == 0)
{
Weaver.fail = true;
@ -25,18 +21,18 @@ namespace QNetWeaver
}
else
{
this.m_ItemType = Weaver.scriptDef.MainModule.ImportReference(genericInstanceType.GenericArguments[0]);
Weaver.DLog(this.m_TypeDef, "SyncListStructProcessor Start item:" + this.m_ItemType.FullName, new object[0]);
m_ItemType = Weaver.scriptDef.MainModule.ImportReference(genericInstanceType.GenericArguments[0]);
Weaver.DLog(m_TypeDef, "SyncListStructProcessor Start item:" + m_ItemType.FullName, new object[0]);
Weaver.ResetRecursionCount();
var methodReference = this.GenerateSerialization();
var methodReference = GenerateSerialization();
if (!Weaver.fail)
{
var methodReference2 = this.GenerateDeserialization();
var methodReference2 = GenerateDeserialization();
if (methodReference2 != null && methodReference != null)
{
this.GenerateReadFunc(methodReference2);
this.GenerateWriteFunc(methodReference);
Weaver.DLog(this.m_TypeDef, "SyncListStructProcessor Done", new object[0]);
GenerateReadFunc(methodReference2);
GenerateWriteFunc(methodReference);
Weaver.DLog(m_TypeDef, "SyncListStructProcessor Done", new object[0]);
}
}
}
@ -44,10 +40,10 @@ namespace QNetWeaver
private void GenerateReadFunc(MethodReference readItemFunc)
{
var text = "_ReadStruct" + this.m_TypeDef.Name + "_";
if (this.m_TypeDef.DeclaringType != null)
var text = "_ReadStruct" + m_TypeDef.Name + "_";
if (m_TypeDef.DeclaringType != null)
{
text += this.m_TypeDef.DeclaringType.Name;
text += m_TypeDef.DeclaringType.Name;
}
else
{
@ -55,7 +51,7 @@ namespace QNetWeaver
}
var methodDefinition = new MethodDefinition(text, MethodAttributes.FamANDAssem | MethodAttributes.Family | MethodAttributes.Static | MethodAttributes.HideBySig, Weaver.voidType);
methodDefinition.Parameters.Add(new ParameterDefinition("reader", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(Weaver.NetworkReaderType)));
methodDefinition.Parameters.Add(new ParameterDefinition("instance", ParameterAttributes.None, this.m_TypeDef));
methodDefinition.Parameters.Add(new ParameterDefinition("instance", ParameterAttributes.None, m_TypeDef));
methodDefinition.Body.Variables.Add(new VariableDefinition(Weaver.uint16Type));
methodDefinition.Body.Variables.Add(new VariableDefinition(Weaver.uint16Type));
methodDefinition.Body.InitLocals = true;
@ -66,7 +62,7 @@ namespace QNetWeaver
ilprocessor.Append(ilprocessor.Create(OpCodes.Ldarg_1));
var method = Helpers.MakeHostInstanceGeneric(Weaver.SyncListClear, new TypeReference[]
{
this.m_ItemType
m_ItemType
});
ilprocessor.Append(ilprocessor.Create(OpCodes.Callvirt, method));
ilprocessor.Append(ilprocessor.Create(OpCodes.Ldc_I4_0));
@ -82,7 +78,7 @@ namespace QNetWeaver
var self = Weaver.ResolveMethod(Weaver.SyncListStructType, "AddInternal");
var method2 = Helpers.MakeHostInstanceGeneric(self, new TypeReference[]
{
this.m_ItemType
m_ItemType
});
ilprocessor.Append(ilprocessor.Create(OpCodes.Callvirt, method2));
ilprocessor.Append(ilprocessor.Create(OpCodes.Ldloc_1));
@ -95,15 +91,15 @@ namespace QNetWeaver
ilprocessor.Append(ilprocessor.Create(OpCodes.Ldloc_0));
ilprocessor.Append(ilprocessor.Create(OpCodes.Blt, instruction2));
ilprocessor.Append(ilprocessor.Create(OpCodes.Ret));
Weaver.RegisterReadByReferenceFunc(this.m_TypeDef.FullName, methodDefinition);
Weaver.RegisterReadByReferenceFunc(m_TypeDef.FullName, methodDefinition);
}
private void GenerateWriteFunc(MethodReference writeItemFunc)
{
var text = "_WriteStruct" + this.m_TypeDef.GetElementType().Name + "_";
if (this.m_TypeDef.DeclaringType != null)
var text = "_WriteStruct" + m_TypeDef.GetElementType().Name + "_";
if (m_TypeDef.DeclaringType != null)
{
text += this.m_TypeDef.DeclaringType.Name;
text += m_TypeDef.DeclaringType.Name;
}
else
{
@ -111,7 +107,7 @@ namespace QNetWeaver
}
var methodDefinition = new MethodDefinition(text, MethodAttributes.FamANDAssem | MethodAttributes.Family | MethodAttributes.Static | MethodAttributes.HideBySig, Weaver.voidType);
methodDefinition.Parameters.Add(new ParameterDefinition("writer", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(Weaver.NetworkWriterType)));
methodDefinition.Parameters.Add(new ParameterDefinition("value", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(this.m_TypeDef)));
methodDefinition.Parameters.Add(new ParameterDefinition("value", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(m_TypeDef)));
methodDefinition.Body.Variables.Add(new VariableDefinition(Weaver.uint16Type));
methodDefinition.Body.Variables.Add(new VariableDefinition(Weaver.uint16Type));
methodDefinition.Body.InitLocals = true;
@ -120,7 +116,7 @@ namespace QNetWeaver
var self = Weaver.ResolveMethod(Weaver.SyncListStructType, "get_Count");
var method = Helpers.MakeHostInstanceGeneric(self, new TypeReference[]
{
this.m_ItemType
m_ItemType
});
ilprocessor.Append(ilprocessor.Create(OpCodes.Callvirt, method));
ilprocessor.Append(ilprocessor.Create(OpCodes.Stloc_0));
@ -140,7 +136,7 @@ namespace QNetWeaver
var self2 = Weaver.ResolveMethod(Weaver.SyncListStructType, "GetItem");
var method2 = Helpers.MakeHostInstanceGeneric(self2, new TypeReference[]
{
this.m_ItemType
m_ItemType
});
ilprocessor.Append(ilprocessor.Create(OpCodes.Callvirt, method2));
ilprocessor.Append(ilprocessor.Create(OpCodes.Callvirt, writeItemFunc));
@ -154,34 +150,34 @@ namespace QNetWeaver
ilprocessor.Append(ilprocessor.Create(OpCodes.Ldloc_0));
ilprocessor.Append(ilprocessor.Create(OpCodes.Blt, instruction2));
ilprocessor.Append(ilprocessor.Create(OpCodes.Ret));
Weaver.RegisterWriteFunc(this.m_TypeDef.FullName, methodDefinition);
Weaver.RegisterWriteFunc(m_TypeDef.FullName, methodDefinition);
}
private MethodReference GenerateSerialization()
{
Weaver.DLog(this.m_TypeDef, " SyncListStruct GenerateSerialization", new object[0]);
foreach (var methodDefinition in this.m_TypeDef.Methods)
Weaver.DLog(m_TypeDef, " SyncListStruct GenerateSerialization", new object[0]);
foreach (var methodDefinition in m_TypeDef.Methods)
{
if (methodDefinition.Name == "SerializeItem")
{
Weaver.DLog(this.m_TypeDef, " Abort - is SerializeItem", new object[0]);
Weaver.DLog(m_TypeDef, " Abort - is SerializeItem", new object[0]);
return methodDefinition;
}
}
var methodDefinition2 = new MethodDefinition("SerializeItem", MethodAttributes.FamANDAssem | MethodAttributes.Family | MethodAttributes.Virtual | MethodAttributes.HideBySig, Weaver.voidType);
methodDefinition2.Parameters.Add(new ParameterDefinition("writer", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(Weaver.NetworkWriterType)));
methodDefinition2.Parameters.Add(new ParameterDefinition("item", ParameterAttributes.None, this.m_ItemType));
methodDefinition2.Parameters.Add(new ParameterDefinition("item", ParameterAttributes.None, m_ItemType));
var ilprocessor = methodDefinition2.Body.GetILProcessor();
MethodReference result;
if (this.m_ItemType.IsGenericInstance)
if (m_ItemType.IsGenericInstance)
{
Weaver.fail = true;
Log.Error("GenerateSerialization for " + Helpers.PrettyPrintType(this.m_ItemType) + " failed. Struct passed into SyncListStruct<T> can't have generic parameters");
Log.Error("GenerateSerialization for " + Helpers.PrettyPrintType(m_ItemType) + " failed. Struct passed into SyncListStruct<T> can't have generic parameters");
result = null;
}
else
{
foreach (var fieldDefinition in this.m_ItemType.Resolve().Fields)
foreach (var fieldDefinition in m_ItemType.Resolve().Fields)
{
if (!fieldDefinition.IsStatic && !fieldDefinition.IsPrivate && !fieldDefinition.IsSpecialName)
{
@ -193,7 +189,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new object[]
{
"GenerateSerialization for ",
this.m_TypeDef.Name,
m_TypeDef.Name,
" [",
typeDefinition,
"/",
@ -208,7 +204,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new object[]
{
"GenerateSerialization for ",
this.m_TypeDef.Name,
m_TypeDef.Name,
" [",
typeDefinition,
"/",
@ -224,7 +220,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new object[]
{
"GenerateSerialization for ",
this.m_TypeDef.Name,
m_TypeDef.Name,
" unknown type [",
typeDefinition,
"/",
@ -240,7 +236,7 @@ namespace QNetWeaver
}
}
ilprocessor.Append(ilprocessor.Create(OpCodes.Ret));
this.m_TypeDef.Methods.Add(methodDefinition2);
m_TypeDef.Methods.Add(methodDefinition2);
result = methodDefinition2;
}
return result;
@ -248,22 +244,22 @@ namespace QNetWeaver
private MethodReference GenerateDeserialization()
{
Weaver.DLog(this.m_TypeDef, " GenerateDeserialization", new object[0]);
foreach (var methodDefinition in this.m_TypeDef.Methods)
Weaver.DLog(m_TypeDef, " GenerateDeserialization", new object[0]);
foreach (var methodDefinition in m_TypeDef.Methods)
{
if (methodDefinition.Name == "DeserializeItem")
{
return methodDefinition;
}
}
var methodDefinition2 = new MethodDefinition("DeserializeItem", MethodAttributes.FamANDAssem | MethodAttributes.Family | MethodAttributes.Virtual | MethodAttributes.HideBySig, this.m_ItemType);
var methodDefinition2 = new MethodDefinition("DeserializeItem", MethodAttributes.FamANDAssem | MethodAttributes.Family | MethodAttributes.Virtual | MethodAttributes.HideBySig, m_ItemType);
methodDefinition2.Parameters.Add(new ParameterDefinition("reader", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(Weaver.NetworkReaderType)));
var ilprocessor = methodDefinition2.Body.GetILProcessor();
ilprocessor.Body.InitLocals = true;
ilprocessor.Body.Variables.Add(new VariableDefinition(this.m_ItemType));
ilprocessor.Body.Variables.Add(new VariableDefinition(m_ItemType));
ilprocessor.Append(ilprocessor.Create(OpCodes.Ldloca, 0));
ilprocessor.Append(ilprocessor.Create(OpCodes.Initobj, this.m_ItemType));
foreach (var fieldDefinition in this.m_ItemType.Resolve().Fields)
ilprocessor.Append(ilprocessor.Create(OpCodes.Initobj, m_ItemType));
foreach (var fieldDefinition in m_ItemType.Resolve().Fields)
{
if (!fieldDefinition.IsStatic && !fieldDefinition.IsPrivate && !fieldDefinition.IsSpecialName)
{
@ -276,7 +272,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new object[]
{
"GenerateDeserialization for ",
this.m_TypeDef.Name,
m_TypeDef.Name,
" unknown type [",
typeDefinition,
"]. UNet [SyncVar] member variables must be basic types."
@ -291,7 +287,7 @@ namespace QNetWeaver
}
ilprocessor.Append(ilprocessor.Create(OpCodes.Ldloc_0));
ilprocessor.Append(ilprocessor.Create(OpCodes.Ret));
this.m_TypeDef.Methods.Add(methodDefinition2);
m_TypeDef.Methods.Add(methodDefinition2);
return methodDefinition2;
}

View File

@ -7,16 +7,12 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
namespace QNetWeaver
{
internal class Weaver
{
public static void ResetRecursionCount()
{
Weaver.s_RecursionCount = 0;
}
public static void ResetRecursionCount() => Weaver.s_RecursionCount = 0;
public static bool CanBeResolved(TypeReference parent)
{
@ -49,10 +45,7 @@ namespace QNetWeaver
return true;
}
public static bool IsArrayType(TypeReference variable)
{
return (!variable.IsArray || !((ArrayType)variable).ElementType.IsArray) && (!variable.IsArray || ((ArrayType)variable).Rank <= 1);
}
public static bool IsArrayType(TypeReference variable) => (!variable.IsArray || !((ArrayType)variable).ElementType.IsArray) && (!variable.IsArray || ((ArrayType)variable).Rank <= 1);
public static void DLog(TypeDefinition td, string fmt, params object[] args)
{
@ -77,10 +70,7 @@ namespace QNetWeaver
return result;
}
public static void SetNumSyncVars(string className, int num)
{
Weaver.lists.numSyncVars[className] = num;
}
public static void SetNumSyncVars(string className, int num) => Weaver.lists.numSyncVars[className] = num;
public static MethodReference GetWriteFunc(TypeReference variable)
{
@ -837,10 +827,7 @@ namespace QNetWeaver
}));
}
private static void ProcessPropertySites()
{
Weaver.ProcessSitesModule(Weaver.scriptDef.MainModule);
}
private static void ProcessPropertySites() => Weaver.ProcessSitesModule(Weaver.scriptDef.MainModule);
private static bool ProcessMessageType(TypeDefinition td)
{
@ -1212,89 +1199,95 @@ namespace QNetWeaver
private static void SetupReadFunctions()
{
var weaverLists = Weaver.lists;
var dictionary = new Dictionary<string, MethodReference>();
dictionary.Add(Weaver.singleType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadSingle"));
dictionary.Add(Weaver.doubleType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadDouble"));
dictionary.Add(Weaver.boolType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadBoolean"));
dictionary.Add(Weaver.stringType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadString"));
dictionary.Add(Weaver.int64Type.FullName, Weaver.NetworkReaderReadPacked64);
dictionary.Add(Weaver.uint64Type.FullName, Weaver.NetworkReaderReadPacked64);
dictionary.Add(Weaver.int32Type.FullName, Weaver.NetworkReaderReadPacked32);
dictionary.Add(Weaver.uint32Type.FullName, Weaver.NetworkReaderReadPacked32);
dictionary.Add(Weaver.int16Type.FullName, Weaver.NetworkReaderReadPacked32);
dictionary.Add(Weaver.uint16Type.FullName, Weaver.NetworkReaderReadPacked32);
dictionary.Add(Weaver.byteType.FullName, Weaver.NetworkReaderReadPacked32);
dictionary.Add(Weaver.sbyteType.FullName, Weaver.NetworkReaderReadPacked32);
dictionary.Add(Weaver.charType.FullName, Weaver.NetworkReaderReadPacked32);
dictionary.Add(Weaver.decimalType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadDecimal"));
dictionary.Add(Weaver.vector2Type.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadVector2"));
dictionary.Add(Weaver.vector3Type.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadVector3"));
dictionary.Add(Weaver.vector4Type.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadVector4"));
dictionary.Add(Weaver.colorType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadColor"));
dictionary.Add(Weaver.color32Type.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadColor32"));
dictionary.Add(Weaver.quaternionType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadQuaternion"));
dictionary.Add(Weaver.rectType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadRect"));
dictionary.Add(Weaver.planeType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadPlane"));
dictionary.Add(Weaver.rayType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadRay"));
dictionary.Add(Weaver.matrixType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadMatrix4x4"));
dictionary.Add(Weaver.hashType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadNetworkHash128"));
dictionary.Add(Weaver.gameObjectType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadGameObject"));
dictionary.Add(Weaver.NetworkIdentityType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadNetworkIdentity"));
dictionary.Add(Weaver.NetworkInstanceIdType.FullName, Weaver.NetworkReaderReadNetworkInstanceId);
dictionary.Add(Weaver.NetworkSceneIdType.FullName, Weaver.NetworkReaderReadNetworkSceneId);
dictionary.Add(Weaver.transformType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadTransform"));
dictionary.Add("System.Byte[]", Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadBytesAndSize"));
var dictionary = new Dictionary<string, MethodReference>
{
{ Weaver.singleType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadSingle") },
{ Weaver.doubleType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadDouble") },
{ Weaver.boolType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadBoolean") },
{ Weaver.stringType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadString") },
{ Weaver.int64Type.FullName, Weaver.NetworkReaderReadPacked64 },
{ Weaver.uint64Type.FullName, Weaver.NetworkReaderReadPacked64 },
{ Weaver.int32Type.FullName, Weaver.NetworkReaderReadPacked32 },
{ Weaver.uint32Type.FullName, Weaver.NetworkReaderReadPacked32 },
{ Weaver.int16Type.FullName, Weaver.NetworkReaderReadPacked32 },
{ Weaver.uint16Type.FullName, Weaver.NetworkReaderReadPacked32 },
{ Weaver.byteType.FullName, Weaver.NetworkReaderReadPacked32 },
{ Weaver.sbyteType.FullName, Weaver.NetworkReaderReadPacked32 },
{ Weaver.charType.FullName, Weaver.NetworkReaderReadPacked32 },
{ Weaver.decimalType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadDecimal") },
{ Weaver.vector2Type.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadVector2") },
{ Weaver.vector3Type.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadVector3") },
{ Weaver.vector4Type.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadVector4") },
{ Weaver.colorType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadColor") },
{ Weaver.color32Type.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadColor32") },
{ Weaver.quaternionType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadQuaternion") },
{ Weaver.rectType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadRect") },
{ Weaver.planeType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadPlane") },
{ Weaver.rayType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadRay") },
{ Weaver.matrixType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadMatrix4x4") },
{ Weaver.hashType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadNetworkHash128") },
{ Weaver.gameObjectType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadGameObject") },
{ Weaver.NetworkIdentityType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadNetworkIdentity") },
{ Weaver.NetworkInstanceIdType.FullName, Weaver.NetworkReaderReadNetworkInstanceId },
{ Weaver.NetworkSceneIdType.FullName, Weaver.NetworkReaderReadNetworkSceneId },
{ Weaver.transformType.FullName, Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadTransform") },
{ "System.Byte[]", Weaver.ResolveMethod(Weaver.NetworkReaderType, "ReadBytesAndSize") }
};
weaverLists.readFuncs = dictionary;
var weaverLists2 = Weaver.lists;
dictionary = new Dictionary<string, MethodReference>();
dictionary.Add(Weaver.SyncListFloatType.FullName, Weaver.SyncListFloatReadType);
dictionary.Add(Weaver.SyncListIntType.FullName, Weaver.SyncListIntReadType);
dictionary.Add(Weaver.SyncListUIntType.FullName, Weaver.SyncListUIntReadType);
dictionary.Add(Weaver.SyncListBoolType.FullName, Weaver.SyncListBoolReadType);
dictionary.Add(Weaver.SyncListStringType.FullName, Weaver.SyncListStringReadType);
dictionary = new Dictionary<string, MethodReference>
{
{ Weaver.SyncListFloatType.FullName, Weaver.SyncListFloatReadType },
{ Weaver.SyncListIntType.FullName, Weaver.SyncListIntReadType },
{ Weaver.SyncListUIntType.FullName, Weaver.SyncListUIntReadType },
{ Weaver.SyncListBoolType.FullName, Weaver.SyncListBoolReadType },
{ Weaver.SyncListStringType.FullName, Weaver.SyncListStringReadType }
};
weaverLists2.readByReferenceFuncs = dictionary;
}
private static void SetupWriteFunctions()
{
var weaverLists = Weaver.lists;
var dictionary = new Dictionary<string, MethodReference>();
dictionary.Add(Weaver.singleType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.singleType));
dictionary.Add(Weaver.doubleType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.doubleType));
dictionary.Add(Weaver.boolType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.boolType));
dictionary.Add(Weaver.stringType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.stringType));
dictionary.Add(Weaver.int64Type.FullName, Weaver.NetworkWriterWritePacked64);
dictionary.Add(Weaver.uint64Type.FullName, Weaver.NetworkWriterWritePacked64);
dictionary.Add(Weaver.int32Type.FullName, Weaver.NetworkWriterWritePacked32);
dictionary.Add(Weaver.uint32Type.FullName, Weaver.NetworkWriterWritePacked32);
dictionary.Add(Weaver.int16Type.FullName, Weaver.NetworkWriterWritePacked32);
dictionary.Add(Weaver.uint16Type.FullName, Weaver.NetworkWriterWritePacked32);
dictionary.Add(Weaver.byteType.FullName, Weaver.NetworkWriterWritePacked32);
dictionary.Add(Weaver.sbyteType.FullName, Weaver.NetworkWriterWritePacked32);
dictionary.Add(Weaver.charType.FullName, Weaver.NetworkWriterWritePacked32);
dictionary.Add(Weaver.decimalType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.decimalType));
dictionary.Add(Weaver.vector2Type.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.vector2Type));
dictionary.Add(Weaver.vector3Type.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.vector3Type));
dictionary.Add(Weaver.vector4Type.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.vector4Type));
dictionary.Add(Weaver.colorType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.colorType));
dictionary.Add(Weaver.color32Type.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.color32Type));
dictionary.Add(Weaver.quaternionType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.quaternionType));
dictionary.Add(Weaver.rectType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.rectType));
dictionary.Add(Weaver.planeType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.planeType));
dictionary.Add(Weaver.rayType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.rayType));
dictionary.Add(Weaver.matrixType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.matrixType));
dictionary.Add(Weaver.hashType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.hashType));
dictionary.Add(Weaver.gameObjectType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.gameObjectType));
dictionary.Add(Weaver.NetworkIdentityType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.NetworkIdentityType));
dictionary.Add(Weaver.NetworkInstanceIdType.FullName, Weaver.NetworkWriterWriteNetworkInstanceId);
dictionary.Add(Weaver.NetworkSceneIdType.FullName, Weaver.NetworkWriterWriteNetworkSceneId);
dictionary.Add(Weaver.transformType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.transformType));
dictionary.Add("System.Byte[]", Weaver.ResolveMethod(Weaver.NetworkWriterType, "WriteBytesFull"));
dictionary.Add(Weaver.SyncListFloatType.FullName, Weaver.SyncListFloatWriteType);
dictionary.Add(Weaver.SyncListIntType.FullName, Weaver.SyncListIntWriteType);
dictionary.Add(Weaver.SyncListUIntType.FullName, Weaver.SyncListUIntWriteType);
dictionary.Add(Weaver.SyncListBoolType.FullName, Weaver.SyncListBoolWriteType);
dictionary.Add(Weaver.SyncListStringType.FullName, Weaver.SyncListStringWriteType);
var dictionary = new Dictionary<string, MethodReference>
{
{ Weaver.singleType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.singleType) },
{ Weaver.doubleType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.doubleType) },
{ Weaver.boolType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.boolType) },
{ Weaver.stringType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.stringType) },
{ Weaver.int64Type.FullName, Weaver.NetworkWriterWritePacked64 },
{ Weaver.uint64Type.FullName, Weaver.NetworkWriterWritePacked64 },
{ Weaver.int32Type.FullName, Weaver.NetworkWriterWritePacked32 },
{ Weaver.uint32Type.FullName, Weaver.NetworkWriterWritePacked32 },
{ Weaver.int16Type.FullName, Weaver.NetworkWriterWritePacked32 },
{ Weaver.uint16Type.FullName, Weaver.NetworkWriterWritePacked32 },
{ Weaver.byteType.FullName, Weaver.NetworkWriterWritePacked32 },
{ Weaver.sbyteType.FullName, Weaver.NetworkWriterWritePacked32 },
{ Weaver.charType.FullName, Weaver.NetworkWriterWritePacked32 },
{ Weaver.decimalType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.decimalType) },
{ Weaver.vector2Type.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.vector2Type) },
{ Weaver.vector3Type.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.vector3Type) },
{ Weaver.vector4Type.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.vector4Type) },
{ Weaver.colorType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.colorType) },
{ Weaver.color32Type.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.color32Type) },
{ Weaver.quaternionType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.quaternionType) },
{ Weaver.rectType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.rectType) },
{ Weaver.planeType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.planeType) },
{ Weaver.rayType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.rayType) },
{ Weaver.matrixType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.matrixType) },
{ Weaver.hashType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.hashType) },
{ Weaver.gameObjectType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.gameObjectType) },
{ Weaver.NetworkIdentityType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.NetworkIdentityType) },
{ Weaver.NetworkInstanceIdType.FullName, Weaver.NetworkWriterWriteNetworkInstanceId },
{ Weaver.NetworkSceneIdType.FullName, Weaver.NetworkWriterWriteNetworkSceneId },
{ Weaver.transformType.FullName, Weaver.ResolveMethodWithArg(Weaver.NetworkWriterType, "Write", Weaver.transformType) },
{ "System.Byte[]", Weaver.ResolveMethod(Weaver.NetworkWriterType, "WriteBytesFull") },
{ Weaver.SyncListFloatType.FullName, Weaver.SyncListFloatWriteType },
{ Weaver.SyncListIntType.FullName, Weaver.SyncListIntWriteType },
{ Weaver.SyncListUIntType.FullName, Weaver.SyncListUIntWriteType },
{ Weaver.SyncListBoolType.FullName, Weaver.SyncListBoolWriteType },
{ Weaver.SyncListStringType.FullName, Weaver.SyncListStringWriteType }
};
weaverLists.writeFuncs = dictionary;
}

View File

@ -1,8 +1,5 @@
using Mono.Cecil;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QNetWeaver
{

View File

@ -1,8 +1,4 @@
using QSB.Utility;
using QuantumUNET;
using QuantumUNET.Transport;
using System;
using System.Runtime.InteropServices;
using QuantumUNET;
using UnityEngine;
using UnityEngine.Networking;

View File

@ -1,6 +1,6 @@
using QSB.Events;
using QSB.Tools;
using QSB.Syncs.TransformSync;
using QSB.Tools;
using QSB.Utility;
using UnityEngine;

View File

@ -1,7 +1,7 @@
using OWML.Common;
using QSB.Player;
using QSB.Tools;
using QSB.Syncs.TransformSync;
using QSB.Tools;
using QSB.Utility;
using UnityEngine;