Cleanup/Housekeeping (#242)

This commit is contained in:
Kamron Batman 2020-09-12 15:31:21 -07:00 committed by GitHub
parent 90ede0659f
commit 741e8d8300
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
228 changed files with 6292 additions and 2690 deletions

View file

@ -1,23 +1,3 @@
/***************************************************************************
* World.cs
* -------------------
* begin : May 1, 2002
* copyright : (C) The RunUO Software Team
* email : info@runuo.com
*
* $Id$
*
***************************************************************************/
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
using System;
using System.Collections.Generic;
using System.Diagnostics;
@ -67,7 +47,10 @@ namespace Server
public static void NotifyDiskWriteComplete()
{
if (m_DiskWriteHandle.Set()) Console.WriteLine("Closing Save Files. ");
if (m_DiskWriteHandle.Set())
{
Console.WriteLine("Closing Save Files. ");
}
}
public static void WaitForWriteCompletion()
@ -79,7 +62,10 @@ namespace Server
{
if (Saving || Loading)
{
if (Saving) AppendSafetyLog("delete", entity);
if (Saving)
{
AppendSafetyLog("delete", entity);
}
_deleteQueue.Enqueue(entity);
@ -94,17 +80,25 @@ namespace Server
Packet p;
if (ascii)
{
p = new AsciiMessage(Serial.MinusOne, -1, MessageType.Regular, hue, 3, "System", text);
}
else
{
p = new UnicodeMessage(Serial.MinusOne, -1, MessageType.Regular, hue, 3, "ENU", "System", text);
}
var list = TcpServer.Instances;
p.Acquire();
for (var i = 0; i < list.Count; ++i)
{
if (list[i].Mobile != null)
{
list[i].Send(p);
}
}
p.Release();
}
@ -147,9 +141,13 @@ namespace Server
var ctor = t.GetConstructor(m_SerialTypeArray);
if (ctor != null)
{
types.Add(new Tuple<ConstructorInfo, string>(ctor, typeName));
}
else
{
throw new Exception($"Type '{t}' does not have a serialization constructor");
}
}
return types;
@ -158,7 +156,9 @@ namespace Server
public static void Load()
{
if (Loaded)
{
return;
}
Loaded = true;
LoadingType = null;
@ -202,7 +202,9 @@ namespace Server
var objs = types[typeID];
if (objs == null)
{
continue;
}
Mobile m = null;
var ctor = objs.Item1;
@ -257,7 +259,9 @@ namespace Server
var objs = types[typeID];
if (objs == null)
{
continue;
}
Item item = null;
var ctor = objs.Item1;
@ -307,7 +311,9 @@ namespace Server
EventSink.InvokeCreateGuild(createEventArgs);
var guild = createEventArgs.Guild;
if (guild != null)
{
guilds.Add(new GuildEntry(guild, pos, length));
}
}
idxReader.Close();
@ -339,7 +345,9 @@ namespace Server
m.Deserialize(reader);
if (reader.Position != entry.Position + entry.Length)
{
throw new Exception($"***** Bad serialize on {m.GetType()} *****");
}
}
catch (Exception e)
{
@ -379,7 +387,9 @@ namespace Server
item.Deserialize(reader);
if (reader.Position != entry.Position + entry.Length)
{
throw new Exception($"***** Bad serialize on {item.GetType()} *****");
}
}
catch (Exception e)
{
@ -420,7 +430,9 @@ namespace Server
g.Deserialize(reader);
if (reader.Position != entry.Position + entry.Length)
{
throw new Exception($"***** Bad serialize on Guild {g.Serial} *****");
}
}
catch (Exception e)
{
@ -458,17 +470,33 @@ namespace Server
if (Console.ReadKey(true).Key == ConsoleKey.Y)
{
if (failedMobiles)
{
for (var i = 0; i < mobiles.Count;)
{
if (mobiles[i].TypeID == failedTypeID)
{
mobiles.RemoveAt(i);
}
else
{
++i;
}
}
}
else if (failedItems)
{
for (var i = 0; i < items.Count;)
{
if (items[i].TypeID == failedTypeID)
{
items.RemoveAt(i);
}
else
{
++i;
}
}
}
}
}
@ -495,7 +523,9 @@ namespace Server
foreach (var item in Items.Values)
{
if (item.Parent == null)
{
item.UpdateTotals();
}
item.ClearProperties();
}
@ -525,9 +555,13 @@ namespace Server
var entity = _addQueue.Dequeue();
if (entity is Item item)
{
AddItem(item);
}
else if (entity is Mobile mob)
{
AddMobile(mob);
}
}
while (_deleteQueue.Count > 0)
@ -535,9 +569,13 @@ namespace Server
var entity = _deleteQueue.Dequeue();
if (entity is Item item)
{
item.Delete();
}
else if (entity is Mobile mob)
{
mob.Delete();
}
}
}
@ -564,13 +602,19 @@ namespace Server
private static void SaveIndex<T>(List<T> list, string path) where T : IEntityEntry
{
if (!Directory.Exists("Saves/Mobiles/"))
{
Directory.CreateDirectory("Saves/Mobiles/");
}
if (!Directory.Exists("Saves/Items/"))
{
Directory.CreateDirectory("Saves/Items/");
}
if (!Directory.Exists("Saves/Guilds/"))
{
Directory.CreateDirectory("Saves/Guilds/");
}
using var idx = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None);
var idxWriter = new BinaryWriter(idx);
@ -598,7 +642,9 @@ namespace Server
public static void Save(bool message, bool permitBackgroundWrite)
{
if (Saving)
{
return;
}
++m_Saves;
@ -611,7 +657,9 @@ namespace Server
m_DiskWriteHandle.Reset();
if (message)
{
Broadcast(0x35, true, "The world is saving, please wait.");
}
var strategy = SaveStrategy.Acquire();
Console.WriteLine("Core: Using {0} save strategy", strategy.Name.ToLower());
@ -621,11 +669,19 @@ namespace Server
var watch = Stopwatch.StartNew();
if (!Directory.Exists("Saves/Mobiles/"))
{
Directory.CreateDirectory("Saves/Mobiles/");
}
if (!Directory.Exists("Saves/Items/"))
{
Directory.CreateDirectory("Saves/Items/");
}
if (!Directory.Exists("Saves/Guilds/"))
{
Directory.CreateDirectory("Saves/Guilds/");
}
strategy.Save(permitBackgroundWrite);
@ -643,7 +699,9 @@ namespace Server
Saving = false;
if (!permitBackgroundWrite)
{
NotifyDiskWriteComplete(); // Sets the DiskWriteHandle. If we allow background writes, we leave this upto the individual save strategies.
}
ProcessSafetyQueues();
@ -652,12 +710,14 @@ namespace Server
Console.WriteLine("Save done in {0:F2} seconds.", watch.Elapsed.TotalSeconds);
if (message)
{
Broadcast(
0x35,
true,
"World save complete. The entire process took {0:F1} seconds.",
watch.Elapsed.TotalSeconds
);
}
NetState.Resume();
}
@ -665,9 +725,14 @@ namespace Server
public static IEntity FindEntity(Serial serial)
{
if (serial.IsItem)
{
return FindItem(serial);
}
if (serial.IsMobile)
{
return FindMobile(serial);
}
return null;
}