From fb3a447f26a425a4dc37a6af59f470a74365c20e Mon Sep 17 00:00:00 2001 From: Alec Date: Mon, 27 Dec 2021 23:17:30 -0500 Subject: [PATCH] gcloud config, various bugfixes --- app.yaml | 20 +- .../images/GitHub-Mark-Light-120px-plus.png | Bin 0 -> 4044 bytes client/src/images/GitHub-Mark-Light-32px.png | Bin 1571 -> 0 bytes client/src/modules/DeckStateManager.js | 2 +- client/src/modules/GameCreationStepManager.js | 14 +- client/src/modules/GameStateRenderer.js | 5 +- client/src/modules/GameTimerManager.js | 11 +- client/src/modules/StateBucket.js | 1 + client/src/modules/Templates.js | 3 + client/src/scripts/create.js | 2 +- client/src/scripts/game.js | 17 +- client/src/styles/GLOBAL.css | 14 + client/src/styles/create.css | 1 + client/src/styles/game.css | 18 +- client/src/styles/modal.css | 11 +- client/src/views/game.html | 4 +- client/src/views/home.html | 9 +- client/webpack/webpack-dev.config.js | 1 + client/webpack/webpack-prod.config.js | 2 +- package-lock.json | 919 ++++-------------- package.json | 19 +- server/api/GamesAPI.js | 12 + server/config/globals.js | 3 +- server/main.js | 27 +- server/modules/ActiveGameRunner.js | 6 +- server/modules/GameManager.js | 33 +- server/modules/GameProcess.js | 4 +- server/routes/router.js | 8 + 28 files changed, 391 insertions(+), 775 deletions(-) create mode 100644 client/src/images/GitHub-Mark-Light-120px-plus.png delete mode 100644 client/src/images/GitHub-Mark-Light-32px.png diff --git a/app.yaml b/app.yaml index 98f616c..b55ef99 100644 --- a/app.yaml +++ b/app.yaml @@ -1,5 +1,19 @@ runtime: nodejs env: flex -entrypoint: npm run start:prod:linux -automatic_scaling: - max_instances: 1 +network: + session_affinity: true +liveness_check: + path: "/liveness_check" + check_interval_sec: 60 + timeout_sec: 4 + failure_threshold: 2 + success_threshold: 2 +readiness_check: + path: "/readiness_check" + check_interval_sec: 60 + timeout_sec: 4 + failure_threshold: 2 + success_threshold: 2 + app_start_timeout_sec: 600 +manual_scaling: + instances: 1 diff --git a/client/src/images/GitHub-Mark-Light-120px-plus.png b/client/src/images/GitHub-Mark-Light-120px-plus.png new file mode 100644 index 0000000000000000000000000000000000000000..192846a12085914cc0e38d9b48036b11d2a4d7c4 GIT binary patch literal 4044 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 ZsK8ky_?39l4gAjkwLQ)WTW#Z?@NW_mBhUZ< literal 0 HcmV?d00001 diff --git a/client/src/images/GitHub-Mark-Light-32px.png b/client/src/images/GitHub-Mark-Light-32px.png deleted file mode 100644 index 628da97c70890c73e59204f5b140c4e67671e92d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1571 zcmaJ>c~BE~6izDPQq)#Nu*KOf(n^(VHY9;fiINM65``pc+9*v(mL$bwfCjbc%v9V{8r9iX|O%>Nr%pLD2qT{mty}c=LVleeamv znz3SOSm@kP8jThvOOq(56Yzh*fz(booe!uZij=BJC6+_lbvQ~B8nA2>kXdv_RDtRY z`5QXWWEySCe6vbTs^#f?J!WC*{1~RgVx!nJTJjQyO{dRANgx|FnymtGbD9%JmCh9^y)##j7{Dcqfn*1ta$rG89pJF6w-S7Z037$rr|y0;1Onp_ zGFJdT6Q!1C0AdVB0WOmpuV=AgAQ550Tn+-mivTtYPJmz*#75#_n9oV%!#rSOfmAfy zki%C~=fTp1{O#BLpJ|0jj#m6#|LRWit-vq3PE1z9ZqyvET4sX$-Icqy7t z<=aq5ff86AuBZBu6EjJsYWM0uejufWFTwPA7Su}0Bm$7KFb!q{Um_8~A{LUG#1l(l zSehUda@kU8LIRg9fkk2tZ;~ss5~R+mM<==F7hLHpxqLB>>PQS%Vc7b~?q!%T5+h8Q z4G=4Nzyi5WZ?^gkasJ{?Xhm`JC#WG6$1K2jb@=9&D3EgD#3UhGh#*21rJjulVXjCF zvp76q62jt0zzMG5C7DlfMgPl%C^3+~wf|}Lq=}jz|MmIcQjh1Ok6NjD$Em^Iv26D> z8tt_TnM9~^Tt8mflRGPOrrX|HtT3gG4LEuuk{g2Rn}QgJIa?gZo))!!=o_l9bvD%A zZ`aHajl8#~u?!4f7F#*b*->A=R2L)6!>saz?h>#wTXT-I(XmQ zx{84skS>k=i~i`(6k4C7;Zpfx%dCPVjPayMf8pugtGM=~s=Id1l#8MZJ1-73wV#Q3 zR3>v3%}jbQs1f_Z0xo;%=LILlA+nTpKI4ha%xWW}uqHrNao~&T4AY6m`P$_n-6h*g zhoX+e4n%~gl_lhe#s+AMb7d{5WzvYTa%6Q~si@@4{;s(0zU|H&P3fE+t{7X`S#Cj@ zC#vd}^4pcBD*77Ny5=j$h8EL2_t$O38$SQiJ6fPjJMimypr~MB2(&P0aI|h}$64<0 z>_~duqNjaT=DM^6+N{&B_lED;F2wrl?!4Lk*2((x!fmrcsw+=cI^qttuZ9C}-m~5E z-ryYVpL%^xR#&(0YI5hz<(}F7-p)?FPcyJO-zVO>%9ZDXJH8pnY;GJYFDQ>vd#j_* zRrd}L(r=!g+1#nQwsO?kpS`Qq8`NxE+Zy{gf7*_7J*U2V_|NpLo{iasj7VCg_V9&| ShohtYzipXxh2)4xTk { + if (e.status === 429) { + toast('You\'ve sent this request too many times.', 'error', true, true, 6); + } }); } } @@ -450,8 +453,9 @@ function initializeRemainingEventListeners(deckManager) { e.preventDefault(); let name = document.getElementById("role-name").value.trim(); let description = document.getElementById("role-description").value.trim(); + let team = document.getElementById("role-alignment").value.toLowerCase().trim(); if (!deckManager.getCustomRoleOption(name)) { // confirm there is no existing custom role with the same name - deckManager.addToCustomRoleOptions({role: name, description: description}); + deckManager.addToCustomRoleOptions({role: name, description: description, team: team}); updateCustomRoleOptionsList(deckManager, document.getElementById("deck-select")) ModalManager.dispelModal("add-role-modal", "add-role-modal-background"); toast("Role Added", "success", true); @@ -481,10 +485,10 @@ function addOptionsToList(options, selectEl) { }); for (let i = 0; i < options.length; i ++) { let optionEl = document.createElement("option"); - let alignmentClass = customCards[i].team === globals.ALIGNMENT.GOOD ? globals.ALIGNMENT.GOOD : globals.ALIGNMENT.EVIL + let alignmentClass = options[i].team === globals.ALIGNMENT.GOOD ? globals.ALIGNMENT.GOOD : globals.ALIGNMENT.EVIL optionEl.classList.add(alignmentClass); - optionEl.setAttribute("value", customCards[i].role); - optionEl.innerText = customCards[i].role; + optionEl.setAttribute("value", options[i].role); + optionEl.innerText = options[i].role; selectEl.appendChild(optionEl); } } diff --git a/client/src/modules/GameStateRenderer.js b/client/src/modules/GameStateRenderer.js index 5b59379..aabf69e 100644 --- a/client/src/modules/GameStateRenderer.js +++ b/client/src/modules/GameStateRenderer.js @@ -39,7 +39,9 @@ export class GameStateRenderer { title.innerText = "Lobby"; document.getElementById("game-title").appendChild(title); let gameLinkContainer = document.getElementById("game-link"); - gameLinkContainer.innerText = window.location; + let linkDiv = document.createElement("div"); + linkDiv.innerText = window.location; + gameLinkContainer.prepend(linkDiv); gameLinkContainer.addEventListener('click', () => { navigator.clipboard.writeText(gameLinkContainer.innerText).then(() => { toast('Link copied!', 'success', true); @@ -265,7 +267,6 @@ function renderPotentialMods(gameState, group, transferModHandlers, socket) { container.addEventListener('click', transferModHandlers[member.id]); modalContent.appendChild(container); - console.log('test'); } } } diff --git a/client/src/modules/GameTimerManager.js b/client/src/modules/GameTimerManager.js index ad34eba..4fe03f9 100644 --- a/client/src/modules/GameTimerManager.js +++ b/client/src/modules/GameTimerManager.js @@ -114,7 +114,6 @@ export class GameTimerManager { if(!socket.hasListeners(globals.COMMANDS.GET_TIME_REMAINING)) { socket.on(globals.COMMANDS.GET_TIME_REMAINING, (timeRemaining, paused) => { - console.log('received time remaining from server'); if (paused) { this.displayPausedTime(timeRemaining); } else if (timeRemaining === 0) { @@ -151,6 +150,16 @@ export class GameTimerManager { pauseBtn.addEventListener('click', this.pauseListener); document.getElementById('play-pause').appendChild(pauseBtn); } + + processTimeRemaining(timeRemaining, paused, timerWorker) { + if (paused) { + this.displayPausedTime(timeRemaining); + } else if (timeRemaining === 0) { + this.displayExpiredTime(); + } else { + this.resumeGameTimer(timeRemaining, globals.CLOCK_TICK_INTERVAL_MILLIS, null, timerWorker); + } + } } function returnHumanReadableTime(milliseconds, tenthsOfSeconds=false) { diff --git a/client/src/modules/StateBucket.js b/client/src/modules/StateBucket.js index 62c624a..7571fc2 100644 --- a/client/src/modules/StateBucket.js +++ b/client/src/modules/StateBucket.js @@ -1,5 +1,6 @@ /* It started getting confusing where I am reading/writing to the game state, and thus the state started to get inconsistent. Creating a bucket to hold it so I can overwrite the gameState object whilst still preserving a reference to the containing bucket. + Now several components can read a shared game state. */ export const stateBucket = { currentGameState: null, diff --git a/client/src/modules/Templates.js b/client/src/modules/Templates.js index ae6a5b3..7ef70cb 100644 --- a/client/src/modules/Templates.js +++ b/client/src/modules/Templates.js @@ -128,6 +128,9 @@ export const templates = { "" + "
" + "
" + "" + + "
" + + "
" + "" + "