From a1993070b2199fa505b51f31e9685da32491b755 Mon Sep 17 00:00:00 2001 From: Ev Bogue Date: Sat, 17 Aug 2019 11:25:10 -0500 Subject: stream gossiped posts into view, concat gossiped posts onto logs before saving --- gossip.js | 124 +++++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 83 insertions(+), 41 deletions(-) diff --git a/gossip.js b/gossip.js index 06ce458..afe6256 100644 --- a/gossip.js +++ b/gossip.js @@ -7,64 +7,106 @@ function sync (subs, keys) { console.log(servers) wsServers = servers } else { - servers = ['ws://localhost:8080/', 'ws://evbogue.com/'] + servers = ['ws://localhost:8080/', 'ws://bogbook.com/'] localforage.setItem('pubs', servers) console.log(servers) wsServers = servers } }).then(function () { subs.forEach(function (sub) { - wsServers.forEach(function (server) { - console.log('SYNCING WITH: ' + server + ' to fetch ' + sub) - var ws = new WebSocket(server + sub) + wsServers.forEach(function (server, index) { + setTimeout(function () { + console.log('SYNCING WITH: ' + server + ' to fetch ' + sub) + var ws = new WebSocket(server + sub) - bog(sub).then(srclog => { - if (srclog) { - open(srclog[0]).then(msg => { + bog(sub).then(srclog => { + if (srclog) { + open(srclog[0]).then(msg => { + console.log(msg) + var req = { + src: sub, + seq: msg.seq + } + ws.onopen = function () { + ws.send(JSON.stringify(req)) + } + ws.onmessage = function (message) { + var serverMsg = JSON.parse(message.data) + if (msg.seq === serverMsg.seq) { + } else if (msg.seq > serverMsg.seq) { + var diff = msg.seq - serverMsg.seq + var sendlog = srclog.slice(0, diff) + var send = { + src: sub, + log: sendlog + //requester: keys.publicKey + } + ws.send(JSON.stringify(send)) + } else { + if (serverMsg.log) { + var scroller = document.getElementById('scroller') + var logFromServer = JSON.parse(message.data) + newlog = logFromServer.log + + bog().then(log => { + for (var i = newlog.length; i-- > 0; ) { + var pubkey = nacl.util.decodeBase64(newlog[i].author.substring(1)) + var sig = nacl.util.decodeBase64(newlog[i].signature) + var opened = JSON.parse(nacl.util.encodeUTF8(nacl.sign.open(sig, pubkey))) + log.unshift(opened) + opened.key = newlog[i].key + scroller.insertBefore(render(opened, keys), scroller.childNodes[2]) + + if (i === 0) { + console.log('saved log') + log.sort((a, b) => a.timestamp - b.timestamp) + localforage.setItem(sub, newlog.concat(srclog)) + localforage.setItem('log', log.reverse()) + } + } + }) + } + } + } + }) + } else if (srclog === null) { var req = { src: sub, - seq: msg.seq - //requester: keys.publicKey + seq: null } + ws.onopen = function () { ws.send(JSON.stringify(req)) } ws.onmessage = function (message) { - var serverMsg = JSON.parse(message.data) - if (msg.seq === serverMsg.seq) { - } else if (msg.seq > serverMsg.seq) { - var diff = msg.seq - serverMsg.seq - var sendlog = srclog.slice(0, diff) - var send = { - src: sub, - log: sendlog - //requester: keys.publicKey - } - ws.send(JSON.stringify(send)) - } else { - if (serverMsg.log) { - var newlog = serverMsg.log.concat(srclog) - localforage.setItem(sub, newlog).then(function () {regenerate()}) - } + var openedlog = [] + var scroller = document.getElementById('scroller') + var logFromServer = JSON.parse(message.data) + log = logFromServer.log + + localforage.setItem(sub, log) + + for (var i = log.length; i-- > 0; ) { + console.log(log[i]) + var pubkey = nacl.util.decodeBase64(log[i].author.substring(1)) + var sig = nacl.util.decodeBase64(log[i].signature) + var opened = JSON.parse(nacl.util.encodeUTF8(nacl.sign.open(sig, pubkey))) + console.log(opened) + opened.key = log[i].key + openedlog.push(opened) + scroller.insertBefore(render(opened, keys), scroller.childNodes[2]) } - } - }) - } else { - var req = { - src: sub, - seq: null - //requester: keys.publicKey - } - ws.onopen = function () { - ws.send(JSON.stringify(req)) - } - ws.onmessage = function (message) { - var serverMsg = JSON.parse(message.data) - localforage.setItem(sub, serverMsg.log).then(function () {regenerate()}) + bog().then(log => { + var newlog = openedlog.concat(log) + newlog.sort((a, b) => a.timestamp - b.timestamp) + localforage.setItem('log', newlog.reverse()) + }) + + } } - } - }) + }) + }, index * 100000) }) }) }) -- cgit v1.2.3-70-g09d2