Skip to content

Commit

Permalink
inventory and database
Browse files Browse the repository at this point in the history
  • Loading branch information
bierdosenhalter committed Dec 4, 2024
1 parent 5e6bc01 commit e1413f2
Show file tree
Hide file tree
Showing 19 changed files with 397 additions and 248 deletions.
4 changes: 2 additions & 2 deletions Client/Chat/ChatManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ public void InitInGame()
_dynamicChannelIdLeaf[i] = null;

// get
var name = _databaseManager?.GetDbProp($"SERVER:DYN_CHAT:CHANNEL{i}:NAME", false);
var id = _databaseManager?.GetDbProp($"SERVER:DYN_CHAT:CHANNEL{i}:ID", false);
var name = _databaseManager?.GetServerNode($"SERVER:DYN_CHAT:CHANNEL{i}:NAME", false);
var id = _databaseManager?.GetServerNode($"SERVER:DYN_CHAT:CHANNEL{i}:ID", false);

if (name != null && id != null)
{
Expand Down
2 changes: 1 addition & 1 deletion Client/Commands/ChatLog.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public override string Run(IClient handler, string command, Dictionary<string, o
ryzomClient.GetLogger().Info("Log turned on");
}

var node = ryzomClient.GetDatabaseManager().GetDbProp("UI:SAVE:CHATLOG_STATE", false);
var node = ryzomClient.GetDatabaseManager().GetServerNode("UI:SAVE:CHATLOG_STATE", false);
node?.SetValue32(ryzomClient.LogState ? 1 : 0);

return "";
Expand Down
4 changes: 2 additions & 2 deletions Client/Commands/Db.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public override string Run(IClient handler, string command, Dictionary<string, o
var value = long.Parse(args[1], CultureInfo.InvariantCulture);

// Set the property.
var prop = ryzomClient.GetDatabaseManager().GetDbProp(args[0], false);
var prop = ryzomClient.GetDatabaseManager().GetNode(args[0], true);

if (prop == null)
return $"{args[0]} was not found in the database.";
Expand All @@ -45,7 +45,7 @@ public override string Run(IClient handler, string command, Dictionary<string, o
}
case 1:
{
var prop = ryzomClient.GetDatabaseManager().GetDbProp(args[0], false);
var prop = ryzomClient.GetDatabaseManager().GetNode(args[0], false);

if (prop == null)
return $"{args[0]} was not found in the database.";
Expand Down
67 changes: 34 additions & 33 deletions Client/Database/DatabaseManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
using System.IO;
using System.Xml;
using API.Database;
using Client.Network;
using Client.Stream;

namespace Client.Database
Expand Down Expand Up @@ -47,13 +46,13 @@ public enum BankIdentifiers { CdbPlayer = 0, CdbGuild = 1, /* CDBContinent, */ C
/// <summary>
/// Manages the bank names and mappings
/// </summary>
protected BankHandler BankHandler;
private readonly BankHandler _bankHandler;

// TODO: check server and client database structures
private DatabaseNodeBranch _serverDatabase;
private readonly DatabaseNodeBranch _serverDatabase;

// TODO: non static database
private static DatabaseNodeBranch _database;
private static DatabaseNodeBranch _rootDatabase;

/// <summary>Pointer to the ryzom client</summary>
private readonly RyzomClient _client;
Expand All @@ -65,10 +64,10 @@ public DatabaseManager(RyzomClient client)
{
_client = client;

//_database = new DatabaseNodeBranch("ROOT");
_rootDatabase = new DatabaseNodeBranch("ROOT");
_serverDatabase = new DatabaseNodeBranch("SERVER");

BankHandler = new BankHandler((uint)BankIdentifiers.NbCdbBanks);
_bankHandler = new BankHandler((uint)BankIdentifiers.NbCdbBanks);

_initInProgress = true;
_initDeltaReceived = 0;
Expand All @@ -78,15 +77,12 @@ public DatabaseManager(RyzomClient client)
/// Return a ptr on the database node
/// </summary>
/// <returns>ptr on the database node</returns>
public DatabaseNodeBranch GetNodePtr() { return _serverDatabase; }
public DatabaseNodeBranch GetServerDb() { return _serverDatabase; }

/// <summary>
/// Returns the root branch of the database.
/// </summary>
public DatabaseNodeBranch GetDb()
{
return _database ??= new DatabaseNodeBranch("ROOT");
}
public DatabaseNodeBranch GetRootDb() { return _rootDatabase; }


/// <summary>
Expand All @@ -104,12 +100,12 @@ public void Init(string fileName, Action progressCallBack)
file.Load(fileName);

// Parse the parser output!!!
BankHandler.ResetNodeBankMapping(); // in case the game is restarted from start
BankHandler.FillBankNames(BankNames, (uint)(BankIdentifiers.InvalidCdbBank + 1));
_bankHandler.ResetNodeBankMapping(); // in case the game is restarted from start
_bankHandler.FillBankNames(BankNames, (uint)(BankIdentifiers.InvalidCdbBank + 1));

_serverDatabase ??= new DatabaseNodeBranch("SERVER"); // redundant?
//_serverDatabase ??= new DatabaseNodeBranch("SERVER"); // redundant?

_serverDatabase.Init(file.DocumentElement, progressCallBack, true, BankHandler);
_serverDatabase.Init(file.DocumentElement, progressCallBack, true, _bankHandler);
}
catch (Exception e)
{
Expand All @@ -124,11 +120,11 @@ public void Init(string fileName, Action progressCallBack)
/// <param name="fileName">is the name of the backup file</param>
public void Write(string fileName)
{
if (_database != null)
if (_rootDatabase != null)
{
var f = new StreamWriter(fileName, false);

_database.Write(_database.GetName(), f);
_rootDatabase.Write(_rootDatabase.GetName(), f);
f.Close();
}
else
Expand Down Expand Up @@ -162,7 +158,7 @@ public void ReadDelta(uint gc, BitMemoryStream s, uint bank)

for (uint i = 0; i != propertyCount; ++i)
{
_serverDatabase.ReadAndMapDelta(gc, s, bank, BankHandler);
_serverDatabase.ReadAndMapDelta(gc, s, bank, _bankHandler);
}
}

Expand Down Expand Up @@ -218,58 +214,63 @@ private void WriteInitInProgressIntoUiDb()
public void ResetBank(in uint gc, in uint bank)
{
//_database.ResetNode(gc, BankHandler.GetUidForBank(bank));
_serverDatabase.ResetNode(gc, BankHandler.GetUidForBank(bank));
_serverDatabase.ResetNode(gc, _bankHandler.GetUidForBank(bank));
}

/// <inheritdoc />
public long GetProp(string name)
{
if (_database == null)
if (_rootDatabase == null)
throw new Exception("EDBNotInit");

var txtId = new TextId(name);
return _database.GetProp(txtId);
return _rootDatabase.GetProp(txtId);
}

/// <summary>
/// Retrieves a leaf node from the database.
/// </summary>
/// <param name="name">name of the data leaf node we are querying.</param>
/// <param name="create">when true if a node cannot be found it is created.</param>
public DatabaseNodeLeaf GetDbProp(string name, bool create = true)
public DatabaseNodeLeaf GetNode(string name, bool create = true)
{
return GetDbLeaf(name, create);
}
if (string.IsNullOrEmpty(name))
{
return null;
}

var leaf = _rootDatabase.GetNode(new TextId(name), create) as DatabaseNodeLeaf;
return leaf;
}

/// <summary>
/// Returns the specified leaf node from the database.
/// Retrieves a leaf node from the server database.
/// </summary>
/// <param name="name">The name of the leaf node.</param>
/// <param name="create">Specifies if the node should be created if it doesn't exist yet.</param>
private DatabaseNodeLeaf GetDbLeaf(string name, bool create)
/// <param name="name">name of the data leaf node we are querying.</param>
/// <param name="create">when true if a node cannot be found it is created.</param>
public DatabaseNodeLeaf GetServerNode(string name, bool create = true)
{
if (string.IsNullOrEmpty(name))
{
return null;
}

var leaf = GetNodePtr().GetNode(new TextId(name), create) as DatabaseNodeLeaf;
var leaf = _serverDatabase.GetNode(new TextId(name), create) as DatabaseNodeLeaf;
return leaf;
}

/// <summary>
/// Returns the specified branch node from the database.
/// Returns the specified branch node from the server database.
/// </summary>
/// <param name="name">The name of the branch.</param>

internal DatabaseNodeBranch GetDbBranch(string name)
internal DatabaseNodeBranch GetServerBranch(string name)
{
if (string.IsNullOrEmpty(name))
{
return null;
}

var branch = GetNodePtr().GetNode(new TextId(name), false) as DatabaseNodeBranch;
var branch = _serverDatabase.GetNode(new TextId(name), false) as DatabaseNodeBranch;
return branch;
}
}
Expand Down
29 changes: 29 additions & 0 deletions Client/Database/DatabaseNode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
using System.Xml;
using Client.Interface;
using Client.Stream;
using Client.Strings;

namespace Client.Database
{
Expand Down Expand Up @@ -137,5 +138,33 @@ internal enum EPropType
/// <param name="id">text id identifying the property</param>
/// <return>false if the node or observer doesn't exist</return>
public abstract bool RemoveObserver(IPropertyObserver observer, TextId id);

/// <summary>
/// Get the full name of this node separator is ':' (ie UI:INTERFACE:REDSTUFF).
/// This will not return the full name with the ROOT!
/// </summary>
public string GetFullName()
{
var sTmp = "";
_buildFullName(ref sTmp);
return sTmp;
}

/// <summary>
/// utility to build full name efficiently (without reallocating the string at each parent level)
/// </summary>
private void _buildFullName(ref string fullName)
{
// we do not want to recurse up to the ROOT node - we stop 1 level down from the root
if (GetParent() != null && GetParent().GetParent() != null)
{
GetParent()._buildFullName(ref fullName);
fullName += ":" + _name;
}
else
{
fullName = _name;
}
}
}
}
69 changes: 35 additions & 34 deletions Client/Database/DatabaseNodeLeaf.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ public class DatabaseNodeLeaf : DatabaseNode
private long _oldProperty;

/// <summary>true if this value has changed</summary>
bool _changed;
private bool _changed;
private DatabaseNodeBranch _Parent;

/// <summary>
/// bservers to call when the value really change
/// </summary>
readonly List<IPropertyObserver> _Observers = new List<IPropertyObserver>();
readonly List<IPropertyObserver> _observers = new List<IPropertyObserver>();

/// <summary>
/// constructor
Expand Down Expand Up @@ -170,19 +170,30 @@ internal override void ReadDelta(uint gc, BitMemoryStream f)
}
}

