# wchat-server **Repository Path**: willianfu/wchat-server ## Basic Information - **Project Name**: wchat-server - **Description**: 微聊服务端 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 2 - **Created**: 2021-08-31 - **Last Updated**: 2023-07-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## wchat 聊天服务功能设计 ### 登录 1、打开App,需要先进行登录 2、输入手机号/账号 + 密码,调用http登录接口进行登录 3、登录成功后会返回用户信息,带有userID、头像、昵称等,还会返回token 4、登录成功后,app通过把token附加在连接url后面,发起ws连接,连接成功后加载本地数据,聊天消息界面的列表,然后遍历聊天列表的用户/群组 ID,把最新的消息存到本地 ### 通信 每个用户和群组都有一个用户ID 数据包类型 - CHAT_MSG 聊天消息 - CHAT_MSG_ACK 聊天消息发送应答 - EVENT_ #### A给有B的群组,或者单独给B发送消息时 **A发送的消息格式** ```json { "header": "CHAT", "type": "CHAT_MSG", "body": { "type": "消息类型 单聊=SINGLE 群聊=GROUP", "target": "要发送给的 user/group ID", "message": { "type": "消息类型 文本=TEXT、文件=FILE、 图片=IMAGE、 视频=VIDEO", "content": "消息内容,图片和视频的话是url" } } } ``` 发送成功服务器将返回 ```json { "header": "ACK", "type": "CHAT_MSG_ACK", "body": { "success": true, "message": "ok" } } ``` 发送失败服务器将返回 ```json { "header": "ACK", "type": "CHAT_MSG_ACK", "body": { "success": false, "message": "失败的原因 被拉黑/被删除好友" } } ``` **B收到的消息格式为** ```json { "header": "CHAT", "type": "CHAT_MSG", "body": { "msgId": "该消息的唯一ID", "type": "消息类型 单聊=SINGLE 群聊=GROUP", "target": "消息来源用户userID", "message": { "type": "消息类型 文本=TEXT、文件=FILE、 图片=IMAGE、 视频=VIDEO", "content": "消息内容,图片和视频的话是url" }, "time": "消息发送的时间戳" } } ``` 当系统中产生以下事件时,客户端将会收到以下类型的事件消息 群组事件 - GROUP_USER_CHANGE 群组用户变更事件,有用户进群/退群/更新信息 - GROUP_INFO_CHANGE 群信息有更新 如修改群名,群备注等 - GROUP_JOIN 加入群事件 - GROUP_LEAVE 被踢出群事件 好友事件 - FRIEND_INFO_CHANGE 好友资料更新 - FRIEND_ADD_REQ 被申请添加好友 - FRIEND_ADD 被添加为好友 - FRIEND_DEL 被删除好友关系 - FRIEND_BLACKLIST 被拉黑 消息事件 - MSG_WITHDRAW 消息被撤回 系统事件 - SYS_OFFLINE 被强制下线/被挤下线 ```json { "header": "EVENT", "type": "事件类型", "body": { /**对应第以下结构只有相应事件消息产生时候才会收到**/ //群组事件 "id": "产生事件的群组id", "userId": "导致事件产生的用户", //好友事件 "id": "产生事件的好友用户id", //系统事件 "message": "被下线的原因", //消息事件 "id": "被撤回的消息ID", "userId": "撤回者的ID", "type": "被撤回的消息类型 FRIEND/GROUP" } } ``` ### http 接口列表 #### 用户相关 - 登录 - 注册 - 修改密码 - 修改资料信息 #### 通讯录相关 - 查询通讯录列表(包含好友和群组) - 请求添加xxx为好友 - 同意xxx加我为好友 - 删除好友xxx - 拉黑好友xxx - 主动退出群组xxx #### 好友/群组管理 - 查询群资料 - 查询好友资料和状态 - 查询群组成员 - 把xxx踢出群组 - 请求加入xxx群 - 修改好友备注 #### 消息相关 - 屏蔽xxx群的消息 - 查询前100条历史聊天记录 - 主动撤回消息 - 上传文件 - 上传图片 #### ws连接成功后 1、通过token连接websocket 2、调用 GET /address/book/friends 获取好友列表 3、调用 GET /address/book/groups 获取加入的群组列表 4、取本地存储中的 聊天列表 - 如果有,遍历这个列表,通过它们的 userId/groupId 循环调用接口 GET /message/history 获取历史消息及新消息 - 如果没有,调用 GET /message/history 获取新消息