配置文件标准
配置文件是 Sonolus 服务器运行时的相关信息,您可以通过修改配置文件来修改 Sonolus 服务器的运行时行为。
请注意,由于本服务器不具备热重载功能,因此每次修改配置文件后,您都需要重新启动服务来使配置文件生效。
基础配置文件
在 /config/database.json
中:
class DatabaseUnit {
public:
string database = "sqlite" | "mysql"; // 数据库类型
string sqlite.dbfile = "sonolus.db"; // SQLite 数据库文件地址
string mysql.hostname = "127.0.0.1"; // MySQL 服务器监听地址。
int mysql.port = 3309; // MySQL 服务器监听端口。
string mysql.username = "root"; // MySQL 用户名。
string mysql.password = "root"; // MySQL 用户密码。
string mysql.database = "sonolus"; // MySQL 目标数据库名。
};
typedef vector<DatabaseUnit> DatabaseConfig;
在 /config/config.json
中:
enum LOG_TARGET {
LOG_TARGER_NONE = 0,
LOG_TARGET_CONSOLE = 1,
LOG_TARGET_FILE = 2
};
class BaseConfig {
public:
map<string, bool> tables = { // 指定各表的数据库源
{ "Level", 0 },
{ "Skin", 0 },
...
};
string server.listenHost = "0.0.0.0"; // 服务器监听 IP,0.0.0.0 为监听所有可用 IP
string server.listenPost = "8080"; // 服务器监听端口
string server.enableSSL = false; // 是否启用 SSL(https)
string server.httpsCacert = "cert.pem"; // 如果启用了 SSL,在此填入证书路径
string server.httpsPrivkey = "privkey.pem"; // 如果启用了 SSL,在此填入私钥路径
int server.threadNumber = 8; // 工作进程数
bool logSystem.debug = false; // 是否启用 Debug 模式
int logSystem.target = LOG_TARGET_CONSOLE; // 日志输出位置
string logSystem.targetFile = "./log.txt"; // 日志文件路径
string sonolus.version = "0.8.3"; // 支持的 Sonolus 版本,为空表示全部支持
int sonolus.itemsPerPage = 20; // 每页结果数(目前该配置为无效配置)
int session.expireTime = 30; // 会话过期时间(单位: 天)
int export.retryTime = 5; // 远程导出时连接重试次数
int export.hashCheckTime = 5; // 远程导出时哈希检查重试次数
};
单人游戏服务器配置文件
在 config/singleplayer_config.json
中:
class SingleplayerServerButton {
public:
string type; // 显示在服务器主页的按钮类型
};
class SingleplayerServerBanner {
public:
string name; // 导航图名称
string hash; // 导航图 SHA1 哈希
};
class SingleplayerServerDataPrefix {
public:
string name; // 路径前缀名
string url; // 使用外部资源文件时的路径前缀,为空表示使用本服务器上的资源
};
class SingleplayerConfig {
public:
string server.name = "Sonolus"; // 服务器名称
string server.title = "Test Server"; // 服务器标题
string server.description = "A Test Server for Sonolus"; // 服务器描述
string server.logo = "c3e27937fb9578065038d7988c6d4f955b584d95"; // 服务器图标 SHA1 哈希
string server.rootUrl = "127.0.0.1:8080"; // 服务器域名/地址
string server.multiplayer.address = "ws://127.0.0.1:8080"; // 多人游戏服务器地址
string language.default = "en" | "zhs" | "ja" | "ko"; // 默认语言包
vector<SingleplayerServerBanner> server.banner = { // 服务器导航图
{ name: "Default Banner", hash: "b4b42df0b336e852d14b4d334c3d99f8992626d8" }
};
vector<SingleplayerServerDataPrefix> server.data.prefix = { // 使用外部资源文件时的路径前缀
{ name: "Default Source", url: "" }
}
vector<SingleplayerServerButton> server.button = { // 显示在服务器主页的按钮,可重复
{ type: "authentication" },
{ type: "multiplayer" },
...
};
};
多人游戏服务器配置文件
在 config/multiplayer_config.json
中:
class MultiplayerConfig {
public:
bool server.multiplayer.enable = true; // 是否启用多人游戏服务器
bool server.multiplayer.allowOtherServers = true; // 是否允许选择其它服务器的关卡
};
各类型组件配置文件
在 config/<itemType>_config.json
中,其中 <itemType>
为组件类型:
class SectionConfig {
public:
string title; // 项目标题
string icon; // 项目图标
string filter; // 筛选时 SQL 代码
string order; // 排序时 SQL 代码
};
class SearchConfig {
public:
string title; // 搜索标题
string icon; // 搜索图标
string type; // 搜索类型
vector<Search> options; // 搜索选项
string filter; // 筛选时 SQL 代码
string order; // 排序时 SQL 代码
};
class CreateConfig {
public:
string title; // 资源创建标题
string icon; // 资源创建图标
string type; // 资源创建类型
vector<Search> options; // 资源创建选项
map<string, string> values; // 数据表各项 SQL 值
map<string, string> constructs; // 重构选项默认值时的 JavaScript 代码
};
class ItemTypeConfig {
public:
string itemType.enableLike = true; // 是否启用点赞功能
string itemType.enableComment = true; // 是否启用评论功能
string itemType.enableRating = true; // 是否启用评分功能
string itemType.enableGUICreate = false; // 是否允许用户在网页上创建该类型资源
string itemType.enableSonolusCreate = false; // 是否允许用户在 Sonolus 里创建该类型资源
vector<int> itemType.exceptGUICreate = {}; // 在网页创建的例外用户 uid
vector<int> itemType.exceptSonolusCreate = {}; // 在 Sonolus 里创建的例外用户 uid
int itemType.pageSize.info = 5; // 在信息界面中每个条目的资源数
int itemType.pageSize.list = 20; // 在搜索界面中每页显示的资源数
int itemType.pageSize.recommends = 5; // 在每个资源下方的各条目的推荐资源数
int itemType.pageSize.community = 5; // 在社区中每页显示的评论数
vector<SectionConfig> itemType.info.sections = {}; // 信息界面中各项目配置
vector<SectionConfig> itemType.details.sections = {}; // 资源下方各项目配置
vector<SearchConfig> itemType.searches = {}; // 搜索配置
vector<CreateConfig> itemType.creates = {}; // 资源创建配置
};