fix(core): Fixes several serialization issues (#355)
- [X] Fixes an issue where a buffer smaller than 8 bytes would not double with enough space in some cases. - [X] Fixes an issue with dupe copying the savebuffer reference (ugh). - [X] Streamlines the IGenericWriter API to use better generics. - [X] Streamlines the IGenericReader API to use better generics. - [X] Forces `tidying` of a List/HashSet to be done externally since Writers/Readers should not have side effects. - [X] Fixes an issue where Tidying a list didn't TrimExcess, causing memory leaks. - [X] Reverted the meaning of `World.Running` to specifically refer to any world state post world loading. - NOTE: Do not use this if you want to block on world saves. Instead use checks against `WorldState.Saving` states. - [X] Fixes an issue with serializing negative DateTime deltas. - [X] Fixes a potential issue with serializing non-UTC DateTime. Bumps release version
This commit is contained in:
parent
0888ab9b86
commit
4ddb3de026
162 changed files with 652 additions and 1045 deletions
|
|
@ -462,12 +462,12 @@ namespace Server.Items
|
|||
case 1:
|
||||
case 0:
|
||||
{
|
||||
Poster = reader.ReadMobile();
|
||||
Poster = reader.ReadEntity<Mobile>();
|
||||
Subject = reader.ReadString();
|
||||
Time = reader.ReadDateTime();
|
||||
LastPostTime = reader.ReadDateTime();
|
||||
var hasThread = reader.ReadBool();
|
||||
Thread = reader.ReadItem() as BulletinMessage;
|
||||
Thread = reader.ReadEntity<BulletinMessage>();
|
||||
PostedName = reader.ReadString();
|
||||
PostedBody = reader.ReadInt();
|
||||
PostedHue = reader.ReadInt();
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ namespace Server.Items
|
|||
writer.WriteEncodedInt(0); // version
|
||||
|
||||
writer.WriteEncodedInt(m_Charges);
|
||||
writer.WriteItemList(Receivers);
|
||||
writer.Write(Receivers);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
|
|
@ -181,7 +181,7 @@ namespace Server.Items
|
|||
var version = reader.ReadEncodedInt();
|
||||
|
||||
m_Charges = reader.ReadEncodedInt();
|
||||
Receivers = reader.ReadStrongItemList<ReceiverCrystal>();
|
||||
Receivers = reader.ReadEntityList<ReceiverCrystal>();
|
||||
}
|
||||
|
||||
private class InternalTarget : Target
|
||||
|
|
@ -394,7 +394,7 @@ namespace Server.Items
|
|||
|
||||
writer.WriteEncodedInt(0); // version
|
||||
|
||||
writer.WriteItem(m_Sender);
|
||||
writer.Write(m_Sender);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
|
|
@ -403,7 +403,7 @@ namespace Server.Items
|
|||
|
||||
var version = reader.ReadEncodedInt();
|
||||
|
||||
m_Sender = reader.ReadItem<BroadcastCrystal>();
|
||||
m_Sender = reader.ReadEntity<BroadcastCrystal>();
|
||||
}
|
||||
|
||||
private class InternalTarget : Target
|
||||
|
|
|
|||
|
|
@ -628,7 +628,7 @@ namespace Server.Items
|
|||
{
|
||||
if (reader.ReadBool())
|
||||
{
|
||||
RestoreEquip = reader.ReadStrongItemList();
|
||||
RestoreEquip = reader.ReadEntityList<Item>();
|
||||
}
|
||||
|
||||
goto case 11;
|
||||
|
|
@ -644,7 +644,7 @@ namespace Server.Items
|
|||
|
||||
for (var i = 0; i < count; ++i)
|
||||
{
|
||||
var item = reader.ReadItem();
|
||||
var item = reader.ReadEntity<Item>();
|
||||
|
||||
if (reader.ReadBool())
|
||||
{
|
||||
|
|
@ -661,11 +661,11 @@ namespace Server.Items
|
|||
BeginDecay(reader.ReadDeltaTime() - DateTime.UtcNow);
|
||||
}
|
||||
|
||||
Looters = reader.ReadStrongMobileList();
|
||||
Killer = reader.ReadMobile();
|
||||
Looters = reader.ReadEntityList<Mobile>();
|
||||
Killer = reader.ReadEntity<Mobile>();
|
||||
|
||||
Aggressors = reader.ReadStrongMobileList();
|
||||
Owner = reader.ReadMobile();
|
||||
Aggressors = reader.ReadEntityList<Mobile>();
|
||||
Owner = reader.ReadEntity<Mobile>();
|
||||
|
||||
m_CorpseName = reader.ReadString();
|
||||
|
||||
|
|
@ -673,7 +673,7 @@ namespace Server.Items
|
|||
reader.ReadInt(); // guild reserve
|
||||
Kills = reader.ReadInt();
|
||||
|
||||
EquipItems = reader.ReadStrongItemList();
|
||||
EquipItems = reader.ReadEntityList<Item>();
|
||||
break;
|
||||
}
|
||||
case 10:
|
||||
|
|
@ -688,7 +688,7 @@ namespace Server.Items
|
|||
|
||||
for (var i = 0; i < count; ++i)
|
||||
{
|
||||
var item = reader.ReadItem();
|
||||
var item = reader.ReadEntity<Item>();
|
||||
|
||||
if (reader.ReadBool())
|
||||
{
|
||||
|
|
@ -719,8 +719,8 @@ namespace Server.Items
|
|||
}
|
||||
case 6:
|
||||
{
|
||||
Looters = reader.ReadStrongMobileList();
|
||||
Killer = reader.ReadMobile();
|
||||
Looters = reader.ReadEntityList<Mobile>();
|
||||
Killer = reader.ReadEntity<Mobile>();
|
||||
|
||||
goto case 5;
|
||||
}
|
||||
|
|
@ -732,13 +732,13 @@ namespace Server.Items
|
|||
}
|
||||
case 4:
|
||||
{
|
||||
Aggressors = reader.ReadStrongMobileList();
|
||||
Aggressors = reader.ReadEntityList<Mobile>();
|
||||
|
||||
goto case 3;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
Owner = reader.ReadMobile();
|
||||
Owner = reader.ReadEntity<Mobile>();
|
||||
|
||||
goto case 2;
|
||||
}
|
||||
|
|
@ -781,7 +781,7 @@ namespace Server.Items
|
|||
Kills = reader.ReadInt();
|
||||
SetFlag(CorpseFlag.Criminal, reader.ReadBool());
|
||||
|
||||
EquipItems = reader.ReadStrongItemList();
|
||||
EquipItems = reader.ReadEntityList<Item>();
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -245,7 +245,7 @@ namespace Server.Items
|
|||
|
||||
m_Source = ReadEntity(reader);
|
||||
m_Target = ReadEntity(reader);
|
||||
Sequence = reader.ReadItem() as EffectController;
|
||||
Sequence = reader.ReadEntity<EffectController>();
|
||||
|
||||
FixedDirection = reader.ReadBool();
|
||||
Explodes = reader.ReadBool();
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@ namespace Server.Items
|
|||
}
|
||||
case 1:
|
||||
{
|
||||
Link = reader.ReadItem();
|
||||
Link = reader.ReadEntity<Item>();
|
||||
|
||||
goto case 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -155,7 +155,7 @@ namespace Server.Items
|
|||
|
||||
writer.WriteEncodedInt(0); // version
|
||||
|
||||
writer.WriteItemList(Keys);
|
||||
writer.Write(Keys);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
|
|
@ -164,7 +164,7 @@ namespace Server.Items
|
|||
|
||||
var version = reader.ReadEncodedInt();
|
||||
|
||||
Keys = reader.ReadStrongItemList<Key>();
|
||||
Keys = reader.ReadEntityList<Key>();
|
||||
}
|
||||
|
||||
private class InternalTarget : Target
|
||||
|
|
|
|||
|
|
@ -347,7 +347,7 @@ namespace Server.Items
|
|||
case 0:
|
||||
{
|
||||
Time = reader.ReadDateTime();
|
||||
Poster = reader.ReadMobile();
|
||||
Poster = reader.ReadEntity<Mobile>();
|
||||
Message = reader.ReadString();
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -930,7 +930,7 @@ namespace Server.Items
|
|||
|
||||
for (var i = 0; i < count; ++i)
|
||||
{
|
||||
var m = reader.ReadMobile();
|
||||
var m = reader.ReadEntity<Mobile>();
|
||||
var end = reader.ReadDateTime();
|
||||
|
||||
StartTimer(m, end - DateTime.UtcNow);
|
||||
|
|
@ -973,7 +973,7 @@ namespace Server.Items
|
|||
|
||||
writer.Write(0); // version
|
||||
|
||||
writer.WriteItem(Teleporter);
|
||||
writer.Write(Teleporter);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
|
|
@ -982,7 +982,7 @@ namespace Server.Items
|
|||
|
||||
var version = reader.ReadInt();
|
||||
|
||||
Teleporter = reader.ReadItem<TimeoutTeleporter>();
|
||||
Teleporter = reader.ReadEntity<TimeoutTeleporter>();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ namespace Server.Items
|
|||
{
|
||||
case 0:
|
||||
{
|
||||
m_Next = reader.ReadItem() as WayPoint;
|
||||
m_Next = reader.ReadEntity<WayPoint>();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue