Wednesday, 5 June 2019

Socket.io are not working on firefox and chrome but perfectly on Safari

I am setting up a websocket for leaderboard in a small multiplayer game.I have tried io.configure() but it is no more there in latest versions.On safari this is working perfectly well but not on chrome and firefox. In chrome, it simply crashes and in firefox only one user is being processed in case of multiple ones.​var app = require('http').createServer(handler) var io = require('socket.io')(app); var fs = require('fs'); app.listen(process.env.PORT || 4000); function handler (req, res) { fs.readFile(__dirname + '/index.html', function (err, data){ if (err) { res.writeHead(500); return res.end('Error loading index.html'); } res.writeHead(200); res.end(data); }); } var resultsCache = {}; var clientCache = {}; io.on('connection', client => { client.on('joinRoom', clientData => { const roomKey = clientData["key"]; const name = clientData["name"]; if (roomKey in resultsCache) { if ((name in resultsCache[roomKey])){ client.emit("nameError", "Username already exists"); }else { resultsCache[roomKey][name] = {} client.emit("done") } }else{ resultsCache[roomKey] = {}; resultsCache[roomKey][name] = {}; clientCache[roomKey] = {} client.emit("done") } console.log(resultsCache); }) // room - [{name:{game1:0, game2: 1}}, {name: {game2}}, {}] client.on("score", scoreData => { const roomKey = scoreData["key"]; const name = scoreData["name"]; const game = scoreData["game"]; resultsCache[roomKey][name][game] = scoreData["score"]; if (game in clientCache[roomKey]){ clientCache[roomKey][game].push(client) } else { clientCache[roomKey][game] = [client] } var results = {} for (var i in resultsCache[roomKey]){ const scoreCard = resultsCache[roomKey][i] if (game in scoreCard){ results[i] = scoreCard[game] } } console.log(results) var sortedArr = Object.keys(results).map(function(key) { return [key, results[key]]; }); // Sort the array based on the second element sortedArr.sort(function(first, second) { return second[1] - first[1]; }); var sortedDicts = [] for (var i in sortedArr){ var l = {} l['name'] = sortedArr[i][0] l['score'] = sortedArr[i][1] sortedDicts.push(l) } //Result console.log(sortedDicts); // client.emit("results", sortedDicts); for (var i in clientCache[roomKey][game]){ var clientUpdate = clientCache[roomKey][game][i] clientUpdate.emit("results", sortedDicts) } }) // deleting client data on exit client.on("exit", data=>{ const roomKey = data["key"]; const name = data["name"]; delete resultsCache[roomKey][name]; for (var i in clientCache[roomKey]){ if (client in clientCache[roomKey][i]){ var index = clientCache[roomKey][i].indexOf(client); delete clientCache[roomKey][i][index]; } } console.log(resultsCache); console.log(clientCache); }) });

Submitted June 05, 2019 at 09:03AM by directorOverride

No comments:

Post a Comment