Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Z
zhichan
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
蒋勇
zhichan
Commits
16ce9220
Commit
16ce9220
authored
Sep 25, 2020
by
蒋勇
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
d
parent
4f19e789
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
70 additions
and
54 deletions
+70
-54
im-center/app/base/utils/redisClient.js
+0
-32
im-center/app/config/socket.server2.js
+70
-22
No files found.
im-center/app/base/utils/redisClient.js
View file @
16ce9220
...
@@ -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
)
{
...
...
im-center/app/config/socket.server2.js
View file @
16ce9220
...
@@ -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
)
});
});
});
});
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment