-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsocket.js
105 lines (93 loc) · 2.74 KB
/
socket.js
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
93
94
95
96
97
98
99
100
101
102
103
104
105
const SocketIO = require('socket.io');
const connect = require('./schemas/index');
const Chams = require('./schemas/champion');
const Rank = require('./schemas/rank');
const champions = require("./util/champ");
module.exports = (server, app, sessionMiddleware) => {
const io = SocketIO(server, { path: '/socket.io' });
app.set('io', io);
const chat = io.of('/chat');
const single = io.of('/single');
io.use((socket, next) => {
sessionMiddleware(socket.request, socket.request.res, next);
});
chat.on('connection', (socket) => {
console.log('chat 네임스페이스에 접속');
const req = socket.request;
const roomId = 'open'
socket.join(roomId);
socket.to(roomId).emit('join', {
user: 'system',
chat: `${req.session.userName}님이 입장하셨습니다.`,
});
socket.on('disconnect', () => {
console.log('chat 네임스페이스 접속 해제');
socket.leave(roomId);
socket.to(roomId).emit('exit', {
user: 'system',
chat: `${req.session.userName}님이 퇴장하셨습니다.`,
});
});
});
single.on('connection', (socket) => {
console.log('싱글서버 접속');
const req=socket.request;
const singleRoomId=Math.random();
console.log(singleRoomId);
socket.join(singleRoomId);
const championsIndex = new Array(champions.length).fill(1);
socket.on('make', () => {
if(!req.session.count||req.session.count==0) {
req.session.count=0;
}
var quizSet=[];
var randomtestIndex;
while(true){
randomtestIndex = Math.floor(Math.random() * champions.length);
if(championsIndex[randomtestIndex] != 'x'){
break;
}
}
Chams.find({name:champions[randomtestIndex].eng}, function(err,docs) {
const targets = new Array(docs.length).fill(1);
let index;
for(let i = 0; i<4;i++){
while(true){
index = Math.floor(Math.random() * 10);
if(targets[index] != 'x'){
break;
}
}
quizSet[i]=docs[index];
targets[index] = 'x';
}
single.in(singleRoomId).emit('get', {quizSet, randomtestIndex});
championsIndex[randomtestIndex] = 'x';
console.log(`---------\ntargets: ${targets}\nchampions: ${championsIndex}\n---------`);
});
});
socket.on('answer', (userAnswer, randomtestIndex) => {
if(champions[randomtestIndex].kor==userAnswer) {
single.in(singleRoomId).emit('correction', 'right');
} else {
single.in(singleRoomId).emit('correction', 'wrong');
}
})
socket.on('finish', (data) => {
Rank.create({
user:data.userName,
score: parseInt(data.score),
time:data.time,
createAt:new Date()
},
function(err) {
if(err)
throw err;
})
console.log('저장성공');
});
socket.on('disconnect',()=>{
socket.leave(singleRoomId);
});
})
}