fiora 后端基于 socket.io, 首先需要与后端建立连接
import IO from 'socket.io-client';
const socket = new IO(serverAddrress, options);接口调用格式为
socket.emit(event, data, callback);参数说明
- event {string} 接口名/事件名
- data {object} 接口入参
- callback {string|object => void} 接口回调, 返回string表示接口失败, string内容为失败原因, 反正object表示接口成功, 里面包含返回数据
{
_id, // {string} id
username, // {string} 用户名
avatar, // {string} 头像
groups, // {[Group]} 群组列表
friends, // {[User]} 好友列表
token, // {string} 免密登录token
isAdmin, // {boolean} 是否为管理员
}{
_id, // {string} id
name, // {string} 群组名
avatar, // {string} 头像
creator, // {User ID} 群主id
isDefault, // {boolean} 是否为默认群
members, // {[User]} 成员列表
messages, // {[Message]} 消息列表
}{
_id, // {string} id
from, // {User} 发送者
to, // {string} 群聊: 群id, 私聊: 两人id拼接, 按字符串比较, 小的在前
type, // {string} 消息类型 ['text', 'image', 'code', 'invite']
content, // {string} 消息内容
}socket.emit(
'register',
{
username, // {string} 用户名
password, // {string} 密码
os, // {string} 操作系统
browser, // {string} 浏览器
environment, // {string} 环境信息
},
user => { }, // {User} 用户数据
);socket.emit(
'login',
{
username, // {string} 用户名
password, // {string} 密码
os, // {string} 操作系统
browser, // {string} 浏览器
environment, // {string} 环境信息
},
user => { }, // {User} 用户数据
);socket.emit(
'loginByToken',
{
token, // {string} 免密登录token
os, // {string} 操作系统
browser, // {string} 浏览器
environment, // {string} 环境信息
},
user => { }, // {User} 用户数据
);游客仅能获取到默认群组
socket.emit(
'guest',
{
os, // {string} 操作系统
browser, // {string} 浏览器
environment, // {string} 环境信息
},
defaultGroup => { }, // {Group} 默认群组数据
);socket.emit(
'changeAvatar',
{
avatar, // {string} 新头像url
},
() => { }, // {Object} 返回空对象
);socket.emit(
'addFriend',
{
userId, // {User ID} 目标的id
},
(friend) => { }, // {User} 好友信息
);socket.emit(
'deleteFriend',
{
userId, // {User ID} 目标的id
},
() => { }, // {Object} 返回空对象
);socket.emit(
'changePassword',
{
oldPassword, // {string} 旧密码
newPassword, // {string} 新密码
},
() => { }, // {Object} 返回空对象
);socket.emit(
'changeUsername',
{
username, // {string} 新用户名
},
() => { }, // {Object} 返回空对象
);仅管理员可调用
socket.emit(
'resetUserPassword',
{
username, // {string} 新用户名
},
(data) => { // {Object} 返回数据
data.newPassword, // {string} 新密码
},
);通过 to 字段判断是发送给群, 还是发送给个人
发送群的话, to就是群id
发送个人的话, to就是两个人的id拼接, 按字符串比较结果, 小的在前大的在后
socket.emit(
'sendMessage',
{
to, // {string} 目标群组, 或者俩用户id拼接结果
type, // {string} 消息类型
content, // {string} 消息内容
},
(message) => { }, // {Message} 新消息
);socket.emit(
'getLinkmansLastMessages',
{
linkmans, // {[string]} 联系人id列表, 与to同规则
},
(messages) => { }, // {object} 所有联系人的最后消息, key: 联系人id, value: [Message] 消息列表
);socket.emit(
'getLinkmanHistoryMessages',
{
linkmanId, // {string} 联系人id
existCount, // {number} 已有消息数量
},
(messages) => { }, // {[Message]} 消息列表
);不需要登录态
socket.emit(
'getDefalutGroupHistoryMessages',
{
existCount, // {number} 已有消息数量
},
(messages) => { }, // {[Message]} 消息列表
);socket.emit(
'createGroup',
{
name, // {string} 群组名
},
(group) => { }, // {Group} 新创建的群组
);socket.emit(
'joinGroup',
{
groupId, // {Group ID} 目标群id
},
(group) => { }, // {Group} 新创建的群组
);socket.emit(
'leaveGroup',
{
groupId, // {Group ID} 目标群id
},
() => { }, // {object} 返回空数据
);socket.emit(
'getGroupOnlineMembers',
{
groupId, // {Group ID} 目标群id
},
(users) => { }, // {[User]} 在线用户列表
);socket.emit(
'getDefaultGroupOnlineMembers',
{ },
(users) => { }, // {[User]} 在线用户列表
);socket.emit(
'changeGroupAvatar',
{
groupId, // {Group ID} 目标群id
avatar, // {string} 新头像url
},
() => { }, // {object} 返回空数据
);socket.emit(
'uploadToken',
{ },
(data) => {
// 服务端支持七牛
data.token, // 上传token
data.urlPrefix, // 文件上传后的路径前缀
// 服务端不支持七牛
data.useUploadFile, // 不支持上传七牛, 需要客户端调用 uploadFile 上传文件到服务端
},
);socket.emit(
'search',
{
keywords, // {string} 搜索关键字
},
(data) => {
data.users, // {[User]} 命中的用户
data.groups, // {[Group]} 命中的群组
},
);socket.emit(
'searchExpression',
{
keywords, // {string} 搜索关键字
},
(imageUrls) => {}, // {[string]} 图片列表
);socket.emit(
'getBaiduToken',
{ },
(data) => {
data.token, // {string} token
},
);socket.emit(
'sealUser',
{
username, // {string} 要封禁的用户名
},
() => {}, // {object} 返回空数据
);socket.emit(
'getSealList',
{ },
(users) => {}, // {[string]} 被封禁的用户名列表
);socket.emit(
'uploadFile',
{
fileName, // {string} 文件名
file, // {blob} 文件内容, blob格式
},
(data) => {
data.url, // 文件url
},
);