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

View File

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

View File

@ -1,9 +1,5 @@
using Mono.Cecil; using Mono.Cecil;
using Mono.Cecil.Cil; using Mono.Cecil.Cil;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QNetWeaver namespace QNetWeaver
{ {
@ -12,43 +8,43 @@ namespace QNetWeaver
public MessageClassProcessor(TypeDefinition td) public MessageClassProcessor(TypeDefinition td)
{ {
Weaver.DLog(td, "MessageClassProcessor for " + td.Name, new object[0]); Weaver.DLog(td, "MessageClassProcessor for " + td.Name, new object[0]);
this.m_td = td; m_td = td;
} }
public void Process() public void Process()
{ {
Weaver.DLog(this.m_td, "MessageClassProcessor Start", new object[0]); Weaver.DLog(m_td, "MessageClassProcessor Start", new object[0]);
Weaver.ResetRecursionCount(); Weaver.ResetRecursionCount();
this.GenerateSerialization(); GenerateSerialization();
if (!Weaver.fail) if (!Weaver.fail)
{ {
this.GenerateDeSerialization(); GenerateDeSerialization();
Weaver.DLog(this.m_td, "MessageClassProcessor Done", new object[0]); Weaver.DLog(m_td, "MessageClassProcessor Done", new object[0]);
} }
} }
private void GenerateSerialization() private void GenerateSerialization()
{ {
Weaver.DLog(this.m_td, " MessageClass GenerateSerialization", new object[0]); Weaver.DLog(m_td, " MessageClass GenerateSerialization", new object[0]);
foreach (var methodDefinition in this.m_td.Methods) foreach (var methodDefinition in m_td.Methods)
{ {
if (methodDefinition.Name == "Serialize") 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; 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; Weaver.fail = true;
Log.Error(string.Concat(new string[] Log.Error(string.Concat(new string[]
{ {
"GenerateSerialization for ", "GenerateSerialization for ",
this.m_td.Name, m_td.Name,
" [", " [",
fieldDefinition.FullName, fieldDefinition.FullName,
"]. [MessageBase] member cannot be self referencing." "]. [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); 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))); methodDefinition2.Parameters.Add(new ParameterDefinition("writer", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(Weaver.NetworkWriterType)));
var ilprocessor = methodDefinition2.Body.GetILProcessor(); 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) if (!fieldDefinition2.IsStatic && !fieldDefinition2.IsPrivate && !fieldDefinition2.IsSpecialName)
{ {
@ -69,7 +65,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new object[] Log.Error(string.Concat(new object[]
{ {
"GenerateSerialization for ", "GenerateSerialization for ",
this.m_td.Name, m_td.Name,
" [", " [",
fieldDefinition2.FieldType, fieldDefinition2.FieldType,
"/", "/",
@ -84,7 +80,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new object[] Log.Error(string.Concat(new object[]
{ {
"GenerateSerialization for ", "GenerateSerialization for ",
this.m_td.Name, m_td.Name,
" [", " [",
fieldDefinition2.FieldType, fieldDefinition2.FieldType,
"/", "/",
@ -100,7 +96,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new object[] Log.Error(string.Concat(new object[]
{ {
"GenerateSerialization for ", "GenerateSerialization for ",
this.m_td.Name, m_td.Name,
" unknown type [", " unknown type [",
fieldDefinition2.FieldType, fieldDefinition2.FieldType,
"/", "/",
@ -116,26 +112,26 @@ namespace QNetWeaver
} }
} }
ilprocessor.Append(ilprocessor.Create(OpCodes.Ret)); ilprocessor.Append(ilprocessor.Create(OpCodes.Ret));
this.m_td.Methods.Add(methodDefinition2); m_td.Methods.Add(methodDefinition2);
} }
} }
private void GenerateDeSerialization() private void GenerateDeSerialization()
{ {
Weaver.DLog(this.m_td, " GenerateDeserialization", new object[0]); Weaver.DLog(m_td, " GenerateDeserialization", new object[0]);
foreach (var methodDefinition in this.m_td.Methods) foreach (var methodDefinition in m_td.Methods)
{ {
if (methodDefinition.Name == "Deserialize") if (methodDefinition.Name == "Deserialize")
{ {
return; 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); 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))); methodDefinition2.Parameters.Add(new ParameterDefinition("reader", ParameterAttributes.None, Weaver.scriptDef.MainModule.ImportReference(Weaver.NetworkReaderType)));
var ilprocessor = methodDefinition2.Body.GetILProcessor(); 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) if (!fieldDefinition.IsStatic && !fieldDefinition.IsPrivate && !fieldDefinition.IsSpecialName)
{ {
@ -146,7 +142,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new object[] Log.Error(string.Concat(new object[]
{ {
"GenerateDeSerialization for ", "GenerateDeSerialization for ",
this.m_td.Name, m_td.Name,
" unknown type [", " unknown type [",
fieldDefinition.FieldType, fieldDefinition.FieldType,
"]. [SyncVar] member variables must be basic types." "]. [SyncVar] member variables must be basic types."
@ -160,7 +156,7 @@ namespace QNetWeaver
} }
} }
ilprocessor.Append(ilprocessor.Create(OpCodes.Ret)); 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 Mono.Cecil;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace QNetWeaver namespace QNetWeaver
{ {
internal class MonoBehaviourProcessor internal class MonoBehaviourProcessor
{ {
public MonoBehaviourProcessor(TypeDefinition td) public MonoBehaviourProcessor(TypeDefinition td) => m_td = td;
{
this.m_td = td;
}
public void Process() public void Process()
{ {
this.ProcessSyncVars(); ProcessSyncVars();
this.ProcessMethods(); ProcessMethods();
} }
private void ProcessSyncVars() private void ProcessSyncVars()
{ {
foreach (var fieldDefinition in this.m_td.Fields) foreach (var fieldDefinition in m_td.Fields)
{ {
foreach (var customAttribute in fieldDefinition.CustomAttributes) foreach (var customAttribute in fieldDefinition.CustomAttributes)
{ {
@ -30,7 +23,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new string[] Log.Error(string.Concat(new string[]
{ {
"Script ", "Script ",
this.m_td.FullName, m_td.FullName,
" uses [SyncVar] ", " uses [SyncVar] ",
fieldDefinition.Name, fieldDefinition.Name,
" but is not a NetworkBehaviour." " but is not a NetworkBehaviour."
@ -40,7 +33,7 @@ namespace QNetWeaver
} }
if (Helpers.InheritsFromSyncList(fieldDefinition.FieldType)) 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; Weaver.fail = true;
} }
} }
@ -48,7 +41,7 @@ namespace QNetWeaver
private void ProcessMethods() private void ProcessMethods()
{ {
foreach (var methodDefinition in this.m_td.Methods) foreach (var methodDefinition in m_td.Methods)
{ {
foreach (var customAttribute in methodDefinition.CustomAttributes) foreach (var customAttribute in methodDefinition.CustomAttributes)
{ {
@ -57,7 +50,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new string[] Log.Error(string.Concat(new string[]
{ {
"Script ", "Script ",
this.m_td.FullName, m_td.FullName,
" uses [Command] ", " uses [Command] ",
methodDefinition.Name, methodDefinition.Name,
" but is not a NetworkBehaviour." " but is not a NetworkBehaviour."
@ -69,7 +62,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new string[] Log.Error(string.Concat(new string[]
{ {
"Script ", "Script ",
this.m_td.FullName, m_td.FullName,
" uses [ClientRpc] ", " uses [ClientRpc] ",
methodDefinition.Name, methodDefinition.Name,
" but is not a NetworkBehaviour." " but is not a NetworkBehaviour."
@ -81,7 +74,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new string[] Log.Error(string.Concat(new string[]
{ {
"Script ", "Script ",
this.m_td.FullName, m_td.FullName,
" uses [TargetRpc] ", " uses [TargetRpc] ",
methodDefinition.Name, methodDefinition.Name,
" but is not a NetworkBehaviour." " but is not a NetworkBehaviour."
@ -94,7 +87,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new string[] Log.Error(string.Concat(new string[]
{ {
"Script ", "Script ",
this.m_td.FullName, m_td.FullName,
" uses the attribute [Server] on the method ", " uses the attribute [Server] on the method ",
methodDefinition.Name, methodDefinition.Name,
" but is not a NetworkBehaviour." " but is not a NetworkBehaviour."
@ -106,7 +99,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new string[] Log.Error(string.Concat(new string[]
{ {
"Script ", "Script ",
this.m_td.FullName, m_td.FullName,
" uses the attribute [ServerCallback] on the method ", " uses the attribute [ServerCallback] on the method ",
methodDefinition.Name, methodDefinition.Name,
" but is not a NetworkBehaviour." " but is not a NetworkBehaviour."
@ -118,7 +111,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new string[] Log.Error(string.Concat(new string[]
{ {
"Script ", "Script ",
this.m_td.FullName, m_td.FullName,
" uses the attribute [Client] on the method ", " uses the attribute [Client] on the method ",
methodDefinition.Name, methodDefinition.Name,
" but is not a NetworkBehaviour." " but is not a NetworkBehaviour."
@ -130,7 +123,7 @@ namespace QNetWeaver
Log.Error(string.Concat(new string[] Log.Error(string.Concat(new string[]
{ {
"Script ", "Script ",
this.m_td.FullName, m_td.FullName,
" uses the attribute [ClientCallback] on the method ", " uses the attribute [ClientCallback] on the method ",
methodDefinition.Name, methodDefinition.Name,
" but is not a NetworkBehaviour." " 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;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Text;
namespace QNetWeaver namespace QNetWeaver
{ {
public class Program public class Program
{ {
static void Main(string[] args) private static void Main(string[] args)
{ {
Console.WriteLine("Start!"); Console.WriteLine("Start!");

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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