代码拉取完成,页面将自动刷新
var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
// 存放在线用户k-编号v-socket
var socketMap = {};
// 自增编号
var number = 0;
// 昵称数组
var uname_list = [];
server.listen(5001);
app.use(express.static('public'));
io.on('connection', function (socket) {
// 获取用户名后发出waiting
socket.on('uname', function(uname) {
console.log("[connect] number = %d",number);
number ++;
socket.clientNum = number;
socketMap[number] = socket;
console.log("server got uname = %s, id = %d", uname, number);
if (number % 2 === 1) {
uname_list[number] = uname;
socket.emit('waiting', number);
} else {
uname_list[number] = uname;
if (socketMap[number - 1]) {
// 指明玩家单双号,发送对手用户名
socketMap[number - 1].emit("first", uname_list[number]);
socket.emit("second", uname_list[number - 1]);
} else {
socket.emit("leave");
}
}
});
socket.on('go', function (i, j, isWin) {
socketMap[getMatch(socket.clientNum)].emit("go", i, j);
if (isWin) {
socketMap[getMatch(socket.clientNum)].emit("fail");
}
});
socket.on("disconnect", function () {
delete(socketMap[socket.clientNum]);
console.log('User ['+ uname_list[socket.clientNum] + "] leave.");
if (socket.clientNum % 2 !== 0 && number === socket.clientNum && !socketMap[getMatch(socket.clientNum)]) {
// 如果1和2进入,2走了,那么1走的时候符合该条件,num++后为奇数,下次进入的人就是4,是孤儿
// 如果1 2 3 4 5, 2走了,1走的时候number不应该递增,否则5就是孤儿
number = ((number+1)/2)*2; //对齐至偶数便于下次的配对
}
if (socketMap[getMatch(socket.clientNum)]) {
socketMap[getMatch(socket.clientNum)].emit('leave');
delete(socketMap[getMatch(socket.clientNum)]);
}
});
});
// 从1开始,奇数匹配加一的数,偶数匹配减一的数
function getMatch(num) {
if (num % 2 === 1) {
return num + 1;
} else {
return num - 1;
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。