diff --git a/charitygen.js b/charitygen.js index 9e36a2f..151a4df 100644 --- a/charitygen.js +++ b/charitygen.js @@ -2,8 +2,8 @@ var randomstring = require("randomstring"); function charityGen() { - ffnames = ["Quren","Wendy","Erica","Rebecca","Tabitha","Yennifer","Ulanda","Irene","Omara","Penelope","Agne","Sarah","Diane","Febroch","Gillian","Hannah","Jessica","Karen","Laura","Zoe","Xephod","Caitlyn","Violet","Betty","Noreen","Martha"] - mfnames = ["Qwin","William","Eric","Robert","Thomas","Yakov","Umber","Ian","Odin","Peter","Adam","Sam","Daniel","Fredrich","Geoff","Hubert","Jack","Kevin","Liam","Zack","Xaphod","Carl","Victor","Benjamin","Nathan","Mark"] + ffnames = ["Quinn","Wendy","Erica","Rebecca","Tabitha","Yennifer","Ulanda","Irene","Omara","Penelope","Agne","Sarah","Diane","Febroch","Gillian","Hannah","Jessica","Karen","Laura","Zoe","Xephodette","Caitlyn","Violet","Betty","Noreen","Martha"] + mfnames = ["Quintin","William","Eric","Robert","Thomas","Yakov","Umber","Ian","Odin","Peter","Adam","Sam","Daniel","Fredrich","Geoff","Hubert","Jack","Kevin","Liam","Zack","Xaphod","Carl","Victor","Benjamin","Nathan","Mark"] lnames = ["Qwerner","Windburg","Eoinson","Rasputin","Thunburgler","Yankovic","Udenminster","Irason","Onglangling","Petrovic","Ainsly","Sumpworth","Donnington","Fontain","Goodly","Henderson","Jillersworth","Kurteen","Luth","Zundar","Xembi","Coats","Veloure","Bunglesworth","Nempham","Macklesmith"] establishments = ["Trust","Foundation","Service","Association","Fund","Philanthropic Enterprise","Centre","Endowment","Charity","Network","Service"] acronym = randomstring.generate({length:3,charset: 'alphabetic'}).toUpperCase() diff --git a/client/simpleclient/dockerfile b/client/simpleclient/dockerfile new file mode 100644 index 0000000..caeb8a0 --- /dev/null +++ b/client/simpleclient/dockerfile @@ -0,0 +1,7 @@ +FROM nginx + +ADD ./ /usr/share/nginx/html + +LABEL traefik.port="80" +EXPOSE 80 +CMD ["nginx", "-g", "'daemon off'"] \ No newline at end of file diff --git a/client/simpleclient/index.css b/client/simpleclient/index.css index 1f2240d..14b7c56 100755 --- a/client/simpleclient/index.css +++ b/client/simpleclient/index.css @@ -1,12 +1,109 @@ body{ margin:40px auto; - max-width:650px; + max-width:90%; line-height:1.6; font-size:18px; color:#444; padding:0 10px; + font-family: monospace; } h1,h2,h3{ line-height:1.2 -} \ No newline at end of file +} + +.donateInput{ + width: 35%; +} + +select{ + height: auto; + width: 80%; + font-size: large; +} + +input{ + height: auto; + width: 80%; + font-size: large; +} + +button{ + height: auto; + width: 18%; + font-size: large; +} + +#controls{ + width: 100%; +} +#Reigster-Container{ + visibility: visible; + width: 100%; +} + +#Make-Container{ + visibility: hidden; + scale: 0; +} + +#Join-Container{ + visibility: hidden; + scale: 0; +} + +#Start-Container{ + visibility: hidden; + scale: 0; +} + +#Donate-Container{ + visibility: hidden; + scale: 0; +} + +#Accuse-Container{ + visibility: hidden; + scale: 0; +} + + +#messages{ + visibility: hidden; + scale: 0; +} + +#games{ + visibility: hidden; + scale: 0; +} + +#gameInfo{ + visibility: hidden; + scale: 0; +} + +#myCharity{ + visibility: hidden; + scale: 0; +} + +#charityStatus{ + visibility: hidden; + scale: 0; +} + +#boardFunding{ + visibility: hidden; + scale: 0; +} + +#transactionLog{ + visibility: hidden; + scale: 0; +} + +#accusationLog{ + visibility: hidden; + scale: 0; +} diff --git a/client/simpleclient/index.html b/client/simpleclient/index.html index 48ea19d..5c35896 100755 --- a/client/simpleclient/index.html +++ b/client/simpleclient/index.html @@ -4,70 +4,118 @@ - + + + + + + + -
-
-
Register +

Embezzle

+
+ +
+
+

How To Play

+ By joining a game you become apointed to the board of a multinational company who in the name of extreme altruism (and for some significant tax breaks) must distribute some of their immesne profits to lowly charities. As the cunning fox you are, you've setup your own charity and must now redirect as much of this firehose of funds from silly rinky-dink operations like oxfam to your own back pocket. +
+ However, you can't be entierly blatant about it as, after each quaters funds are distributed, a board member must be fired as they are undoubtedly performing the heinous crime of cold-heartedly stealing what few morsels of funding the benevolent company has seen fit to bestow on the worlds most needy and vulnerable. The swines! +
    Join a board of directors
+
    Distribute funds to yourown and other's charities
+
    Vote out one of your fellow board members
+
    Have the most capital in your charity when only two members remain on the board to win
+
+
Register a player
- -
-
Make + +
+
Make A game (Select a number of player slots)
-
-
Join +
+
Join a game (Using a GameID)
-
-
Start +
+
Start the game!
- -
-
Accuse +
+
Accuse a player of embezzlement
- + +
+
+
-
-
- \ No newline at end of file + diff --git a/client/simpleclient/index.js b/client/simpleclient/index.js index 83658b0..c91df43 100755 --- a/client/simpleclient/index.js +++ b/client/simpleclient/index.js @@ -1,6 +1,5 @@ // Global Vars - -serverAddr="http://localhost:3000" +serverAddr="https://embezzle-server.nannal.com" ownerID='' // ownerID='6298bc89-41cb-4cc7-84cd-7fd8e419f263' gameID='' @@ -24,6 +23,10 @@ function register(){ //hide register //show make & join //show list of games + cssHide("Reigster-Container") + cssShow("Make-Container") + cssShow("Join-Container") + listGames() }) .catch((error) => { @@ -37,7 +40,8 @@ function listGames(){ return response.json(); }) .then((data) => { - document.getElementById('messages').value='data.gamesArr' + gamesFormat(data) + cssShow("games") console.log(data); }); } @@ -60,6 +64,16 @@ function make(){ // console.log(data) gameID=data.gameID gameData(gameID) + document.getElementById("gameID").innerHTML="

Your gameID is:"+gameID+"

share the gameID with any users you want to join your game

" + cssHide("games") + cssHide("Make-Container") + cssHide("Join-Container") + + cssShow("messages") + cssShow("gameInfo") + cssShow("playerInfo") + cssShow("Start-Container") + }) .catch((error) => { @@ -70,6 +84,15 @@ function make(){ function join(){ console.log("join") gameID=document.getElementById('join').value + gameData(gameID) + + cssHide("games") + cssHide("Make-Container") + cssHide("Join-Container") + + cssShow("messages") + cssShow("gameInfo") + cssShow("playerInfo") const data = { ownerID: ownerID, gameID: gameID }; @@ -83,11 +106,19 @@ function join(){ }) .then((response) => response.json()) .then((data) => { + document.getElementById("gameID").innerHTML="

Your gameID is:"+gameID+"

share the gameID with any users you want to join your game

" // console.log(data) - gameData(gameID) + }) .catch((error) => { console.error('Error:', error); + + cssShow("games") + cssShow("Make-Container") + cssShow("Join-Container") + + cssHide("messages") + cssHide("gameInfo") }); } @@ -105,14 +136,18 @@ function gameData(gameID) { gameData(gameID) clearInterval(checkIfStarted) }, 1000) - if (document.getElementById("messages").innerText != "Game Name: "+data.name+", GameID: "+data.gameID) { - document.getElementById("messages").innerText="Game Name: "+data.name+", GameID: "+data.gameID + html="Waiting For "+data.name+" to start the game, "+data.players.length+"/"+data.seats+" seats are full
" + data.players.forEach(element => { + html=html+"Player: "+element.name+"
" + }) + if (document.getElementById("messages").innerHTML != html) { + document.getElementById("messages").innerHTML=html + } }) } function start(){ - console.log("start") const data = { ownerID: ownerID, gameID: gameID }; @@ -127,7 +162,7 @@ function start(){ .then((response) => response.json()) .then((data) => { console.log(data) - + cssHide("Start-Container") }) .catch((error) => { console.error('Error:', error); @@ -156,6 +191,7 @@ function donate(){ }) .then((response) => response.json()) .then((data) => { + donateFormat(data) // console.log(data) // gameData(gameID) }) @@ -182,7 +218,7 @@ function accuse(){ .then((response) => response.json()) .then((data) => { // console.log(data) - document.getElementById("accuseLog").innerText=data + accuseFormat(data) // gameData(gameID) }) .catch((error) => { @@ -219,7 +255,7 @@ function status() { //Quick Recurring updates - setInterval(function(){ + statusint = setInterval(function(){ fetch(serverAddr+'/game/'+gameID+'/boardFunding', { method: 'POST', headers: { @@ -249,9 +285,9 @@ function status() { }); if (document.getElementById("donate").innerHTML != dropDownList){ document.getElementById("donate").innerHTML=dropDownList - statusObj.charitylist=data + // statusObj.charitylist=data } - document.getElementById("charityStatus").innerHTML=charityStatusFormat(data) + charityStatusFormat(data) }); @@ -260,9 +296,39 @@ function status() { return response.json(); }) .then((data) => { - statusObj.playerlist=data + playerListFormat(data) + // statusObj.playerlist=data + // console.log(data); + }); + + fetch(serverAddr+'/game/'+gameID+'/accuseinfo') + .then((response) => { + return response.json(); + }) + .then((data) => { + accuseFormat(data) + // statusObj.playerlist=data + // console.log(data); + }); + fetch(serverAddr+'/game/'+gameID+'/distributioninfo') + .then((response) => { + return response.json(); + }) + .then((data) => { + donateFormat(data) + // statusObj.playerlist=data // console.log(data); }); + + fetch(serverAddr+'/game/'+gameID+'/statusinfo') + .then((response) => { + return response.json(); + }) + .then((data) => { + statusFormat(data) + // statusObj.playerlist=data + // console.log(data); + }); // fdocument.getElementById("info").innerText=prettyprint(statusObj) }, 3000) } @@ -276,12 +342,127 @@ function myCharityFormat(data) { function charityStatusFormat(data) { html="" - data.forEach(element => { - html=html+""+element.name+": "+element.capital + data.charatiesArr.forEach(element => { + html=html+""+element.name+": "+element.capital+"
" }) - return html + if (document.getElementById("charityStatus").innerHTML != html) { + document.getElementById("charityStatus").innerHTML=html + } + } function boardFundingFormat(data) { + if (document.getElementById("boardFunding").innerHTML != "My Funds: "+data.funds) { + document.getElementById("boardFunding").innerHTML= "My Funds: "+data.funds + } + +} + +function donateFormat(data) { + html="" + data.log.forEach(element => { + html=html+element.donator+", donated "+element.amount+" to "+element.charity+"
" + }) + if(document.getElementById("transactionLog").innerHTML != html){ + document.getElementById("transactionLog").innerHTML=html + } +} + +function accuseFormat(data) { + html="" + if(typeof data.winner != "undefined"){ + document.getElementById("accusationLog").innerHTML="

"+data.winner+" has won the game

" + clearInterval(statusint) + } + else{ + accusers=Object.keys(data.log) + accusers.forEach(element => { + html=html+element+" accuses "+data.log[element]+"
" + }) + if(document.getElementById("accusationLog").innerHTML != html){ + document.getElementById("accusationLog").innerHTML=html + } + } +} + + +function gamesFormat(data) { + html="

Games:


" + data.gamesArr.forEach(element => { + html=html+element.gameID+", "+element.name+"
" + }) + if (document.getElementById("games").innerHTML != html) { + document.getElementById("games").innerHTML = html + } +} + +function playerListFormat(data) { + html="" + accuseListFormat(data.playersArr) + data.playersArr.forEach(element => { + html=html+""+element.name+": Funds "+element.funds+", Status: "+element.status+"
" + }) + if (document.getElementById("playerInfo").innerHTML != html){ + document.getElementById("playerInfo").innerHTML=html + } +} + +function statusFormat(data) { + if (document.getElementById("gameInfo").innerHTML != "

Round Status: "+data.status+"

") { + document.getElementById("gameInfo").innerHTML="

Round Status: "+data.status+"

" + } + if (data.status == "Distribution") { + cssHide("messages") + cssShow("gameInfo") + cssShow("myCharity") + cssShow("charityStatus") + cssShow("boardFunding") + + cssShow("Donate-Container") + cssShow("transactionLog") + + cssHide("messages") + cssHide("accusationLog") + cssHide("Accuse-Container") + } + else { + cssHide("Donate-Container") + cssShow("accusationLog") + cssShow("Accuse-Container") + } +} + +function accuseListFormat(data){ + dropDownList="" + data.forEach(element => { + dropDownList=dropDownList+'' + }); + if (document.getElementById("accuse").innerHTML != dropDownList){ + document.getElementById("accuse").innerHTML=dropDownList + // statusObj.charitylist=data + } +} + +function cssHide(id){ + if (document.getElementById(id).style.visibility != "Hidden") { + document.getElementById(id).style.lineHeight=0 + document.getElementById(id).style.margin=0 + document.getElementById(id).style.fontSize=0 + document.getElementById(id).style.visibility="Hidden" + document.getElementById(id).style.size="0px" + document.getElementById(id).style.zIndex="100" + document.getElementById(id).style.scale="0" + } +} + +function cssShow(id){ + if (document.getElementById(id).style.visibility != "Visible") { + document.getElementById(id).style.lineHeight=1.6 + document.getElementById(id).style.fontSize="Large" + document.getElementById(id).style.visibility="Visible" + document.getElementById(id).style.size="Auto" + document.getElementById(id).style.zIndex="0" + document.getElementById(id).style.scale="1" + } } \ No newline at end of file diff --git a/client/simpleclient/jq.js b/client/simpleclient/jq.js deleted file mode 100644 index 47b6397..0000000 --- a/client/simpleclient/jq.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.5.0 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 { + + if (element.name == name) { + console.log(name) + console.log(element.name) + found=1 + } + }) + console.log("Found: ",found) + return found + +} + const game = { init: async (gameID) => { @@ -26,7 +49,8 @@ const game = { gameObj.charities = [] gameObj.distributionLog = [] gameObj.accuseLog = {} - gameObj.status = "distribution" + gameObj.status = "Distribution" + gameObj.round=1 for (let index = 0; index < gameObj.players.length; index++) { gameObj.charities.push({ charityID: uuidv4(), @@ -48,9 +72,8 @@ const game = { shuffle(gameObj.charities) //set board funds gameObj.players.forEach(element => { - element.funds = 10000000 + element.funds = 100000 element.status = "Employed" - console.log(element) }) //update game mongo.update("embezzle", "gamelist", { @@ -58,6 +81,25 @@ const game = { }, gameObj) }, + reset: async (gameID) => { + let gameObj = await mongo.get("embezzle", "gamelist", { + "gameID": gameID + }) + gameObj=gameObj[0] + gameObj.players.forEach(element =>{ + fundvar=100000 + roundvar=fundvar+(fundvar/(gameObj.round)) + if (element.status != "Fired"){ + element.funds=roundvar + } else {element.funds=roundvar/gameObj.players.length} + + }) + gameObj.accuseLog={} + + mongo.update("embezzle", "gamelist", { + "gameID": gameID + }, gameObj) + }, myCharity: async (gameID, ownerID) => { name = await mongo.get("embezzle", "players", { "_id": ownerID @@ -67,25 +109,21 @@ const game = { "gameID": gameID }) secret = gameObj[0].secretLink - let mine = "" + mychar="" + secret.forEach(char => { + if (char.owner == name) { + mychar=char.charity + } + }) + charname="" gameObj[0].charities.forEach(element => { - secret.forEach(user => { - console.log(name,user) - if (name==user.name){ - console.log(element, user) - console.log("User Found") - if (element.charityID == user.charity) { - console.log(element.charityID,user.charity) - (console.log("Charity Found")) - mine = element.name - } - } - }) - + if (element.charityID == mychar) { + charname=element.name + } }) - + chairtyObj = { - charity: mine + charity: charname } return chairtyObj }, @@ -105,7 +143,7 @@ const game = { }) players = gameObj[0].players return ({ - charatiesArr: players + playersArr: players }) }, @@ -119,7 +157,6 @@ const game = { "gameID": gameID }) players = players[0].players - result = "" players.forEach(element => { if (element.name == name) { r = {funds: element.funds} @@ -128,6 +165,10 @@ const game = { return r }, distribution: async (gameID, ownerID, charityID, amount) => { + + if (await check(gameID, ownerID) == 0) { + return ({Error: "You're not a player"}) + } //turn the amount to an int amount=parseInt(amount) @@ -138,57 +179,62 @@ const game = { gameObj = gameObj[0] // console.log(gameObj) - if (gameObj.status != "distribution") { + if (gameObj.status != "Distribution") { return({error:"You have tried to distribute funds when it is not the distribution round"}) - } - player = await mongo.get("embezzle", "players", { - "_id": ownerID - }) - player = player[0] - // console.log(gameObj) - - gameObj.players.forEach((element, index) => { - if (player.name == element.name){ - player=gameObj.players[index] - console.log(player) + } else { + player = await mongo.get("embezzle", "players", { + "_id": ownerID + }) + player = player[0] + // console.log(gameObj) + + gameObj.players.forEach((element, index) => { + if (player.name == element.name){ + player=gameObj.players[index] + console.log(player) + } + }) + + //check if user is trying to allocate too much money & set the amount so the users funds are wiped out + if (amount > player.funds) { + amount=player.funds } - }) - - //Wipe out the accuse log read for the next round - gameObj.accuseLog={} - - - // Now we know the game is still on-going: - //add users funds to the charity & subtract donation from users funds - - //check if user is trying to allocate too much money & set the amount so the users funds are wiped out - if (amount > player.funds) { - amount=player.funds - } - gameObj.charities.forEach( element => { - if (element.charityID == charityID) { - element.capital = element.capital+amount - player.funds = player.funds - amount - gameObj.distributionLog.push({ - donator: player.name, - amount: amount, - charity: element.name - }) + gameObj.charities.forEach( element => { + if (element.charityID == charityID) { + element.capital = element.capital+amount + player.funds = player.funds - amount + if (amount > 0 ){ + gameObj.distributionLog.push({ + donator: player.name, + amount: amount, + charity: element.name + }) + } + } + }) + + + reaminingFunding = 0 + gameObj.players.forEach(element => { + reaminingFunding=reaminingFunding+element.funds + }) + + mongo.update("embezzle", "gamelist", { + "gameID": gameID + }, gameObj) + + if (reaminingFunding == 0) { + game.roundStatus(gameID) } - }) - reaminingFunding = 0 - gameObj.players.forEach(element => { - reaminingFunding=reaminingFunding+element.funds - }) - if (reaminingFunding == 0) { - game.roundStatus(gameID) + + return ({log: gameObj.distributionLog}) } - mongo.update("embezzle", "gamelist", { - "gameID": gameID - }, gameObj) - return ({log: gameObj.distributionLog}) + }, accuse: async (gameID, ownerID, victim) => { + if (await check(gameID, ownerID) == 0) { + return {Error: "You're not a player"} + } //Get votes on who should be fired player = await mongo.get("embezzle", "players", { "_id": ownerID @@ -198,11 +244,10 @@ const game = { "gameID": gameID }) gameObj = gameObj[0] - if (gameObj.status != "accuse"){ + if (gameObj.status != "Accuse"){ return {Error: "Game status is not accuse, you'll want to distribute funds before trying to fire someone"} } - gameObj.players.forEach(element => { if (victim == element.name) { gameObj.accuseLog[player.name] = victim @@ -221,7 +266,9 @@ const game = { }) }) sorted = Object.keys(vote).sort(function(a,b){return vote[a]-vote[b]}) + console.log("Sorted: ",sorted) fired = sorted[sorted.length-1] + console.log("Fired: ",fired) gameObj.players.forEach(element => { if (element.name == fired ) { element.status="Fired" @@ -237,7 +284,7 @@ const game = { employedCount++ } }) - if (employedCount == 2) { + if (employedCount < 3) { return game.winner(gameID) } @@ -245,7 +292,7 @@ const game = { mongo.update("embezzle", "gamelist", { "gameID": gameID }, gameObj) - return ({log: gameObj.distributionLog}) + return ({log: gameObj.accuseLog}) }, winner: async (gameID) => { @@ -269,6 +316,7 @@ const game = { //Declare the winner gameObj.status="Finished" + gameObj.winner=winner mongo.update("embezzle", "gamelist", { "gameID": gameID }, gameObj) @@ -279,18 +327,46 @@ const game = { "gameID": gameID }) gameObj = gameObj[0] - console.log(gameObj.status) - if (typeof gameObj.status == "lobby" || gameObj.status == "accuse") { - gameObj.status = "distribution" + if (typeof gameObj.status == "Lobby" || gameObj.status == "Accuse") { + gameObj.status = "Distribution" + mongo.update("embezzle", "gamelist", { + "gameID": gameID + }, gameObj) + game.reset(gameID) } else { - gameObj.status = "accuse" + gameObj.status = "Accuse" } - console.log(gameObj.status) mongo.update("embezzle", "gamelist", { "gameID": gameID }, gameObj) }, + roundStatusInfo: async (gameID) => { + gameObj = await mongo.get("embezzle", "gamelist", { + "gameID": gameID + }) + gameObj = gameObj[0] + return ({status: gameObj.status}) + + }, + accuseInfo: async (gameID) => { + gameObj = await mongo.get("embezzle", "gamelist", { + "gameID": gameID + }) + gameObj = gameObj[0] + if (typeof gameObj.winner != "undefined") { + return ({winner: gameObj.winner}) + } else { + return ({log: gameObj.accuseLog}) + } + }, + distributionInfo: async (gameID) => { + gameObj = await mongo.get("embezzle", "gamelist", { + "gameID": gameID + }) + gameObj = gameObj[0] + return ({log: gameObj.distributionLog}) + }, } module.exports = game \ No newline at end of file diff --git a/index.js b/index.js index 7a55b12..7b0dd57 100644 --- a/index.js +++ b/index.js @@ -101,6 +101,32 @@ app.post('/game/:gameID/accuse', function (req, res) { res.send(JSON.stringify(r)) }) }) + +app.get('/game/:gameID/statusinfo', function (req, res) { + game.roundStatusInfo(req.params.gameID).then(r => { + res.send(JSON.stringify(r)) + }) +}) + +app.get('/game/:gameID/distributioninfo', function (req, res) { + game.distributionInfo(req.params.gameID).then(r => { + res.send(JSON.stringify(r)) + }) +}) + +app.get('/game/:gameID/accuseinfo', function (req, res) { + game.accuseInfo(req.params.gameID).then(r => { + res.send(JSON.stringify(r)) + }) +}) + +app.get('/game/:gameID/distributioninfo', function (req, res) { + game.distributIoninfo(req.params.gameID).then(r => { + res.send(JSON.stringify(r)) + }) +}) + + // roundStatus -- this should not be public wtf? // app.get('/game/:gameID/roundStatus', function (req, res) { // game.roundStatus(req.params.gameID).then(r => { diff --git a/lobby.js b/lobby.js index c382366..a97e3d3 100644 --- a/lobby.js +++ b/lobby.js @@ -7,7 +7,7 @@ var lobby = { result = await mongo.get("embezzle", "gamelist", {}) pubArr = [] result.forEach(element => { - if (element.status == "lobby") { + if (element.status == "Lobby") { obj = { gameID: element.gameID, name: element.name, @@ -25,7 +25,7 @@ var lobby = { }) pubArr = [] result.forEach(element => { - if (element.status == "lobby") { + if (element.status == "Lobby") { obj = { gameID: element.gameID, name: element.name, @@ -39,7 +39,7 @@ var lobby = { }, register: (name) => { id = uuidv4() - name=name+'-'+id.split('-')[3] + name=encodeURIComponent(name.substring(0,16))+'-'+id.split('-')[3] mongo.put("embezzle", "players", { _id: id, name: name @@ -61,7 +61,7 @@ var lobby = { ownerID: ownerID, name: name, seats: seats, - status: "lobby", + status: "Lobby", players: [] }) lobby.join(ownerID, gameID) @@ -83,7 +83,7 @@ var lobby = { playerObj = { name: player.name } - if (gameObj.status != "lobby") { + if (gameObj.status != "Lobby" || gameObj.players.length == gameObj.seats) { return {error:"Unable to join game"} } else { gameObj.players.push(playerObj) @@ -101,7 +101,7 @@ var lobby = { "ownerID": ownerID, "gameID": gameID }).then(value => { - value[0].status = "playing" + value[0].status = "Playing" mongo.update("embezzle", "gamelist", { "gameID": gameID, "ownerID": ownerID diff --git a/mongoHelp.js b/mongoHelp.js index 541a1f0..73518a9 100644 --- a/mongoHelp.js +++ b/mongoHelp.js @@ -1,6 +1,6 @@ var MongoClient = require('mongodb').MongoClient -var url = 'mongodb://localhost:27017' +var url = process.env.mongo||'mongodb://embmongo' var options= { useNewUrlParser: true, useUnifiedTopology: true,