2 Star 0 Fork 0

mirrors_dfabulich/inhuman-conditions-online

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
server.js 2.63 KB
一键复制 编辑 原始数据 按行查看 历史
Dan Fabulich 提交于 2020-04-05 22:54 . initial commit
'use strict';
const app = require('express')();
const http = require('http').createServer(app);
const io = require('socket.io')(http);
app.get('/robots.txt', (req, res) => {
res.sendFile(__dirname + '/robots.txt');
});
app.get('/*', (req, res) => {
res.sendFile(__dirname + '/index.html');
});
const rooms = {};
const debug = 0;
io.on('connection', socket => {
if (debug) console.log('a user connected', socket.id);
socket.on('room', ({room, defaultRoom}) => {
if (debug) console.log('room', socket.id, room);
socket.join(room);
if (!rooms[room]) rooms[room] = defaultRoom;
socket.emit('state change', rooms[room]);
});
socket.on('name change', name => {
if (debug) console.log('name', name);
for (const room in socket.rooms) {
if (!rooms[room]) continue;
const players = rooms[room].players
const player = players[socket.id] || {};
players[socket.id] = player;
player.name = name;
io.to(room).emit('state change', rooms[room]);
}
})
socket.on('mutate state', ({roomId, mutations}) => {
const room = rooms[roomId];
const backup = JSON.parse(JSON.stringify(room));
try {
for (const mutation of mutations) {
try {
if (debug) console.log({mutation});
let parent = room;
for (const key of mutation.path || []) {
parent = parent[key];
}
if (mutation.action === 'append') {
const array = parent[mutation.key] || [];
parent[mutation.key] = array;
array.push(mutation.value);
} else if (mutation.action === 'delete') {
delete parent[mutation.key];
} else {
parent[mutation.key] = mutation.value;
}
} catch (e) {
console.error(`Couldn't run mutation`, JSON.stringify(mutation), e.stack);
throw e;
}
}
} catch (e) {
console.error(`Rolling back to ${JSON.stringify(backup)}`);
rooms[roomId] = backup;
}
if (debug) console.log({room});
io.to(roomId).emit('state change', room);
})
socket.on('disconnect', () => {
if (debug) console.log('user disconnected', socket.id);
for (const roomId in rooms) {
const room = rooms[roomId];
if (!room) continue;
if (room.players[socket.id]) {
delete room.players[socket.id];
io.to(roomId).emit('user disconnected', {playerId: socket.id, room});
}
}
});
socket.on('chat message', function(msg){
io.emit('chat message', msg);
});
});
const port = process.env.PORT || 3000;
http.listen(port, () => {
console.log(`listening on http://localhost:${port}/`);
});
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/mirrors_dfabulich/inhuman-conditions-online.git
[email protected]:mirrors_dfabulich/inhuman-conditions-online.git
mirrors_dfabulich
inhuman-conditions-online
inhuman-conditions-online
master

搜索帮助