diff options
-rw-r--r-- | gossip.js | 108 | ||||
-rw-r--r-- | views.js | 33 |
2 files changed, 93 insertions, 48 deletions
@@ -1,55 +1,71 @@ -function sync (src, keys) { - var server = 'ws://localhost:8080/' +function sync (subs, keys) { - var ws = new WebSocket(server + src) + var wsServers - console.log('SYNCING') + localforage.getItem('servers').then(function (servers) { + if (servers) { + console.log(servers) + wsServers = servers + } else { + servers = ['ws://localhost:8080/', 'ws://evbogue.com/'] + localforage.setItem('servers', 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) - bog(src).then(srclog => { - if (srclog) { - open(srclog[0]).then(msg => { - var req = { - src, - seq: msg.seq, - requester: keys.publicKey - } - 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, - log: sendlog, + bog(sub).then(srclog => { + if (srclog) { + open(srclog[0]).then(msg => { + var req = { + src: sub, + seq: msg.seq, + requester: keys.publicKey + } + 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()}) + } + } + } + }) + } else { + var req = { + src: sub, + seq: null, requester: keys.publicKey } - ws.send(JSON.stringify(send)) - } else { - if (serverMsg.log) { - var newlog = serverMsg.log.concat(srclog) - localforage.setItem(src, newlog).then(function () {regenerate()}) - } + + 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()}) + } } - } + }) }) - } else { - var req = { - src, - 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(src, serverMsg.log).then(function () {regenerate()}) - } - } + }) }) } @@ -9,7 +9,9 @@ function profilePage (src, keys) { scroller.appendChild(profile) - sync(src, keys) + var subs = [src] + + sync(subs, keys) var input = h('input', {placeholder: 'New name'}) @@ -35,6 +37,24 @@ function profilePage (src, keys) { }, ['Identify']) ])) + localforage.getItem('subscriptions').then(function (subs) { + if (subs.includes(src)) { + profile.appendChild(h('button', { + onclick: function () { + subs = subs.filter(a => a !== src) + localforage.setItem('subscriptions', subs).then(function () { location.reload() }) + } + }, ['Unsubscribe'])) + } else { + profile.appendChild(h('button', { + onclick: function () { + subs.push(src) + localforage.setItem('subscriptions', subs).then(function () { location.reload() }) + } + }, ['Subscribe'])) + } + }) + /*profile.appendChild(h('button', { onclick: function () { sync(src, keys) @@ -63,7 +83,16 @@ function profilePage (src, keys) { } function publicPage (keys) { - sync('@Q++V5BbvWIg8B+TqtC9ZKFhetruuw+nOgxEqfjlOZI0=', keys) + + localforage.getItem('subscriptions').then(function (subs) { + if (subs) { + sync(subs, keys) + } else { + var subs = [keys.publicKey] + localforage.setItem('subscriptions', subs) + sync(subs, keys) + } + }) scroller.appendChild(h('button', { onclick: function () { |