Commit 16ce9220 by 蒋勇

d

parent 4f19e789
...@@ -59,38 +59,7 @@ class RedisClient { ...@@ -59,38 +59,7 @@ class RedisClient {
var self = this; var self = this;
this.subclient.on("message", async function (channel, message) { this.subclient.on("message", async function (channel, message) {
console.log(channel, '------------- redis message ------------------- '); console.log(channel, '------------- redis message ------------------- ');
if (self.taskmanager) {
if (channel == "task") {
if (message == "newtask") {
(async (that) => {
var msg2 = await that.rpop("tasklist");
if (msg2) {
console.log("taskName+++++" + msg2);
var msgs2 = msg2.split("_");
var action = msgs2[0];
var taskName = msgs2[1];
var exp = msgs2[2];
await that.taskmanager.addTask(taskName, exp);
}
})(self)
} else {
(async (msg, that) => {
var msgs = msg.split("_");
var action = msgs[0];
if (action == "delete") {
var taskName = msgs[1];
await that.taskmanager.deleteTask(taskName);
}
})(message, self);
}
}
}
if (self.chatserver) { if (self.chatserver) {
if (channel != "task") {
var message = JSON.parse(message);
console.log(message, "------------------------------------------ publish message");
if (channel == "brc") {//如果是广播频道,则发送广播到客户端 if (channel == "brc") {//如果是广播频道,则发送广播到客户端
self.chatserver.server.emit("brc", message); self.chatserver.server.emit("brc", message);
} else if (self.chatserver.users[channel]) { } else if (self.chatserver.users[channel]) {
...@@ -102,7 +71,6 @@ class RedisClient { ...@@ -102,7 +71,6 @@ class RedisClient {
} }
} }
} }
}
}); });
} }
async subscribe (channel, chatserver) { async subscribe (channel, chatserver) {
......
...@@ -6,37 +6,69 @@ const uuidv4 = require('uuid/v4'); ...@@ -6,37 +6,69 @@ const uuidv4 = require('uuid/v4');
// const notifyCtl = system.getObject("web.socketNotifyCtl"); // const notifyCtl = system.getObject("web.socketNotifyCtl");
// const msgHistoryService = system.getObject("service.msghistorySve"); // const msgHistoryService = system.getObject("service.msghistorySve");
class RoomSet { class RoomSet {
constructor(server, client) { constructor(server) {
this.roomset = [];//房间集 this.server = server
this.memberset = [];//人员集 this.roomsetkey = "roomset";//房间集
this.membersetkey = "memberset";//人员集
this.init(); this.init();
} }
init () { init () {
var self = this
redisClient.smembers("roomset").then(rs => {
//初始化房间集
self.roomset = rs
});
redisClient.smembers("memberset").then(rs => {
//初始化人员集
self.memberset = rs
});
} }
/** /**
* 按照房间名查看人员 * 按照房间名查看人员
*/ */
async clientsByRoom (roomname) { async clientsByRoom (roomname) {
let rlst = await redisClient.get(roomname) let rlst = await redisClient.smembers(roomname)
return rlst return rlst
} }
/** /**
* 查看所有当前在线人数 * 查看所有当前在线人数
*/ */
async allmembers () { async allmembers () {
return this.memberset let ms = await redisClient.smembers(this.membersetkey);
return ms
} }
/**
* 查看所有房间
*/
async allrooms () { async allrooms () {
return this.roomset let rms = await redisClient.smembers(this.roomsetkey);
return rms
}
/**
* 房间登记
* @param {*} roomname
*/
async joinRoom (roomname, ukencstr) {
//缓存所有房间名称
await redisClient.sadd(this.roomsetkey, roomname)
//房间中缓存链接的客户uk
await redisClient.sadd(roomname, ukencstr)
// 订阅房间消息
await redisClient.subscribe(roomname, this.server);
return {}
}
/**
* ukencstr 从房间 roomname退出
* @param {*} roomname
* @param {*} ukencstr
*/
async exitRoom (roomname, ukencstr) {
//从房间退出
await redisClient.srem(roomname, ukencstr)
//是否房间里已经没人,如果没有了
let ms = await redisClient.smembers(roomname)
if (ms.length == 0) {//如果房间没有人,就取消
await redisClient.delete(roomname)
//从房间缓存中删除
await redisClient.srem(this.roomsetkey, roomname)
//房间订阅取消
await redisClient.unsubscribe(roomname)
}
return {}
} }
} }
class MsgHandler { class MsgHandler {
...@@ -104,8 +136,7 @@ class SocketServer { ...@@ -104,8 +136,7 @@ class SocketServer {
} }
this.users = {}//缓存所有客户端处理器 this.users = {}//缓存所有客户端处理器
this.uinfos = {}//缓存用户信息 this.uinfos = {}//缓存用户信息
this.socketidMap = {} this.socketidMap = {}//缓存会话ID与房间KEY
this.rooms = {}
this.init() this.init()
} }
getUUID () { getUUID () {
...@@ -115,9 +146,17 @@ class SocketServer { ...@@ -115,9 +146,17 @@ class SocketServer {
} }
init () { init () {
var self = this; var self = this;
//挂载到web应用的控制器,开放消息服务器的rest接口调用
//notifyCtl.setSocketServer(self);
//初始化房间集合
this.rooms = new RoomSet(self)
//订阅广播频道
redisClient.subscribe("brc", self);
//中间件可以在链接事件发出前调用一次
this.server.on('connection', function (client) { this.server.on('connection', function (client) {
console.log("connection.....socket"); console.log("connection.....socket");
client.on("login", (d) => { client.on("login", (d) => {
//匿名用户,userName--访客前端给个uuid,id也取uuid,company-id是-1,表示匿名用户
let uname = d.userName let uname = d.userName
let nickName = d.nickName ? d.nickName : uname let nickName = d.nickName ? d.nickName : uname
let headUrl = d.headUrl ? d.headUrl : 'https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_picUrl344116000745887092020814.jpg' let headUrl = d.headUrl ? d.headUrl : 'https://gsb-zc.oss-cn-beijing.aliyuncs.com/zc_picUrl344116000745887092020814.jpg'
...@@ -132,16 +171,24 @@ class SocketServer { ...@@ -132,16 +171,24 @@ class SocketServer {
// let str = system.encriptByDes(JSON.stringify(encuk)) // let str = system.encriptByDes(JSON.stringify(encuk))
//console.log('encstr', str) //console.log('encstr', str)
let uk = uname + "_" + id + "_" + d.company.id let uk = uname + "_" + id + "_" + d.company.id
//作为房间key
let ukencstr = system.encriptByDes(JSON.stringify(uk)) let ukencstr = system.encriptByDes(JSON.stringify(uk))
if (self.socketidMap[client.id] && d.company.id != -1) {//可能匿名登录过
let prevukstr = self.socketidMap[client.id]
console.log("rm ano...", prevukstr)
delete self.users[prevukstr]
delete self.uinfos[prevukstr]
this.rooms.exitRoom(prevukstr, prevukstr)
}
self.socketidMap[client.id] = ukencstr
//保存所有的客户端的消息处理器 //保存所有的客户端的消息处理器
self.users[ukencstr] = new MsgHandler(self, client) self.users[ukencstr] = new MsgHandler(self, client)
self.uinfos[ukencstr] = encuk self.uinfos[ukencstr] = encuk
self.socketidMap[client.id] = ukencstr
//订阅uk私人频道房间 //(订阅uk)开私人频道房间,并缓存房间名
var ss = redisClient.subscribe(ukencstr, self); this.rooms.joinRoom(ukencstr, ukencstr)
//缓存房间到set,缓存所有房间
//缓存房间中的所有人
}) })
// // // //
// self.of('/').adapter.clients((err, clients) => { // self.of('/').adapter.clients((err, clients) => {
...@@ -154,6 +201,7 @@ class SocketServer { ...@@ -154,6 +201,7 @@ class SocketServer {
delete self.users[ukencstr] delete self.users[ukencstr]
delete self.uinfos[ukencstr] delete self.uinfos[ukencstr]
delete self.socketidMap[client.id] delete self.socketidMap[client.id]
this.rooms.exitRoom(ukencstr, ukencstr)
}); });
}); });
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment