This commit is contained in:
I-Have-An-Issue 2023-01-22 21:59:22 -05:00
parent 87a96a7595
commit 34102c9f47
No known key found for this signature in database
GPG Key ID: E55435DEA0825091
13 changed files with 111 additions and 49 deletions

View File

@ -1,15 +1,16 @@
RCCSERVICE=
ARBITER_TOKEN=
BASE_URL=
BASE_URL=https://crapblox.cf
RENDER_FORMAT=
RENDER_BASE64=
RENDER_FORMAT=PNG
RENDER_BASE64=true
RENDER_USER_WIDTH=
RENDER_USER_HEIGHT=
RENDER_USER_WIDTH=420
RENDER_USER_HEIGHT=420
RENDER_ASSET_WIDTH=
RENDER_ASSET_HEIGHT=
RENDER_ASSET_WIDTH=420
RENDER_ASSET_HEIGHT=420
RENDER_PLACE_WIDTH=
RENDER_PLACE_HEIGHT=
RENDER_PLACE_WIDTH=720
RENDER_PLACE_HEIGHT=480

23
package-lock.json generated
View File

@ -9,6 +9,7 @@
"version": "0.1",
"license": "ISC",
"dependencies": {
"axios": "^1.2.3",
"chalk": "^4.1.2",
"dotenv": "^16.0.3",
"express": "^4.18.2",
@ -66,13 +67,13 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/axios": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
"integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
"peer": true,
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.2.3.tgz",
"integrity": "sha512-pdDkMYJeuXLZ6Xj/Q5J3Phpe+jbGdsSzlQaFVkMQzRUL05+6+tetX8TV3p4HrU4kzuO9bt+io/yGQxuyxA/xcw==",
"dependencies": {
"follow-redirects": "^1.14.9",
"form-data": "^4.0.0"
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
},
"node_modules/axios-ntlm": {
@ -84,16 +85,6 @@
"dev-null": "^0.1.1"
}
},
"node_modules/axios-ntlm/node_modules/axios": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.2.3.tgz",
"integrity": "sha512-pdDkMYJeuXLZ6Xj/Q5J3Phpe+jbGdsSzlQaFVkMQzRUL05+6+tetX8TV3p4HrU4kzuO9bt+io/yGQxuyxA/xcw==",
"dependencies": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
},
"node_modules/body-parser": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",

View File

@ -14,6 +14,7 @@
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^1.2.3",
"chalk": "^4.1.2",
"dotenv": "^16.0.3",
"express": "^4.18.2",

View File

@ -5,14 +5,15 @@ const app = express()
const logger = require("./lib/logger.js")
if (process.platform == "linux") logger.warn("Game hosting might not be fully compatible with Linux")
global.games = new Map()
app.use("/place/start", require("./routes/place/start.js"))
app.use("/place/stop", require("./routes/place/stop.js"))
app.use("/place/execute", require("./routes/place/execute.js"))
app.use("/place/renew", require("./routes/place/renew.js"))
app.use("/game/start", require("./routes/game/start.js"))
app.use("/game/stop", require("./routes/game/stop.js"))
app.use("/game/execute", require("./routes/game/execute.js"))
app.use("/game/renew", require("./routes/game/renew.js"))
app.use("/render/asset", require("./routes/render/asset.js"))
app.use("/render/place", require("./routes/render/place.js"))
app.use("/render/game", require("./routes/render/game.js"))
app.use("/render/headshot", require("./routes/render/headshot.js"))
app.use("/render/bodyshot", require("./routes/render/bodyshot.js"))

View File

@ -1,9 +1,49 @@
const axios = require("axios")
const { readFileSync } = require("fs")
const Job = require("./Job.js")
const logger = require("../logger.js")
class GameJob extends Job {
constructor({ placeId }) {
constructor() {
super()
}
StartGame(id) {
return new Promise(async (resolve, reject) => {
const response = await axios(`${process.env.BASE_URL}/API/Game/${id}?t=${process.env.ARBITER_TOKEN}`).catch((_) => reject(_))
const { server_token, server_port, server_owner_id } = response.data
this.id = server_token
const started = await this.Start()
if (!started) throw new Error("RCCService failed to start")
if (!this.client) await this.CreateClient()
logger.info(`[${this.id}] GameJob started for ${id}`)
this.OpenJobEx({
name: this.id,
script: readFileSync(__dirname + "/../../lua/gameserver.lua", { encoding: "utf-8" }),
arguments: {
LuaValue: [
{ type: "LUA_TSTRING", value: this.id },
{ type: "LUA_TSTRING", value: "Place" },
{ type: "LUA_TSTRING", value: process.env.BASE_URL },
{ type: "LUA_TNUMBER", value: id },
{ type: "LUA_TNUMBER", value: 53640 },
// { type: "LUA_TNUMBER", value: server_port },
{ type: "LUA_TNUMBER", value: server_owner_id },
],
},
}).catch((e) => reject(e))
resolve()
})
}
}
module.exports = GameJob
// a http://crapblox.cf/ -t 1 -j http://crapblox.cf//Game/JoinServer?Token=jRCfrKmwFfLBAvjNOQqNuOB210rjIvz4UfMhwIaY7teYGxXniECENL2vh8rvhSU2&PlaceId=10052

14
src/routes/game/renew.js Normal file
View File

@ -0,0 +1,14 @@
const express = require("express")
const app = express.Router()
const GameJob = require("../../lib/classes/GameJob.js")
app.get("/:token/:expire", async (request, response) => {
const game = global.games.get(request.params.token)
if (!game) return response.status(404).json({ error: "Game is not running" })
await game.RenewLease(request.params.expire)
return response.json({ success: true })
})
module.exports = app

18
src/routes/game/start.js Normal file
View File

@ -0,0 +1,18 @@
const express = require("express")
const app = express.Router()
const GameJob = require("../../lib/classes/GameJob.js")
app.get("/:id", async (request, response) => {
const job = new GameJob()
const result = await job.StartGame(request.params.id).catch((_) => _)
global.games.set(job.id, job)
job.proc.once("exit", () => {
global.games.delete(job.id)
})
return response.json({ success: true })
})
module.exports = app

14
src/routes/game/stop.js Normal file
View File

@ -0,0 +1,14 @@
const express = require("express")
const app = express.Router()
const GameJob = require("../../lib/classes/GameJob.js")
app.get("/:token", async (request, response) => {
const game = global.games.get(request.params.token)
if (!game) return response.status(404).json({ error: "Game is not running" })
game.Stop()
return response.json({ success: true })
})
module.exports = app

View File

@ -1,6 +0,0 @@
const express = require("express")
const app = express.Router()
app.all("*", (request, response) => response.status(404).json({ status: 404 }))
module.exports = app

View File

@ -1,6 +0,0 @@
const express = require("express")
const app = express.Router()
app.all("*", (request, response) => response.status(404).json({ status: 404 }))
module.exports = app

View File

@ -1,6 +0,0 @@
const express = require("express")
const app = express.Router()
app.all("*", (request, response) => response.status(404).json({ status: 404 }))
module.exports = app