fix: Reverts GetAccount to use IAccount. Adds IAccount to serialization. (#1565)

### Summary

- Fixes usernames not being `Intern`ed
- Reverts methods related to getting accounts from returning `Account` to `IAccount`.
- Makes `IAccount` also `ISerializable`
- Adds `IGenericReader.ReadAccount()` and `IGenericWriter.Write(IAccount)` -> The read method supports the original serialization of username, and using `IAccount.Serial`. The write method only serializes the `Serial`.
- Exposes `ReadStringRaw()` to allow some advanced scenarios.
This commit is contained in:
Kamron Batman 2023-10-25 19:17:57 -07:00 committed by GitHub
parent a4e2226a5c
commit e6d30fef0f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 201 additions and 19 deletions

View file

@ -0,0 +1,29 @@
using Server.Accounting;
namespace Server.Misc;
public static class SerializationExt
{
public static IAccount ReadAccount(this IGenericReader reader)
{
return reader.ReadByte() switch
{
0 => null,
1 => Accounts.GetAccount(reader.ReadStringRaw()),
2 => Accounts.FindAccount(reader.ReadSerial())
};
}
public static void Write(this IGenericWriter writer, IAccount acct)
{
if (acct == null)
{
writer.Write((byte)0);
}
else
{
writer.Write((byte)2);
writer.Write(acct.Serial);
}
}
}