前言

本网站为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 字段下,该字段下包含以下字段:

字段类型默认值描述支持状态
featuresJsonObject-可选的支持功能×
clientNamestringanonymous模拟器名称,允许匿名
clientVersionint-1客户端版本号,-1代表匿名×
userNamestring?null用户名,null代表匿名
passwordstring?null密码,服务器为私有时需要本字段,否则为null
isDebuggerboolfalse是否为调试器,此字段在服务器为调试模式的同时为true有效,否则无效×
isSpectatorboolfalse是否为旁观者×

其中features字段结构为:

字段类型默认值描述支持状态
RealTimeUploadboolfalse实时上传,为true时客户端需要上传包含每一次点击的所有数据×
VotingSelectionboolfalse投票选谱,需要全房间人同时支持本功能才可使用×
RealTimeLeaderboardboolfalse实时排行榜,为true时服务器将上传其他人的分数数据×
RealTimeChatboolfalse实时聊天,为true时服务器将上传其他人的聊天信息,同时客户端也需启用本功能×

消息样例:

{
  "features":
  {
    "RealTimeUpload": false,
    "VotingSelection": false,
    "RealTimeLeaderboard": false,
    "RealTimeChat": false
  },
  "clientName": "anonymous",
  "clientVersion": -1,
  "userName": null,
  "password": null,
  "isDebugger": false,
  "isSpectator": false
}

代码行为

  1. 若服务器多次收到此消息,服务器将直接切断连接。
  2. 服务器允许用户名重名。