Exemple #1
0
  _createTracker () {
    const opts = Object.assign({}, this._trackerOpts, {
      infoHash: this.infoHash,
      announce: this._announce,
      peerId: this.peerId,
      port: this._port,
      userAgent: this._userAgent
    })

    const tracker = new Tracker(opts)
    tracker.on('warning', this._onWarning)
    tracker.on('error', this._onError)
    tracker.on('peer', this._onTrackerPeer)
    tracker.on('update', this._onTrackerAnnounce)
    tracker.setInterval(this._intervalMs)
    tracker.start()
    return tracker
  }
Exemple #2
0
Discovery.prototype._createTracker = function () {
  var self = this

  var opts = extend(self._trackerOpts, {
    infoHash: self.infoHash,
    announce: self._announce,
    peerId: self.peerId,
    port: self._port
  })

  var tracker = new Tracker(opts)
  tracker.on('warning', self._onWarning)
  tracker.on('error', self._onError)
  tracker.on('peer', self._onTrackerPeer)
  tracker.on('update', self._onTrackerAnnounce)
  tracker.setInterval(self._intervalMs)
  tracker.start()
  return tracker
}
Exemple #3
0
tracker.on('peer', function (peer) {
  peers.push(peer)

  if (peer.connected) onConnect()
  else peer.once('connect', onConnect)

  function onConnect () {
    peer.on('data', onMessage)
    peer.on('close', onClose)
    peer.on('error', onClose)
    peer.on('end', onClose)
    peer.send(JSON.stringify({ username: username, color: color, state: state }))

    function onClose () {
      peer.removeListener('data', onMessage)
      peer.removeListener('close', onClose)
      peer.removeListener('error', onClose)
      peer.removeListener('end', onClose)
      peers.splice(peers.indexOf(peer), 1)
      redraw()
    }

    function onMessage (data) {
      try {
        data = JSON.parse(data)
      } catch (err) {
        console.error(err.message)
      }
      if (data.username) {
        peer.username = data.username
        peer.color = data.color
        redraw()
      }

      if (data.state) {
        Object.keys(data.state)
          .filter(function (id) {
            return !state[id]
          })
          .forEach(function (id) {
            state[id] = data.state[id]
          })
        redraw()
      }

      if (data.pt) {
        if (!state[data.i]) state[data.i] = { pts: [], color: data.color }
        state[data.i].pts.push(data.pt)
        redraw()
      }

      if (data.infoHash) {
        state[data.infoHash] = data
        redraw()
      }
    }
  }
})