前言
本网站为Phi-MGUS开发文档,包含所有代码逻辑以及客户端基本适配方法
警告:项目仍处在开发阶段,文档将跟随开发进度进行更新,您可以在Github中的Actions中获得仍处在开发中的代码的编译版本。
- 服务器采用
C#语言,使用Fleck包作为WebSocket服务器实现。 - 服务器允许受SSL加密的端口与不受SSL加密的端口同时使用,但我们不建议这么做。
- 服务器不存储任何数据,服务器也不依赖任何平台,仅独立运行。
- 服务器SSL证书格式需为
.pfx。 - 服务器大量采用异步。
Action
Action 是所有消息都带有的一个字段,位于消息的根目录,用于识别消息类型。
服务器消息内是服务器发给客户端的消息
客户端消息内是客户端发给服务器的消息
消息格式均为 Json
服务器消息
这是index
偷懒了
GetData
action: getData
所有客户端连接到服务器都会收到此消息,消息带有 needPassword 字段,此字段为 true 代表服务器设置了密码,密码需要随ClientMetaData返回,若鉴权失败将返回JoinServerFailed消息并附带原因;字段为 false 代表服务器为公开服务器,无需返回密码。若无其他错误将会返回 JoinServerSuccess 消息代表服务器已将客户端加入用户列表。
更多细节见 ClientMetaData
客户端消息
这是index
偷懒了
ClientMetaData
action: clientMetaData
此消息所有客户端在收到GetData后都需返回,此消息所返回数据应该位于 data 字段下,该字段下包含以下字段:
| 字段 | 类型 | 默认值 | 描述 | 支持状态 |
|---|---|---|---|---|
| features | JsonObject | - | 可选的支持功能 | × |
| clientName | string | anonymous | 模拟器名称,允许匿名 | √ |
| clientVersion | int | -1 | 客户端版本号,-1代表匿名 | × |
| userName | string? | null | 用户名,null代表匿名 | √ |
| password | string? | null | 密码,服务器为私有时需要本字段,否则为null | √ |
| isDebugger | bool | false | 是否为调试器,此字段在服务器为调试模式的同时为true有效,否则无效 | × |
| isSpectator | bool | false | 是否为旁观者 | × |
其中features字段结构为:
| 字段 | 类型 | 默认值 | 描述 | 支持状态 |
|---|---|---|---|---|
| RealTimeUpload | bool | false | 实时上传,为true时客户端需要上传包含每一次点击的所有数据 | × |
| VotingSelection | bool | false | 投票选谱,需要全房间人同时支持本功能才可使用 | × |
| RealTimeLeaderboard | bool | false | 实时排行榜,为true时服务器将上传其他人的分数数据 | × |
| RealTimeChat | bool | false | 实时聊天,为true时服务器将上传其他人的聊天信息,同时客户端也需启用本功能 | × |
消息样例:
{
"features":
{
"RealTimeUpload": false,
"VotingSelection": false,
"RealTimeLeaderboard": false,
"RealTimeChat": false
},
"clientName": "anonymous",
"clientVersion": -1,
"userName": null,
"password": null,
"isDebugger": false,
"isSpectator": false
}
代码行为
- 若服务器多次收到此消息,服务器将直接切断连接。
- 服务器允许用户名重名。