Files
hjha-server/ServerCore/LuBan/TableManager.cs
xiaoou e9616125ce feat: initial commit - HJHA game server full source
6 major server modules (PdkFriendServer/GlobalSever/ServerCore/GameModule/GameNetModule) +
game logic (GameFix/GameDAL/ServerData) +
network layer (NetWorkMessage) +
data layer (ObjectModel) +
utilities (MrWu/Core/Config/CloudAPI/dll) +
adapters (zyxAdapter/base)

.NET 8.0 C# solution, 16 projects, 958 source files
2026-07-07 12:02:15 +08:00

153 lines
4.4 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using MrWu.Debug;
using Server.Core;
namespace Server
{
public class TableManager : SingleInstance<TableManager>
{
/// <summary>
/// 配置表版本 改了结构需要版本 + 1
/// 优化表格 2
/// 新增比赛赔率 3
/// 新增排队参数 4
/// 新增常量表 5
/// 新版道具系统 配置合并 6
/// 版本表修改 7
/// 增加实体兑换商城,修改普通兑换商城配置表
/// </summary>
public const string VERSION = "8";
/// <summary>
/// 之前的配置表数据
/// </summary>
private readonly Dictionary<string, byte[]> tableDatasBak = new Dictionary<string, byte[]>();
/// <summary>
/// 配置表数据
/// </summary>
private readonly Dictionary<string, byte[]> tableDatas = new Dictionary<string, byte[]>();
public NodeInfo NodeInfo
{
get;
private set;
}
private string GetConfigPath()
{
return $"C:/ConfigData/{VERSION}";
}
public static string GetRobotInfoPath()
{
return "C:/ConfigData/names_ts.txt";
}
public bool LoadTableData(string configPath = null)
{
if (string.IsNullOrEmpty(configPath))
{
configPath = GetConfigPath();
}
try
{
DirectoryInfo directoryInfo = new DirectoryInfo(configPath);
if (!directoryInfo.Exists)
{
Debug.Error("未找到配置表目录!");
return false;
}
foreach (FileInfo fileInfo in directoryInfo.GetFiles())
{
string fileName = Path.GetFileNameWithoutExtension(fileInfo.Name);
byte[] data = File.ReadAllBytes(fileInfo.FullName);
tableDatas[fileName] = data;
}
ServerConfigManager.Instance.RefreshData();
}
catch (Exception e)
{
Debug.Error($"读取配置表出错:{e.Message} {e.StackTrace}");
return false;
}
return true;
}
/// <summary>
/// 重新加载配置表
/// </summary>
/// <returns></returns>
public void ReLoadTableData()
{
tableDatasBak.Clear();
foreach (var item in tableDatas)
{
tableDatasBak.Add(item.Key, item.Value);
}
LoadTableData();
}
public void RollBack()
{
tableDatas.Clear();
foreach (var item in tableDatasBak)
{
tableDatas.Add(item.Key, item.Value);
}
}
public byte[] GetTableData(string tableName)
{
tableName = tableName.ToLower();
byte[] result = null;
Debug.Log($"tableName:{tableName}");
if (tableDatas.ContainsKey(tableName))
{
result = tableDatas[tableName];
tableDatas.Remove(tableName);
}
if (result != null)
{
Debug.Log("Table is not null!");
}
else
{
Debug.Log("table is null!" + tableName);
}
return result;
}
public bool ReadNodeInfo()
{
try
{
XmlDocument doc = new XmlDocument();
doc.Load(DirectoryManager.GetNodeConfigPath());
XmlNode node = doc.SelectSingleNode("NodeInfo");
NodeInfo nodeInfo = new NodeInfo();
nodeInfo.Id = byte.Parse(node.SelectSingleNode("Id").InnerText);
nodeInfo.NodeNum = byte.Parse(node.SelectSingleNode("NodeNum").InnerText);
NodeInfo = nodeInfo;
}
catch (Exception e)
{
Debug.Error($"读取节点信息出错! {e.Message}");
return false;
}
return true;
}
}
}