internal void SetValue8(byte uc)
/// <summary>
/// Return the value of the property before the database change
/// </summary>
public short GetOldValue16()
{
throw new NotImplementedException();
return (short)(_oldProperty & 0xffff);
}

internal void SetValue16(short quality)
/// <inheritdoc cref="SetValue64"/>
public void SetValue8(byte prop)
{
throw new NotImplementedException();
var newVal = (long)prop;
SetValue64(newVal);
}

/// <summary>
/// Set the value of the property
/// </summary>
/// <inheritdoc cref="SetValue64"/>
public void SetValue16(short prop)
{
var newVal = (long)prop;
SetValue64(newVal);

}

/// <inheritdoc cref="SetValue64"/>
internal void SetValue32(int prop)
{
var newVal = (long)prop;
Expand Down Expand Up @@ -313,59 +324,49 @@ internal override void Write(string id, StreamWriter f)
/// <summary>
/// Set the value of a property, only if gc>=_LastChangeGC
/// </summary>
internal bool SetPropCheckGC(uint gc, long value)
internal bool SetPropCheckGc(uint gc, long value)
{
// Apply only if happens after the DB change
if (gc >= _lastChangeGc)
{
// new recent date
_lastChangeGc = gc;
if (gc < _lastChangeGc)
return false;

// Set the property value (and set "_Changed" flag with 'true');
SetValue64(value);
// new recent date
_lastChangeGc = gc;

return true;
}
else
{
return false;
}
// Set the property value (and set "_Changed" flag with 'true');
SetValue64(value);

return true;
}

/// <inheritdoc/>
public override bool AddObserver(IPropertyObserver observer, TextId id)
{
_Observers.Add(observer);
_observers.Add(observer);
return true;
}

/// <inheritdoc/>
public override bool RemoveObserver(IPropertyObserver observer, TextId UnnamedParameter1)
public override bool RemoveObserver(IPropertyObserver observer, TextId unnamedParameter1)
{
if (!_Observers.Contains(observer))
if (!_observers.Contains(observer))
// no observer has been removed..
return false;

_Observers.Remove(observer);
_observers.Remove(observer);
return true;
}

/// <inheritdoc/>
public void NotifyObservers()
{
List<IPropertyObserver> obs = _Observers;

// notify observer
foreach (IPropertyObserver it in obs)
foreach (var it in _observers)
{
it.Update(this);
}

// mark parent branchs
if (_parent != null)
{
_parent.OnLeafChanged(_name);
}
_parent?.OnLeafChanged(_name);
}
}
}
4 changes: 2 additions & 2 deletions Client/Entity/CharacterEntity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -405,9 +405,9 @@ public override bool Build(EntitySheet sheet, RyzomClient client)
}

// Get the DB Entry
if (client.GetDatabaseManager().GetNodePtr() != null)
if (client.GetDatabaseManager().GetServerDb() != null)
{
if (client.GetDatabaseManager().GetNodePtr().GetNode(0) is DatabaseNodeBranch nodeRoot)
if (client.GetDatabaseManager().GetServerDb().GetNode(0) is DatabaseNodeBranch nodeRoot)
{
DbEntry = nodeRoot.GetNode(_slot) as DatabaseNodeBranch;

Expand Down
Loading

0 comments on commit e1413f2

Please sign in to comment.