You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.5 KiB
74 lines
1.5 KiB
module.exports = (logger, node, nodetable) => { |
|
|
|
|
|
const log = logger.getLogger('nslog'); |
|
|
|
|
|
|
|
const NS_DELAY = 2000; |
|
|
|
|
|
let delay = (time_ms) => new Promise(resolve => { |
|
setTimeout(()=>{ |
|
resolve(); |
|
}, time_ms); |
|
}); |
|
|
|
|
|
|
|
let o = { |
|
get: (nodeArr, refer) => new Promise(async resolve => { |
|
let list = []; |
|
nodeArr.forEach(nid => { |
|
if(node.hasOwnProperty(nid)){ |
|
list.push(nid); |
|
} |
|
}); |
|
|
|
let nsList = {}; |
|
let beginTime = new Date().valueOf(); |
|
for(nid1 of list){ |
|
for(nid2 of list){ |
|
if(nid1 != nid2){ |
|
log.info('[CHECK]', nid2, '-->', nid1); |
|
await node[nid2].checkNS(nid1, refer && refer[nid2] && refer[nid2][nid1] && refer[nid2][nid1].ip || node[nid1].info.localip, refer && refer[nid2] && refer[nid2][nid1] && refer[nid2][nid1].port || node[nid1].info.localport) |
|
} |
|
} |
|
}; |
|
|
|
await delay(NS_DELAY); |
|
|
|
list.forEach(nid => { |
|
Object.keys(node[nid].rns).forEach(nid2 => { |
|
let rns = node[nid].rns[nid2]; |
|
if(rns.LastCheckTime > beginTime){ |
|
log.info('[VERIFIED]', nid2, '-->', nid); |
|
if(!nsList.hasOwnProperty(nid2)){ |
|
nsList[nid2] = {}; |
|
} |
|
nsList[nid2][nid] = { |
|
ip: rns.ip, |
|
port: rns.port |
|
} |
|
} |
|
}); |
|
}); |
|
|
|
|
|
resolve(nsList); |
|
|
|
}), |
|
set: (nsList) => new Promise(async resolve => { |
|
let status = true; |
|
Object.keys(nsList).forEach(async nidf => { |
|
log.info('[SET]', nidf, '::', JSON.stringify(nsList[nidf])); |
|
status = status && await node[nidf].setNS(nsList[nidf]); |
|
}); |
|
resolve(status); |
|
}) |
|
} |
|
|
|
|
|
|
|
return o; |
|
} |