|
@@ -0,0 +1,76 @@
|
|
|
+const express = require('express');
|
|
|
+var app = express()
|
|
|
+var http = require('http').Server(app);
|
|
|
+var io = require('socket.io')(http);
|
|
|
+
|
|
|
+app.use(express.static('public'))
|
|
|
+
|
|
|
+let gamers = []
|
|
|
+
|
|
|
+let cleanSocket = gamer => {
|
|
|
+ let copy = {...gamer}
|
|
|
+ delete copy.socket
|
|
|
+ return copy
|
|
|
+}
|
|
|
+
|
|
|
+let emitGamers = () => io.emit('gamers', gamers.map(cleanSocket))
|
|
|
+
|
|
|
+let thisGamer = s => gamers.filter(g => g.socket === s) [0]
|
|
|
+let gamerById = id => gamers.filter(g => g.id === id)[0]
|
|
|
+
|
|
|
+io.on('connection', socket => {
|
|
|
+ socket.emit('hi', {id: socket.id})
|
|
|
+ socket.on('disconnect', () => {
|
|
|
+ gamers = gamers.filter(n => n.socket !== socket)
|
|
|
+ emitGamers()
|
|
|
+ });
|
|
|
+
|
|
|
+ socket.on('conn', msg => {
|
|
|
+ gamers.push({nick: msg.nick, socket: socket, id: socket.id})
|
|
|
+ emitGamers()
|
|
|
+ })
|
|
|
+
|
|
|
+ socket.on('newGame', msg => {
|
|
|
+ let gamer = thisGamer(socket)
|
|
|
+ gamer.newGame = msg.newGame
|
|
|
+ emitGamers()
|
|
|
+ })
|
|
|
+
|
|
|
+ socket.on('startGame', ({id}) => {
|
|
|
+ let gamer = thisGamer(socket)
|
|
|
+ let enemy = gamerById(id)
|
|
|
+ //console.log(id, gamers)
|
|
|
+ if (enemy && enemy.newGame){
|
|
|
+ gamer.inGameWith = enemy.id
|
|
|
+ enemy.inGameWith = gamer.id
|
|
|
+
|
|
|
+ gamer.turn = Math.random() > 0.5
|
|
|
+ enemy.turn = !gamer.turn
|
|
|
+ }
|
|
|
+ gamer.socket.emit('startGame', cleanSocket(gamer))
|
|
|
+ enemy.socket.emit('startGame', cleanSocket(enemy))
|
|
|
+
|
|
|
+ if (gamer.turn) gamer.socket.emit('turn')
|
|
|
+ else enemy.socket.emit('turn')
|
|
|
+
|
|
|
+ emitGamers()
|
|
|
+ })
|
|
|
+
|
|
|
+ socket.on('turn', data => {
|
|
|
+ let gamer = thisGamer(socket)
|
|
|
+ let enemy = gamerById(gamer.inGameWith)
|
|
|
+ if (gamer && enemy &&
|
|
|
+ gamer.inGameWith === enemy.id &&
|
|
|
+ enemy.inGameWith === gamer.id &&
|
|
|
+ gamer.turn){
|
|
|
+
|
|
|
+ gamer.turn = !gamer.turn
|
|
|
+ enemy.turn = !enemy.turn
|
|
|
+ enemy.socket.emit('turn', data)
|
|
|
+ }
|
|
|
+ })
|
|
|
+});
|
|
|
+
|
|
|
+http.listen(4000, function(){
|
|
|
+ console.log(`listening`);
|
|
|
+});
|