Skip to content
This repository has been archived by the owner on Jul 17, 2020. It is now read-only.

Commit

Permalink
Close game api
Browse files Browse the repository at this point in the history
  • Loading branch information
yoyo930021 committed Mar 10, 2018
1 parent 28129b6 commit c1d12a6
Showing 1 changed file with 113 additions and 113 deletions.
226 changes: 113 additions & 113 deletions server/socket/client.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
const redis = require('../db/redis.js')
const Model = require('../db/sequelize/index.js')
const uuid = require('uuid/v4')
// const uuid = require('uuid/v4')
// const config = require('../config/index.js')
const app = require('../app/client.js')
const _ = require('lodash')
// const _ = require('lodash')

const start = function (io) {
const client = io.of('/client')
Expand Down Expand Up @@ -68,122 +68,122 @@ const start = function (io) {
}
})

socket.on('chooseLevel', async () => {
let levels = await Model.Level.findAll()
socket.emit('chooseLevel', levels.map((value) => { return value.name }))
})
// socket.on('chooseLevel', async () => {
// let levels = await Model.Level.findAll()
// socket.emit('chooseLevel', levels.map((value) => { return value.name }))
// })

socket.on('start', async (input) => {
let auth = await app.authLogin(input.token)
if (auth) {
await redis.incr('rooms')
let oldRoomName = await redis.get(input.token)
if (oldRoomName !== null) {
await redis.del(oldRoomName)
await redis.decr('rooms')
}
const roomName = uuid()
socket.join(roomName)
const roomData = await app.makeRoomData(input.level)
await redis.set(roomName, JSON.stringify(roomData))
await redis.set(input.token, roomName)
client.to(roomName).emit('start', roomName)
} else {
socket.emit('start', 'error')
socket.disconnect(true)
}
})
// socket.on('start', async (input) => {
// let auth = await app.authLogin(input.token)
// if (auth) {
// await redis.incr('rooms')
// let oldRoomName = await redis.get(input.token)
// if (oldRoomName !== null) {
// await redis.del(oldRoomName)
// await redis.decr('rooms')
// }
// const roomName = uuid()
// socket.join(roomName)
// const roomData = await app.makeRoomData(input.level)
// await redis.set(roomName, JSON.stringify(roomData))
// await redis.set(input.token, roomName)
// client.to(roomName).emit('start', roomName)
// } else {
// socket.emit('start', 'error')
// socket.disconnect(true)
// }
// })

socket.on('getProblem', async (input) => {
if (Object.keys(socket.rooms).indexOf(input.roomName) !== -1) {
let roomData = await redis.get(input.roomName)
roomData = JSON.parse(roomData)
let getTime = Math.ceil((Date.now() - roomData.last) / 1000)
if (roomData.last === 0 || (getTime <= (roomData.times + 2) && getTime >= (roomData.times - 1))) {
if (roomData.last !== 0 && roomData.nowProblem === roomData.playerScores.length && getTime > roomData.times) {
const problem = roomData.problems[roomData.playerScores.length]
roomData.playerScores.push(0)
roomData.computerScore += problem.computer.score
let round = await Model.Round.create({ roomName: input.roomName, sponsor: problem.sponsor, score: 0, anwearSecond: 0 })
await round.setProblem(await Model.Problem.findOne({ where: {question: problem.question} }))
let user = await Model.User.findOne({ where: {token: input.token} })
await user.addRound(round)
}
if (roomData.playerScores.length !== roomData.problems.length) {
let problem = roomData.problems[roomData.playerScores.length]
let result = {
question: problem.question,
sponsor: problem.sponsor,
options: _.map(problem.options, 'content'),
times: roomData.times
}
client.to(input.roomName).emit('getProblem', result)
roomData.last = Date.now()
let last = roomData.last
let problemId = roomData.playerScores.length
roomData.nowProblem = problemId
await redis.set(input.roomName, JSON.stringify(roomData))
await app.delay(roomData.times * 1000 - problem.computer.times - 200)
roomData = await redis.get(input.roomName)
roomData = JSON.parse(roomData)
if (roomData.last === last) {
let result = roomData.problems[problemId]
let tempTime = Date.now()
result.computer.score = app.calcScore(roomData, result.computer.currect, tempTime)
roomData.computerScore += result.computer.score
await redis.set(input.roomName, JSON.stringify(roomData))
client.to(input.roomName).emit('computer', result.computer)
}
} else {
if (!roomData.finished) {
roomData.finished = true
await redis.set(input.roomName, JSON.stringify(roomData))
let result = {
playerScore: roomData.playerScores.reduce((prev, element) => { return prev + element }, 0),
computerScore: roomData.computerScore
}
result.win = result.playerScore > result.computerScore
if (result.win) result.playerScore += roomData.maxScore
let user = await Model.User.findOne({ where: {token: input.token} })
const round = await Model.Round.create({ roomName: input.roomName, sponsor: roomData.problems[0].sponsor, score: result.playerScore, summary: true, anwearSecond: 0 })
await user.addRound(round)
await user.increment('score', {by: result.playerScore})
client.to(input.roomName).emit('finish', result)
await redis.decr('rooms')
socket.leave(input.roomName)
// socket.on('getProblem', async (input) => {
// if (Object.keys(socket.rooms).indexOf(input.roomName) !== -1) {
// let roomData = await redis.get(input.roomName)
// roomData = JSON.parse(roomData)
// let getTime = Math.ceil((Date.now() - roomData.last) / 1000)
// if (roomData.last === 0 || (getTime <= (roomData.times + 2) && getTime >= (roomData.times - 1))) {
// if (roomData.last !== 0 && roomData.nowProblem === roomData.playerScores.length && getTime > roomData.times) {
// const problem = roomData.problems[roomData.playerScores.length]
// roomData.playerScores.push(0)
// roomData.computerScore += problem.computer.score
// let round = await Model.Round.create({ roomName: input.roomName, sponsor: problem.sponsor, score: 0, anwearSecond: 0 })
// await round.setProblem(await Model.Problem.findOne({ where: {question: problem.question} }))
// let user = await Model.User.findOne({ where: {token: input.token} })
// await user.addRound(round)
// }
// if (roomData.playerScores.length !== roomData.problems.length) {
// let problem = roomData.problems[roomData.playerScores.length]
// let result = {
// question: problem.question,
// sponsor: problem.sponsor,
// options: _.map(problem.options, 'content'),
// times: roomData.times
// }
// client.to(input.roomName).emit('getProblem', result)
// roomData.last = Date.now()
// let last = roomData.last
// let problemId = roomData.playerScores.length
// roomData.nowProblem = problemId
// await redis.set(input.roomName, JSON.stringify(roomData))
// await app.delay(roomData.times * 1000 - problem.computer.times - 200)
// roomData = await redis.get(input.roomName)
// roomData = JSON.parse(roomData)
// if (roomData.last === last) {
// let result = roomData.problems[problemId]
// let tempTime = Date.now()
// result.computer.score = app.calcScore(roomData, result.computer.currect, tempTime)
// roomData.computerScore += result.computer.score
// await redis.set(input.roomName, JSON.stringify(roomData))
// client.to(input.roomName).emit('computer', result.computer)
// }
// } else {
// if (!roomData.finished) {
// roomData.finished = true
// await redis.set(input.roomName, JSON.stringify(roomData))
// let result = {
// playerScore: roomData.playerScores.reduce((prev, element) => { return prev + element }, 0),
// computerScore: roomData.computerScore
// }
// result.win = result.playerScore > result.computerScore
// if (result.win) result.playerScore += roomData.maxScore
// let user = await Model.User.findOne({ where: {token: input.token} })
// const round = await Model.Round.create({ roomName: input.roomName, sponsor: roomData.problems[0].sponsor, score: result.playerScore, summary: true, anwearSecond: 0 })
// await user.addRound(round)
// await user.increment('score', {by: result.playerScore})
// client.to(input.roomName).emit('finish', result)
// await redis.decr('rooms')
// socket.leave(input.roomName)

await app.getScore(socket, input.token)
await redis.del(input.roomName)
}
}
}
}
})
// await app.getScore(socket, input.token)
// await redis.del(input.roomName)
// }
// }
// }
// }
// })

