159 lines
2.7 KiB
Markdown
159 lines
2.7 KiB
Markdown
## Socket API
|
||
Socket服务器运行在`52006`端口。客户端连接后,可以发送JSON格式的消息。每个消息必须包含`type`字段,表示操作类型。
|
||
|
||
### 消息格式
|
||
所有消息均为JSON格式,编码为UTF-8字符串发送。
|
||
|
||
### 1. 注册
|
||
- **请求**:
|
||
```json
|
||
{
|
||
"type": "register",
|
||
"username": string,
|
||
"password": string,
|
||
}
|
||
```
|
||
|
||
- **响应**:
|
||
- 成功:
|
||
```json
|
||
{
|
||
"type": "register",
|
||
"status": "succeed",
|
||
"message": "注册成功"
|
||
}
|
||
```
|
||
- 用户名已存在:
|
||
```json
|
||
{
|
||
"type": "register",
|
||
"status": "error_0",
|
||
"message": "用户名已存在"
|
||
}
|
||
```
|
||
- 用户名格式错误:
|
||
```json
|
||
{
|
||
"type": "register",
|
||
"status": "error_2",
|
||
"message": "用户名长度必须在2到20个字符之间"
|
||
}
|
||
```
|
||
- 密码格式错误:
|
||
```json
|
||
{
|
||
"type": "register",
|
||
"status": "error_1",
|
||
"message": "密码长度必须在4到20个字符之间"
|
||
}
|
||
```
|
||
- 其他错误
|
||
```json
|
||
{
|
||
"type" = "register",
|
||
"status" = "error_-1",
|
||
"message" = "用户名或密码不能为空"
|
||
}
|
||
```
|
||
|
||
### 2. 登录
|
||
- **请求**:
|
||
```json
|
||
{
|
||
"type": "login",
|
||
"username": string,
|
||
"password": string
|
||
}
|
||
```
|
||
|
||
- **响应**:
|
||
- 成功:
|
||
```json
|
||
{
|
||
"type" = "login",
|
||
"status" = "succeed",
|
||
"message" = "登录成功",
|
||
"username" = string,
|
||
"userid" = string
|
||
}
|
||
```
|
||
- 账号或密码错误:
|
||
```json
|
||
{
|
||
"type" = "login",
|
||
"status" = "error_0",
|
||
"message" = "用户名或密码错误"
|
||
}
|
||
```
|
||
- 密码格式错误:
|
||
```json
|
||
{
|
||
"type" = "login",
|
||
"status" = "error_1",
|
||
"message" = "密码长度不能超过20个字符"
|
||
}
|
||
```
|
||
- 用户名格式错误:
|
||
```json
|
||
{
|
||
"type" = "login",
|
||
"status" = "error_2",
|
||
"message" = "用户名长度必须在2到20个字符之间"
|
||
}
|
||
```
|
||
- 其他错误:
|
||
```json
|
||
{
|
||
"type" = "login",
|
||
"status" = "error_-1",
|
||
"message" = "用户名或密码不能为空"
|
||
}
|
||
```
|
||
|
||
### 3. 发送聊天消息
|
||
- **请求**:
|
||
```json
|
||
{
|
||
"type" = "chat";
|
||
"message" = string;
|
||
"msgtype" = MessageType; //MessageType定义在下面的条目上
|
||
"userid" = string;
|
||
"token" = null; // 可空,因为目前没搞这个。所以可以不用发送token。
|
||
}
|
||
```
|
||
|
||
- **响应**:
|
||
- 成功:
|
||
```json
|
||
{
|
||
"type" = "chat";
|
||
"userid" = "Unid";
|
||
"user" = "Unnamed";
|
||
"status" = string;
|
||
"message" = string;
|
||
"avatar" = null;
|
||
"msgtype" = MessageType; //MessageType定义在下面的条目上
|
||
"timestamp" = DateTime(例如:2025-06-15T12:41:26.6322042+08:00);
|
||
}
|
||
```
|
||
|
||
### MessageType格式
|
||
MessageType在服务器的定义如下,可以先查看关于[C# 枚举(Enum)](https://www.runoob.com/csharp/csharp-enum.html)的文章。
|
||
```C#
|
||
public enum MessageType
|
||
{
|
||
Text,
|
||
Image,//图片
|
||
File,//文件
|
||
System//系统信息
|
||
}
|
||
```
|
||
所以在`MessageType.Text`的值为`0`。以此类推,`MessageTypeImage`值为`1`.
|
||
|
||
表现在json文本中为
|
||
```json
|
||
{
|
||
"msgtype" = 0
|
||
}
|
||
```
|
||
键为`"msgtype"`的值为`MessageType.Text`。 |