Repository navigation
Expand file tree
/
Copy pathapp.js
More file actions
92 lines (87 loc) · 2.96 KB
/
Copy pathapp.js
File metadata and controls
92 lines (87 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const routes = require('./routes/index');
const tc = require('./lib/text-censor');
const app = express();
app.use(express.static(path.join(__dirname, 'static')));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: false
}));
app.use('/', routes);
var server = app.listen(9000, function() {
var host = server.address().address
var port = server.address().port
console.log("应用实例,访问地址为 http://%s:%s", host, port)
})
var redis = require('redis');
var redisclient = redis.createClient();
var sub = function(c) {
var c = c || 'chatchannel';
redisclient.subscribe(c, function(e) {
console.log('subscribe channel : ' + c);
});
}
sub();
// 引入 socket.io 模块并绑定到服务器
io = require('socket.io').listen(server);
// 服务器当前在线用户列表
var nameList = []
// socket 部分
io.on('connection', function(socket) {
console.log('a user connected');
socket.emit('whoYouAre');
// socket 断开时发送下线消息
socket.on('disconnect', function() {
console.log('user disconnected');
if (socket.name) {
nameList.splice(nameList.indexOf(socket.name), 1);
socket.broadcast.emit('system', socket.name, nameList, 'logout');
socket.disconnect()
}
});
// 新用户登录时 记录名字并广播给其他用户
socket.on('name', function(data) {
var userName = data || '匿名'
console.log(data);
nameList.push(userName)
socket.name = userName
console.log('socket.name:', userName);
socket.emit('loginSuccess', nameList);
io.sockets.emit('system', userName, nameList, 'login');
});
socket.on('logOut', function(data) {
// var userName = data || '匿名'
// console.log(data);
// nameList.push(userName)
// socket.name = userName
// console.log('socket.name:', userName);
// socket.emit('loginSuccess', nameList);
// io.sockets.emit('system', userName, nameList, 'login');
socket.disconnect()
});
// 聊天消息
socket.on('message', function(data) {
if (data !== '') {
console.log('message data:', data);
var time = new Date().toLocaleString()
// socket.emit('message', new Date(), socket.name, data
if (data.length > 50) {
io.sockets.emit('message', time, socket.name, data)
}
else {
tc.filter(data, (err, filtered) => {
io.sockets.emit('message', time, socket.name, filtered)
})
}
}
});
// redis 订阅 系统广播
redisclient.on('message', function(error, msg) {
console.log('connection');
console.log(msg);
var time = new Date().toLocaleString()
socket.emit('systemBroadcast', msg);
});
});