From a3ee24800c7f0e8f85761b0fc5b6780c591c3705 Mon Sep 17 00:00:00 2001 From: teppy999 Date: Tue, 3 Oct 2023 08:51:42 -0400 Subject: [PATCH] changes --- rangevote.js | 74 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 58 insertions(+), 16 deletions(-) diff --git a/rangevote.js b/rangevote.js index 43237cc..e5c8277 100644 --- a/rangevote.js +++ b/rangevote.js @@ -28,22 +28,61 @@ function CanId(c) // Set up data structures for Range Votes and Plur Votes -var Experiment={} -Experiment.RangeVotes=new Map(); -Experiment.RangePower=new Map(); -Experiment.RangeResult=new Map(); -Experiment.PlurVotes=new Map(); -Experiment.PlurResult=new Map(); -Experiment.PlurCount=0; -for (let c of Candidates) +var Experiment; + +fs.readFile('./rangevote.json', 'utf8', (err, data) => { + if (err) { + Experiment={}; + Experiment.RangeVotes=new Map(); + Experiment.RangePower=new Map(); + Experiment.RangeResult=new Map(); + Experiment.PlurVotes=new Map(); + Experiment.PlurResult=new Map(); + Experiment.PlurCount=0; + } + else Experiment=JSON.parse(data,MapReviver); + for (let c of Candidates) + { + let k=CanId(c); + let v=Experiment.RangePower.get(k); + if (typeof(v)!='number' || v==NaN || v==Infinity) Experiment.RangePower.set(k,0); + v=Experiment.RangeResult.get(k); + if (typeof(v)!='number' || v==NaN || v==Infinity) Experiment.RangeResult.set(k,0); + v=Experiment.PlurResult.get(k); + if (typeof(v)!='number' || v==NaN || v==Infinity) Experiment.PlurResult.set(k,0); + } +}) + + +function LogErr(err) { - let k=CanId(c); - let v=Experiment.RangePower.get(k); - if (typeof(v)!='number' || v==NaN || v==Infinity) Experiment.RangePower.set(k,0); - v=Experiment.RangeResult.get(k); - if (typeof(v)!='number' || v==NaN || v==Infinity) Experiment.RangeResult.set(k,0); - v=Experiment.PlurResult.get(k); - if (typeof(v)!='number' || v==NaN || v==Infinity) Experiment.PlurResult.set(k,0); + if (err) console.log(err); +} + +function MapReplacer(key, value) { + if(value instanceof Map) { + return { + dataType: 'Map', + value: Array.from(value.entries()), // or with spread: value: [...value] + }; + } else { + return value; + } +} + +function MapReviver(key, value) { + if(typeof value === 'object' && value !== null) { + if (value.dataType === 'Map') { + return new Map(value.value); + } + } + return value; +} + +function Persist() +{ + var str=JSON.stringify(Experiment,MapReplacer); + fs.writeFile("./rangevote.json",str,LogErr); } @@ -116,6 +155,8 @@ function AddToRangeResult(vote,mult=1) } + + function RangeVote(ip,entries) { console.log('IP: '+ip); @@ -150,7 +191,7 @@ app.post('/range_vote', urlencodedParser, function (req, res) { let key=CanId(c); if (Experiment.RangePower.get(key)>0) str=str+c+': '+Math.round(Experiment.RangeResult.get(key)/Experiment.RangePower.get(key))+'% ('+Experiment.RangePower.get(key)+' Voters)
'; } - console.log(JSON.stringify(Experiment)); + Persist(); res.send(str); }) @@ -162,6 +203,7 @@ app.post('/plur_vote', urlencodedParser, function (req, res) { let key=CanId(c); if (Experiment.PlurResult.get(key)>0) str=str+c+': '+Math.round(100.0*Experiment.PlurResult.get(key)/Experiment.PlurCount)+'%
'; } + Persist(); res.send(str); })