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);
})