Fixed server, dockerfile draft
This commit is contained in:
25
Dockerfile
25
Dockerfile
@@ -1,6 +1,19 @@
|
|||||||
FROM alpine:edge
|
# https://medium.com/bb-tutorials-and-thoughts/packaging-your-vue-js-app-with-nodejs-backend-for-production-83abe213532c
|
||||||
MAINTAINER gltron
|
|
||||||
RUN apk --update add openjdk11-jre
|
FROM node:10 AS ui-build
|
||||||
COPY tronio.jar /home/tronio.jar
|
WORKDIR /usr/src/app
|
||||||
CMD ["java","-jar","/home/tronio.jar"]
|
COPY client/ ./client/
|
||||||
EXPOSE 8181
|
RUN cd client && npm install && npm run build
|
||||||
|
|
||||||
|
FROM node:10 AS server-build
|
||||||
|
WORKDIR /root/
|
||||||
|
COPY --from=ui-build /usr/src/app/client/dist ./server/dist
|
||||||
|
COPY server/package*.json ./server/
|
||||||
|
RUN cd server && npm install
|
||||||
|
COPY server/src ./server/
|
||||||
|
|
||||||
|
EXPOSE 3000
|
||||||
|
|
||||||
|
CMD ["npm", "start"]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { ToastProgrammatic as Toast } from 'buefy'
|
import { ToastProgrammatic as Toast } from 'buefy'
|
||||||
|
|
||||||
const connection = new WebSocket('ws://localhost:8181/socket')
|
const connection = new WebSocket('ws://localhost:3000/socket')
|
||||||
// const connection = new WebSocket('wss://tronio.gltronic.ovh/socket')
|
// const connection = new WebSocket('wss://tronio.gltronic.ovh/socket')
|
||||||
|
|
||||||
export default function createSocketPlugin () {
|
export default function createSocketPlugin () {
|
||||||
|
|||||||
5
server/package-lock.json
generated
5
server/package-lock.json
generated
@@ -1860,6 +1860,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
||||||
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
|
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
|
||||||
},
|
},
|
||||||
|
"uuid": {
|
||||||
|
"version": "8.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz",
|
||||||
|
"integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg=="
|
||||||
|
},
|
||||||
"v8-compile-cache": {
|
"v8-compile-cache": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
|
"uuid": "^8.3.1",
|
||||||
"ws": "^7.3.1"
|
"ws": "^7.3.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|||||||
@@ -1,39 +1,51 @@
|
|||||||
|
const { v4: uuidv4 } = require('uuid')
|
||||||
const Player = require('./models/player')
|
const Player = require('./models/player')
|
||||||
const gameSettings = require('./models/gameSettings')
|
const gameSettings = require('./models/gameSettings')
|
||||||
|
|
||||||
const players = new Map()
|
const players = {}
|
||||||
const sockets = new Map()
|
const sockets = {}
|
||||||
|
|
||||||
|
let updateInterval = -1
|
||||||
|
|
||||||
let lastUpdateTime = Date.now()
|
let lastUpdateTime = Date.now()
|
||||||
let doUpdate = true
|
let doUpdate = true
|
||||||
|
|
||||||
function login (connection, name) {
|
function login (connection, name) {
|
||||||
sockets[connection.id] = connection
|
const id = uuidv4()
|
||||||
players[connection.id] = new Player(connection.id, name)
|
connection.id = id
|
||||||
|
sockets[id] = connection
|
||||||
|
players[id] = new Player(id, name)
|
||||||
|
|
||||||
connection.send({
|
connection.send(JSON.stringify({
|
||||||
type: 'login',
|
type: 'login',
|
||||||
player: players[connection.id]
|
player: players[id]
|
||||||
})
|
}))
|
||||||
|
|
||||||
connection.send({
|
connection.send(JSON.stringify({
|
||||||
type: 'gameSettings',
|
type: 'gameSettings',
|
||||||
gameSettings: gameSettings
|
gameSettings: gameSettings
|
||||||
})
|
}))
|
||||||
|
|
||||||
|
if (updateInterval === -1) updateInterval = setInterval(() => step(), 1000)
|
||||||
}
|
}
|
||||||
|
|
||||||
function logout (connection) {
|
function logout (connection) {
|
||||||
sockets.delete(connection.id)
|
delete sockets[connection.id]
|
||||||
players.delete(connection.id)
|
delete players[connection.id]
|
||||||
|
|
||||||
|
if (Object.keys(players).length === 0) {
|
||||||
|
clearInterval(updateInterval)
|
||||||
|
updateInterval = -1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function respawn (connection) {
|
function respawn (connection) {
|
||||||
players[connection.id].reset()
|
players[connection.id].reset()
|
||||||
|
|
||||||
connection.send({
|
connection.send(JSON.stringify({
|
||||||
type: 'gamePlayerSpawn',
|
type: 'gamePlayerSpawn',
|
||||||
player: players[connection.id]
|
player: players[connection.id]
|
||||||
})
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
function update (connection, player) {
|
function update (connection, player) {
|
||||||
@@ -42,10 +54,10 @@ function update (connection, player) {
|
|||||||
|
|
||||||
function kill (player) {
|
function kill (player) {
|
||||||
player.kill()
|
player.kill()
|
||||||
sockets[player.id].send({
|
sockets[player.id].send(JSON.stringify({
|
||||||
type: 'gamePlayerDead',
|
type: 'gamePlayerDead',
|
||||||
player: player
|
player: player
|
||||||
})
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
function step () {
|
function step () {
|
||||||
@@ -54,22 +66,24 @@ function step () {
|
|||||||
const tickToSimulate = (durationSinceLastUpdate * 120) / 1000
|
const tickToSimulate = (durationSinceLastUpdate * 120) / 1000
|
||||||
lastUpdateTime = currentTime
|
lastUpdateTime = currentTime
|
||||||
|
|
||||||
players.forEach((player, id) => {
|
// console.log('UPDATE ' + currentTime + ' doUpdate ' + doUpdate)
|
||||||
|
|
||||||
|
Object.values(players).forEach((player) => {
|
||||||
if (player.isOutOfBorders()) kill(player)
|
if (player.isOutOfBorders()) kill(player)
|
||||||
|
|
||||||
players.forEach((player2, id2) => {
|
Object.values(players).forEach((player2) => {
|
||||||
if (player.state === 'DEAD') return
|
if (player.state === 'DEAD') return
|
||||||
|
|
||||||
for (let i = 0; i < player2.walls.length - 2; i++) {
|
for (let i = 0; i < player2.walls.length - 2; i++) {
|
||||||
// Prevent self destroy on last wall
|
// Prevent self destroy on last wall
|
||||||
if (id === id2 && i >= player2.walls.length - 1) break
|
if (player === player2 && i >= player2.walls.length - 1) break
|
||||||
|
|
||||||
const wallA = player2.walls[i]
|
const wallA = player2.walls[i]
|
||||||
const wallB = player2.walls[i + 1]
|
const wallB = player2.walls[i + 1]
|
||||||
|
|
||||||
if (player.isCloseToWall(wallA, wallB)) {
|
if (player.isCloseToWall(wallA, wallB)) {
|
||||||
if (player.isCrossingLine(wallA, wallB)) {
|
if (player.isCrossingLine(wallA, wallB)) {
|
||||||
if (id !== id2) player2.score += 300
|
if (player !== player2) player2.score += 300
|
||||||
kill(player)
|
kill(player)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -78,7 +92,7 @@ function step () {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
players.forEach((player, id) => {
|
Object.values(players).forEach((player) => {
|
||||||
player.step(tickToSimulate)
|
player.step(tickToSimulate)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -89,16 +103,16 @@ function step () {
|
|||||||
function broadcastUpdate () {
|
function broadcastUpdate () {
|
||||||
const update = {
|
const update = {
|
||||||
type: 'update',
|
type: 'update',
|
||||||
players: players,
|
players: Object.values(players),
|
||||||
time: lastUpdateTime
|
time: lastUpdateTime
|
||||||
}
|
}
|
||||||
sockets.forEach((connection, id) => {
|
|
||||||
connection.send(update)
|
console.log('Broadcast ' + JSON.stringify(update))
|
||||||
|
Object.values(sockets).forEach((connection) => {
|
||||||
|
connection.send(JSON.stringify(update))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
setInterval(() => step(), 1000 / 60)
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
login,
|
login,
|
||||||
logout,
|
logout,
|
||||||
|
|||||||
@@ -71,4 +71,4 @@ class Player {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = { Player }
|
module.exports = Player
|
||||||
|
|||||||
@@ -5,4 +5,4 @@ class Wall {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = { Wall }
|
module.exports = Wall
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ const server = app.listen(port, () => {
|
|||||||
const wss = new WebSocketServer({ server })
|
const wss = new WebSocketServer({ server })
|
||||||
|
|
||||||
wss.on('connection', function (connection) {
|
wss.on('connection', function (connection) {
|
||||||
connection.on('close', game.logout(connection))
|
connection.on('close', () => game.logout(connection))
|
||||||
|
|
||||||
connection.on('message', (message) => {
|
connection.on('message', (message) => {
|
||||||
let data
|
let data
|
||||||
|
|||||||
Reference in New Issue
Block a user