diff options
| author | Ev Bogue <ev@evbogue.com> | 2019-05-23 20:40:58 -0500 | 
|---|---|---|
| committer | Ev Bogue <ev@evbogue.com> | 2019-05-23 20:40:58 -0500 | 
| commit | cc8b50796fcee6a06f6c05c94eda9f5cde91d0d5 (patch) | |
| tree | 768192f424b5dac73a1673f219735fee2bbc6d63 | |
| parent | d9610ac5444308eb6bcfb3b664a9e0467b6d474d (diff) | |
sync with multiple servers and implement subscriptions
| -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 () { | 
