Files
caliverse_server/ServerBase/Helper/ProgramVersionHelper.cs
2025-05-01 07:20:41 +09:00

139 lines
5.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NLog.LayoutRenderers.Wrappers;
using ServerCore; using ServerBase;
namespace ServerBase;
public static class ProgramVersionHelper
{
public static ServerErrorCode checkClientProgramVersion( ServerConfig config
, ServerProgramVersion serverProgramVersion
, ClientProgramVersion clientVersion )
{
ArgumentNullException.ThrowIfNull(config, $"config is null !!!");
ArgumentNullException.ThrowIfNull(serverProgramVersion, $"serverProgramVersion is null !!!");
var err_msg = string.Empty;
if (null == clientVersion)
{
err_msg = $"ClientProgramVersion is null !!!";
Log.getLogger().error(err_msg);
return ServerErrorCode.ClientProgramVersionIsNull;
}
var version_paths = config.getVersionPaths();
ArgumentNullException.ThrowIfNull(version_paths, $"version_paths is null !!!");
foreach ( var each in version_paths )
{
var version_type = each.Key;
switch(version_type)
{
case ProgramVersionType.MetaSchemaVersion:
if (serverProgramVersion.MetaSchemaVersion != clientVersion.MetaSchemaVersion)
{
err_msg = $"Not match MetaSchema Version !!! : serverMetaSchemaVersion:{serverProgramVersion.MetaSchemaVersion} == clientMetaSchemaVersion:{clientVersion.MetaSchemaVersion}";
Log.getLogger().error(err_msg);
return ServerErrorCode.MetaSchemaVersionNotMatch;
}
break;
case ProgramVersionType.MetaDataVersion:
if (serverProgramVersion.MetaDataVersion != clientVersion.MetaDataVersion)
{
err_msg = $"Not match MetaData Version !!! : serverMetaDataVersion:{serverProgramVersion.MetaDataVersion} == clientMetaDataVersion:{clientVersion.MetaDataVersion}";
Log.getLogger().error(err_msg);
return ServerErrorCode.MetaDataVersionNotMatch;
}
break;
case ProgramVersionType.PacketVersion:
if (serverProgramVersion.PacketVersion != clientVersion.PacketVersion)
{
err_msg = $"Not match Packet Version !!! : serverPacketVersion:{serverProgramVersion.PacketVersion} == clientPacketVersion:{clientVersion.PacketVersion}";
Log.getLogger().error(err_msg);
return ServerErrorCode.PacketVersionNotMatch;
}
break;
case ProgramVersionType.ResourceVersion:
if (serverProgramVersion.ResourceVersion != clientVersion.ResourceVersion)
{
err_msg = $"Not match ResourceVersion Version !!! : serverPacketVersion:{serverProgramVersion.ResourceVersion} == clientResourceVersion:{clientVersion.ResourceVersion}";
Log.getLogger().error(err_msg);
return ServerErrorCode.ResourceVersionNotMatch;
}
break;
}
if (config.ClientMinimumRequiredLogicVersion > clientVersion.LogicVersion)
{
err_msg = $"Not match ClientLogic Version !!! : ClientMinimumRequiredLogicVersion:{config.ClientMinimumRequiredLogicVersion} <= clientLogicVersion:{clientVersion.LogicVersion}";
Log.getLogger().error(err_msg);
return ServerErrorCode.ClientLogicVersionNotMatch;
}
}
return ServerErrorCode.Success;
}
public static Result appendVersion( this ServerProgramVersion programVersion
, ProgramVersionType versionType
, Int32 buildVersion, Int32 revisionVersion )
{
var result = new Result();
switch(versionType)
{
case ProgramVersionType.MetaSchemaVersion:
programVersion.MetaSchemaVersion = (ulong)revisionVersion;
break;
case ProgramVersionType.MetaDataVersion:
programVersion.MetaDataVersion = (ulong)revisionVersion;
break;
case ProgramVersionType.DbSchemaVersion:
programVersion.DbSchemaVersion = (ulong)revisionVersion;
break;
case ProgramVersionType.PacketVersion:
programVersion.PacketVersion = (ulong)revisionVersion;
break;
case ProgramVersionType.ResourceVersion:
programVersion.ResourceVersion = (ulong)revisionVersion;
break;
case ProgramVersionType.ConfigVersion:
programVersion.ConfigVersion = (ulong)revisionVersion;
break;
case ProgramVersionType.LogicVersion:
var logic_version = new LogicVersion();
programVersion.LogicVersion = logic_version;
logic_version.Revision = revisionVersion;
break;
default:
var err_msg = $"Invaoid ProgramVersionType !!! : ProgramVersionType:{versionType}";
Log.getLogger().error(err_msg);
return result;
}
return result;
}
}