using System.Reflection; using System.Text; using System.Text.Json; namespace OMS.NET.Common { public sealed class ServerConfig { private Dictionary _config = new(); /// /// 连接数据库的连接字符串 default Empty /// 默认不带数据库名称 /// public string ConnectionString => _config.TryGetValue("ConnectionString", out string? value) ? value : ""; /// /// 数据库名称 default map_db /// public string DataBaseName => _config.TryGetValue("DataBaseName", out string? value) ? value : "map_db"; /// /// 监听端口 default 8080 /// public string ListenPort => _config.TryGetValue("ListenPort", out string? value) ? value : "8080"; /// /// 是否开启匿名登录 default false /// public string AnonymousLogin => _config.TryGetValue("AnonymousLogin", out string? value) ? value : "false"; /// /// 地图的背景图片位置,图像尺寸为:220px * 165px 最大为60kb 支持PNG和jpg类型的图片格式 /// default ./map_img.png /// public string Img => _config.TryGetValue("ServerConfigImg", out string? value) ? value : "./map_img.png"; /// /// key是唯一的,长度不限,格式k[a-Z0-9],是客户端采用https://name.com/ + m/key 的方式快捷访问地图服务器的 /// default k0 /// public string Key => _config.TryGetValue("ServerConfigKey", out string? value) ? value : "k0"; /// /// 服务器websocket链接的地址 /// default 'ws://0.0.0.0:8080' /// public string Url => _config.TryGetValue("ServerConfigUrl", out string? value) ? value : "ws://0.0.0.0:8080"; /// /// 服务器名称 /// default 地图名称 /// public string Name => _config.TryGetValue("ServerConfigName", out string? value) ? value : "地图名称"; /// /// 服务器最大在线人数 /// default 20 /// public string MaxUser => _config.TryGetValue("ServerConfigMaxUser", out string? value) ? value : "20"; /// /// 最大高度 /// default 10000 /// public string MaxHeight => _config.TryGetValue("ServerConfigMaxHeight", out string? value) ? value : "10000"; /// /// 最小高度 /// default -10000 /// public string MinHeight => _config.TryGetValue("ServerConfigMinHeight", out string? value) ? value : "-10000"; /// /// 最大宽度 /// default 10000 /// public string MaxWidth => _config.TryGetValue("ServerConfigMaxWidth", out string? value) ? value : "10000"; /// /// 最小宽度 /// default -10000 /// public string MinWidth => _config.TryGetValue("ServerConfigMinWidth", out string? value) ? value : "-10000"; /// /// 区域内横轴和纵轴的最小层级下(layer0)每像素移动量单位 纵轴单位 /// default 1 /// public string Unit1Y => _config.TryGetValue("ServerConfigUnit1Y", out string? value) ? value : "1"; /// /// 区域内横轴和纵轴的最小层级下(layer0)每像素移动量单位 横轴单位 /// default 1 /// public string Unit1X => _config.TryGetValue("ServerConfigUnit1X", out string? value) ? value : "1"; /// /// 打开地图时的默认中心点 x /// default 0 /// public string P0X => _config.TryGetValue("ServerConfigP0X", out string? value) ? value : "0"; /// /// 打开地图时的默认中心点 y /// default 0 /// public string P0Y => _config.TryGetValue("ServerConfigP0Y", out string? value) ? value : "0"; /// /// 最大层级 /// default 5 /// public string MaxLayer => _config.TryGetValue("ServerConfigMaxLayer", out string? value) ? value : "default"; /// /// 最小层级 /// default 0 /// public string MinLayer => _config.TryGetValue("ServerConfigMinLayer", out string? value) ? value : "default"; /// /// 默认层级 /// default 0 /// public string DefaultLayer => _config.TryGetValue("ServerConfigDefaultLayer", out string? value) ? value : "0"; /// /// 默认缩放比例 /// default 1 /// public string ZoomAdd => _config.TryGetValue("ServerConfigZoomAdd", out string? value) ? value : "1"; /// /// 表示是否启用额外的底图服务 /// default false /// public string EnableBase => _config.TryGetValue("ServerConfigEnableBase", out string? value) ? value : "false"; /// /// 默认x /// default 0 /// public string DefaultX => _config.TryGetValue("ServerConfigDefaultX", out string? value) ? value : "0"; /// /// 默认y /// default 0 /// public string DefaultY => _config.TryGetValue("ServerConfigDefaultY", out string? value) ? value : "0"; /// /// 屏幕默认分辨率x /// default 1920 /// public string ResolutionX => _config.TryGetValue("ServerConfigResolutionX", out string? value) ? value : "1920"; /// /// 屏幕默认分辨率y /// default 980 /// public string ResolutionY => _config.TryGetValue("ServerConfigResolutionY", out string? value) ? value : "980"; /// /// 最大底图缩放等级 /// default 0 /// public string MaxZoom => _config.TryGetValue("ServerConfigMaxZoom", out string? value) ? value : "0"; /// /// 最小底图缩放等级 /// default 0 /// public string MinZoom => _config.TryGetValue("ServerConfigMinZoom", out string? value) ? value : "0"; /// /// 默认底图缩放等级 /// default 0 /// public string DefaultZoom => _config.TryGetValue("ServerConfigDefaultZoom", out string? value) ? value : "0"; /// /// 底图服务的服务器URL /// default empty /// public string BaseMapUrl => _config.TryGetValue("ServerConfigBaseMapUrl", out string? value) ? value : ""; /// /// 底图的默认类型 /// default empty /// public string ServerConfigBaseMapType => _config.TryGetValue("ServerConfigBaseMapType", out string? value) ? value : "realistic"; public ServerConfig() { //do nothing,everything default } public ServerConfig(string configPath) { if (!File.Exists(configPath)) { throw new FileNotFoundException("服务器配置文件未找到, path: " + configPath); } foreach (var line in File.ReadLines(configPath)) { // 忽略空行和注释行 var trimmedLine = line.Trim(); if (string.IsNullOrEmpty(trimmedLine) || trimmedLine.StartsWith("#")) { continue; } // 去掉行尾的注释 var commentIndex = trimmedLine.IndexOf('#'); if (commentIndex > -1) { trimmedLine = trimmedLine[..commentIndex].Trim(); } // 查找冒号的位置 var separatorIndex = trimmedLine.IndexOf(':'); if (separatorIndex > -1) { // 获取键和值,并去除冒号前后的空格 var key = trimmedLine[..separatorIndex].Trim(); var value = trimmedLine[(separatorIndex + 1)..].Trim(); // 将键值对添加到字典中 _config[key] = value; } } } public override string ToString() { StringBuilder stringBuilder = new(); foreach (var key in _config.Keys) { stringBuilder.AppendLine($"{key}:{_config[key]}"); } //通过属性访问 // stringBuilder.AppendLine("====加载默认值后的配置项===="); // Type type = this.GetType(); // PropertyInfo[] properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); // foreach (PropertyInfo property in properties) // { // if (property.CanRead && !property.CanWrite) // { // object? value = property.GetValue(this); // stringBuilder.AppendLine($"{property.Name} = {value}"); // } // } return stringBuilder.ToString(); } } }