const express = require("express") const router = express.Router() const bodyParser = require('body-parser') const rcc = require('./../../model/rcc.js') const rcc2018 = require('./../../model/rcc2018.js') const rcc2020 = require('./../../model/rcc2020.js') const games = require('./../../model/games.js') const rcctalk = require('./../../rcctalk') const rcctalk2018 = require('./../../rcctalk2018') const User = require('../../model/user.js') router.use(bodyParser.json()) require('dotenv').config() const RCC_HOST = process.env.RCC_HOST router.post("/api/updategameinfo", async (req, res) => { var ip = req.headers['cf-connecting-ip'] || req.socket.remoteAddress if (ip == RCC_HOST || ip == "::ffff:"+RCC_HOST) { const {game,players} = req.body //const instance = await rcc.findOne({PlaceId: game}).lean() games.updateOne({idofgame: game}, { $set: { numberofplayers: parseInt(players).toString() } }, function(err, doc) { //console.log(err) }) res.send("good") } }) router.all(["/api/updategameinfo/updatevisits","/game/placevisit.ashx"], async (req, res) => { var ip = req.headers['cf-connecting-ip'] || req.socket.remoteAddress if (ip == RCC_HOST || ip == "::ffff:"+RCC_HOST) { let {game} = req.body if (req.query.AssociatedPlaceID){ game = req.query.AssociatedPlaceID } //const instance = await rcc.findOne({PlaceId: game}).lean() games.updateOne({idofgame: game}, { $inc: { visits: 1 } }, function(err, doc) { //console.log(err) }) res.send("good") } }) router.all("/api/updategameinfo/gameloaded", async (req, res) => { var ip = req.headers['cf-connecting-ip'] || req.socket.remoteAddress if (ip == RCC_HOST || ip == "::ffff:"+RCC_HOST) { let {game} = req.body const gamedoc = await games.findOne({idofgame: game}).lean() if (gamedoc.version === "2020"){ rcc2020.updateOne({PlaceId: game}, { $set: { Status: 2 } }, function(err, doc) { //console.log(err) }) } if (gamedoc.version === "2018"){ rcc2018.updateOne({PlaceId: game}, { $set: { Status: 2 } }, function(err, doc) { //console.log(err) }) } if (gamedoc.version === "2016"){ rcc.updateOne({PlaceId: game}, { $set: { Status: 2 } }, function(err, doc) { //console.log(err) }) } res.send("good") } }) router.post("/api/updategameinfo/closejob", async (req, res) => { var ip = req.headers['cf-connecting-ip'] || req.socket.remoteAddress if (ip == RCC_HOST || ip == "::ffff:"+RCC_HOST) { console.log("closed") let {game} = req.body if(typeof game === 'string'){ game = game.replace('game','') } //const instance = await rcc.findOne({PlaceId: game}).lean() games.updateOne({idofgame: game}, { $set: { numberofplayers: "0" } }, function(err, doc) { //console.log(err) }) games.updateOne({idofgame: game}, { $set: { players: [] } }, function(err, doc) { //console.log(err) }) const gamedoc = await games.findOne({idofgame: game}).lean() try{ if (gamedoc.version === "2018"){ await rcc2018.deleteOne({PlaceId: game}) rcctalk2018.CloseJob("game"+game) } }catch{} try{ if (gamedoc.version === "2020"){ await rcc2020.deleteOne({PlaceId: game}) rcctalk2018.CloseJob("game"+game) } }catch{} try{ if (gamedoc.version === "2016"){ await rcc.deleteOne({PlaceId: game}) rcctalk.CloseJob("game"+game) } }catch{} res.send("good") } }) router.get("/api/updategameinfo/closealljobs", async (req, res) => { var ip = req.headers['cf-connecting-ip'] || req.socket.remoteAddress if (ip == RCC_HOST || ip == "::ffff:"+RCC_HOST) { console.log("closed all") //const instance = await rcc.findOne({PlaceId: game}).lean() await rcc.deleteMany({}) games.updateMany({version: "2016"}, { $set: { numberofplayers: "0" } }, function(err, doc) { //console.log(err) }) games.updateMany({version: "2016"}, { $set: { players: [] } }, function(err, doc) { //console.log(err) }) rcctalk.CloseAllJobs() res.send("good") } }) router.all(["/api/updategameinfo/updatepresence"], async (req, res) => { var ip = req.headers['cf-connecting-ip'] || req.socket.remoteAddress if (ip == RCC_HOST || ip == "::ffff:"+RCC_HOST) { let {game,player,name,action} = req.body game = await games.findOne({idofgame: game}) if (action === "joining" || action === "connect"){ const updatedcount = parseFloat(game.numberofplayers)+1 games.updateOne({idofgame: game.idofgame}, { $push: { players: {userid: player, name: name} }, $set: { numberofplayers: updatedcount.toString() } }, function(err, doc) { //console.log(err) }) User.updateOne({userid: player}, { $set: { status: JSON.stringify({status: "Playing "+game.nameofgame,id: game.idofgame}) }, $addToSet: { recentlyplayed: {id: game.idofgame} }, }, function(err, doc) { //console.log(err) }) User.updateOne({userid: player}, { $set: { status: JSON.stringify({status: "Playing "+game.nameofgame,id: game.idofgame}) }, $push: { recentlyplayed: {$each: [], $slice: -10}// limit for recently played is 10 so slice anything older than that }, }, function(err, doc) { //console.log(err) }) if (game.version === "2018" || game.version === "2020"){ rcctalk2018.RenewLease("game"+game.idofgame,"69530318916789546987353800") // if someone joins we want to renew the lease so it doesn't expire // mostly just for stopping people from spamming urls and keeping games loaded } if (game.version === "2020"){ // 2020 doesn't do visits for some reason games.updateOne({idofgame: game.idofgame}, { $inc: { visits: 1 } }, function(err, doc) { //console.log(err) }) } } if (action === "leaving"|| action === "disconnect"){ const updatedcount = parseFloat(game.numberofplayers)-1 games.updateOne({idofgame: game.idofgame}, { $pull: { players: {userid: player, name: name} }, $set: { numberofplayers: updatedcount.toString() } }, function(err, doc) { //console.log(err) }) User.updateOne({userid: player}, { $set: { status: JSON.stringify({status: "Offline"}) } }, function(err, doc) { //console.log(err) }) } res.send("good") } }) module.exports = router