mirror of
https://github.com/MirrorNetworking/Mirror.git
synced 2024-11-18 11:00:32 +00:00
ServerClientAttributeProcessor: remove static weaverTypes reference
This commit is contained in:
parent
3f9c40cafd
commit
c89cbd02c5
@ -6,22 +6,22 @@ namespace Mirror.Weaver
|
||||
{
|
||||
static class ServerClientAttributeProcessor
|
||||
{
|
||||
public static bool Process(TypeDefinition td)
|
||||
public static bool Process(WeaverTypes weaverTypes, TypeDefinition td)
|
||||
{
|
||||
bool modified = false;
|
||||
foreach (MethodDefinition md in td.Methods)
|
||||
{
|
||||
modified |= ProcessSiteMethod(md);
|
||||
modified |= ProcessSiteMethod(weaverTypes, md);
|
||||
}
|
||||
|
||||
foreach (TypeDefinition nested in td.NestedTypes)
|
||||
{
|
||||
modified |= Process(nested);
|
||||
modified |= Process(weaverTypes, nested);
|
||||
}
|
||||
return modified;
|
||||
}
|
||||
|
||||
static bool ProcessSiteMethod(MethodDefinition md)
|
||||
static bool ProcessSiteMethod(WeaverTypes weaverTypes, MethodDefinition md)
|
||||
{
|
||||
if (md.Name == ".cctor" ||
|
||||
md.Name == NetworkBehaviourProcessor.ProcessedFunctionName ||
|
||||
@ -40,7 +40,7 @@ static bool ProcessSiteMethod(MethodDefinition md)
|
||||
|
||||
if (md.Body != null && md.Body.Instructions != null)
|
||||
{
|
||||
return ProcessMethodAttributes(md);
|
||||
return ProcessMethodAttributes(weaverTypes, md);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -63,50 +63,50 @@ public static bool HasServerClientAttribute(MethodDefinition md)
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool ProcessMethodAttributes(MethodDefinition md)
|
||||
public static bool ProcessMethodAttributes(WeaverTypes weaverTypes, MethodDefinition md)
|
||||
{
|
||||
if (md.HasCustomAttribute<ServerAttribute>())
|
||||
InjectServerGuard(md, true);
|
||||
InjectServerGuard(weaverTypes, md, true);
|
||||
else if (md.HasCustomAttribute<ServerCallbackAttribute>())
|
||||
InjectServerGuard(md, false);
|
||||
InjectServerGuard(weaverTypes, md, false);
|
||||
else if (md.HasCustomAttribute<ClientAttribute>())
|
||||
InjectClientGuard(md, true);
|
||||
InjectClientGuard(weaverTypes, md, true);
|
||||
else if (md.HasCustomAttribute<ClientCallbackAttribute>())
|
||||
InjectClientGuard(md, false);
|
||||
InjectClientGuard(weaverTypes, md, false);
|
||||
else
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void InjectServerGuard(MethodDefinition md, bool logWarning)
|
||||
static void InjectServerGuard(WeaverTypes weaverTypes, MethodDefinition md, bool logWarning)
|
||||
{
|
||||
ILProcessor worker = md.Body.GetILProcessor();
|
||||
Instruction top = md.Body.Instructions[0];
|
||||
|
||||
worker.InsertBefore(top, worker.Create(OpCodes.Call, Weaver.weaverTypes.NetworkServerGetActive));
|
||||
worker.InsertBefore(top, worker.Create(OpCodes.Call, weaverTypes.NetworkServerGetActive));
|
||||
worker.InsertBefore(top, worker.Create(OpCodes.Brtrue, top));
|
||||
if (logWarning)
|
||||
{
|
||||
worker.InsertBefore(top, worker.Create(OpCodes.Ldstr, $"[Server] function '{md.FullName}' called when server was not active"));
|
||||
worker.InsertBefore(top, worker.Create(OpCodes.Call, Weaver.weaverTypes.logWarningReference));
|
||||
worker.InsertBefore(top, worker.Create(OpCodes.Call, weaverTypes.logWarningReference));
|
||||
}
|
||||
InjectGuardParameters(md, worker, top);
|
||||
InjectGuardReturnValue(md, worker, top);
|
||||
worker.InsertBefore(top, worker.Create(OpCodes.Ret));
|
||||
}
|
||||
|
||||
static void InjectClientGuard(MethodDefinition md, bool logWarning)
|
||||
static void InjectClientGuard(WeaverTypes weaverTypes, MethodDefinition md, bool logWarning)
|
||||
{
|
||||
ILProcessor worker = md.Body.GetILProcessor();
|
||||
Instruction top = md.Body.Instructions[0];
|
||||
|
||||
worker.InsertBefore(top, worker.Create(OpCodes.Call, Weaver.weaverTypes.NetworkClientGetActive));
|
||||
worker.InsertBefore(top, worker.Create(OpCodes.Call, weaverTypes.NetworkClientGetActive));
|
||||
worker.InsertBefore(top, worker.Create(OpCodes.Brtrue, top));
|
||||
if (logWarning)
|
||||
{
|
||||
worker.InsertBefore(top, worker.Create(OpCodes.Ldstr, $"[Client] function '{md.FullName}' called when client was not active"));
|
||||
worker.InsertBefore(top, worker.Create(OpCodes.Call, Weaver.weaverTypes.logWarningReference));
|
||||
worker.InsertBefore(top, worker.Create(OpCodes.Call, weaverTypes.logWarningReference));
|
||||
}
|
||||
|
||||
InjectGuardParameters(md, worker, top);
|
||||
|
@ -101,7 +101,7 @@ static bool WeaveModule(ModuleDefinition moduleDefinition)
|
||||
if (td.IsClass && td.BaseType.CanBeResolved())
|
||||
{
|
||||
modified |= WeaveNetworkBehavior(td);
|
||||
modified |= ServerClientAttributeProcessor.Process(td);
|
||||
modified |= ServerClientAttributeProcessor.Process(weaverTypes, td);
|
||||
}
|
||||
}
|
||||
watch.Stop();
|
||||
|
Loading…
Reference in New Issue
Block a user