socket.on('answear', async (input) => {
if (Object.keys(socket.rooms).indexOf(input.roomName) !== -1) {
let now = Date.now()
let roomData = await redis.get(input.roomName)
roomData = JSON.parse(roomData)
if (roomData.nowProblem === roomData.playerScores.length) {
if (roomData.playerScores.length !== roomData.problems.length) {
const problem = roomData.problems[roomData.playerScores.length]
const option = problem.options[input.num]
const playerScore = app.calcScore(roomData, option.currect, now)
let round = await Model.Round.create({ roomName: input.roomName, sponsor: problem.sponsor, score: playerScore, anwearSecond: app.calcTimes(roomData, now) })
await round.setProblem(await Model.Problem.findOne({ where: {question: problem.question} }))
await round.setOption(await Model.Option.findById(option.id))
// socket.on('answear', async (input) => {
// if (Object.keys(socket.rooms).indexOf(input.roomName) !== -1) {
// let now = Date.now()
// let roomData = await redis.get(input.roomName)
// roomData = JSON.parse(roomData)
// if (roomData.nowProblem === roomData.playerScores.length) {
// if (roomData.playerScores.length !== roomData.problems.length) {
// const problem = roomData.problems[roomData.playerScores.length]
// const option = problem.options[input.num]
// const playerScore = app.calcScore(roomData, option.currect, now)
// let round = await Model.Round.create({ roomName: input.roomName, sponsor: problem.sponsor, score: playerScore, anwearSecond: app.calcTimes(roomData, now) })
// await round.setProblem(await Model.Problem.findOne({ where: {question: problem.question} }))
// await round.setOption(await Model.Option.findById(option.id))

await (await round.getOption()).increment('answearTimes', {by: 1})
let user = await Model.User.findOne({ where: {token: input.token} })
await user.addRound(round)
roomData.playerScores.push(playerScore)
await redis.set(input.roomName, JSON.stringify(roomData))
client.to(input.roomName).emit('answear', { currect: option.currect, score: playerScore })
}
}
}
})
// await (await round.getOption()).increment('answearTimes', {by: 1})
// let user = await Model.User.findOne({ where: {token: input.token} })
// await user.addRound(round)
// roomData.playerScores.push(playerScore)
// await redis.set(input.roomName, JSON.stringify(roomData))
// client.to(input.roomName).emit('answear', { currect: option.currect, score: playerScore })
// }
// }
// }
// })
})
}

Expand Down

0 comments on commit c1d12a6

Please sign in to comment.