允许游客ws连接到公共频道

This commit is contained in:
satori 2021-12-04 05:13:19 +08:00
parent 3fbc863e15
commit 4561c498a2

View File

@ -87,16 +87,22 @@ function websocketer(ws, req) {
// 游客使用公共账户 uid = 0
let uid = req.session?.account?.uid || 0
// 当游客连接时, 为其使用访客公共订阅列表
if (req.session.account) {
// 当用户连接时, 读取其订阅列表
db('user').findOne({ uid }, function (err, doc) {
if (doc && Array.isArray(doc.fm)) {
doc.fm.forEach(fid => FM.订阅频道(fid, uid))
}
})
} else {
// 访客默认订阅的频道列表: 一般是所有公开的频道
[].forEach(fid => FM.订阅频道(fid, uid))
}
// 将连接加入到列表
FM.增加会话(uid, ws)
// 当用户连接时, 读取其订阅列表
db('user').findOne({ uid }, function (err, doc) {
if (doc && Array.isArray(doc.fm)) {
doc.fm.forEach(fid => FM.订阅频道(fid, uid))
}
})
// 收到消息时(只有频道消息)
ws.on('message', function (msg) {
// 可能需要检查权限, 是否可以向指定目标发送, 或者由客户端过滤