fix(core): Adds SkipLocalsInitAttribute support, optimizes broadcasted packets (#363)

- [X] Adds support for `SkipLocalsInitAttribute`. SkipLocalsInitAttribute skips initializing stack variables including `stackalloc`. I don't think it is wired/working yet but should be implemented soon.
- [X] Optimizes broadcasted packets by checking if the first byte (packet ID) is non-zero. If it is already set, it reuses the buffer.
- [X] Removes unnecessary refs to Spans. I don't think the Span struct itself is mutable, so a ref is not helpful.
This commit is contained in:
Kamron Batman 2020-12-26 12:46:06 -08:00 committed by GitHub
parent 9c9591b098
commit 03d0a4664e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
25 changed files with 478 additions and 285 deletions

View file

@ -43,8 +43,7 @@ namespace Server.Network
Span<byte> buffer = stackalloc byte[GetMaxMessageLocalizedLength(args)];
var length = CreateMessageLocalized(
ref buffer,
serial, graphic, type, hue, font, number, name, args
buffer, serial, graphic, type, hue, font, number, name, args
);
ns.Send(buffer.Slice(0, length));
@ -53,7 +52,7 @@ namespace Server.Network
public static int GetMaxMessageLocalizedLength(string args) => 50 + (args?.Length ?? 0) * 2;
public static int CreateMessageLocalized(
ref Span<byte> buffer,
Span<byte> buffer,
Serial serial, int graphic, MessageType type, int hue, int font, int number, string name = "", string args = ""
)
{
@ -95,8 +94,7 @@ namespace Server.Network
Span<byte> buffer = stackalloc byte[GetMaxMessageLocalizedAffixLength(affix, args)];
var length = CreateMessageLocalizedAffix(
ref buffer,
serial, graphic, type, hue, font, number, name, affixType, affix, args
buffer, serial, graphic, type, hue, font, number, name, affixType, affix, args
);
ns.Send(buffer.Slice(0, length));
@ -106,7 +104,7 @@ namespace Server.Network
52 + (affix?.Length ?? 0) + (args?.Length ?? 0) * 2;
public static int CreateMessageLocalizedAffix(
ref Span<byte> buffer,
Span<byte> buffer,
Serial serial, int graphic, MessageType type, int hue, int font, int number, string name,
AffixType affixType, string affix = "", string args = ""
)
@ -152,7 +150,7 @@ namespace Server.Network
Span<byte> buffer = stackalloc byte[GetMaxMessageLength(text)];
var length = CreateMessage(
ref buffer,
buffer,
serial,
graphic,
type,
@ -171,7 +169,7 @@ namespace Server.Network
public static int GetMaxMessageLength(string text) => 50 + (text?.Length ?? 0) * 2;
public static int CreateMessage(
ref Span<byte> buffer,
Span<byte> buffer,
Serial serial,
int graphic,
MessageType type,