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; } }