0.8.8 • Published 9 years ago

mm-services-kademlia v0.8.8

Weekly downloads
30
License
MIT
Repository
github
Last release
9 years ago

mm-services-kademlia

DHT to store connection information for remote peers and act as generic key/value store

works with MicroMinion platform

Initialization

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

Messaging API

Data structures

nodeInfo: Javascript object with node information

  • boxId: base64 encoded public encryption key used by nacl
  • signId: base64 encoded public signature key used by nacl
  • connectionInfo: javascript dictionary with 1tp connection information

Published messages

self.transports.nodeInfo

Publishes connection information for remote node

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

platform.messaging.on('self.transports.nodeInfo', function(topic, sender, nodeInfo) {
  console.log(topic) // 'self.transports.nodeInfo'
  console.log(sender) // 'local'
  console.log(nodeInfo) // {boxId: <boxId>, signId: <signId>, connectionInfo: <1tp connectionInfo>}
})

self.transports.requestBootstrapNodeInfo

Requests bootstrap nodes in order to start DHT (in addition to potential seed nodes)

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

//local nodeInfo. This method is used for sending remote nodeInfo
var nodeInfo = {
  boxId: platform.directory.identity.getBoxId()
  signId: platform.directory.identity.getSignId()
  connectionInfo: platform.directory._connectionInfo
}

platform.messaging.on('self.transports.requestBootstrapNodeInfo', function(topic, sender, data) {
  platform.messaging.send('transports.nodeInfoBootstrap', 'local', nodeInfo)
})

self.directory.getReply

Reply to previously received get message

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

platform.messaging.on('self.directory.getReply', function(topic, sender, getReply) {
  console.log(getReply.key)
  console.log(getReply.value)
})

platform.messaging.send('directory.get', 'local', 'KeyToRetrieve')

Subscribed messages

self.transports.myNodeInfo

Uses our own node information to add to DHT

You'll never need to send this message since this is triggered from the platform object

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

var nodeInfo = {
  boxId: platform.directory.identity.getBoxId()
  signId: platform.directory.identity.getSignId()
  connectionInfo: platform.directory._connectionInfo
}

platform.messaging.send('transports.myNodeInfo', 'local', nodeInfo)

self.transports.nodeInfoBootstrap

Bootstrap messages with nodeInfo (to allow DHT to function even if not connected to the Internet by using e.g., other nodes on local network to form DHT).

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

//local nodeInfo. This method is used for sending remote nodeInfo
var nodeInfo = {
  boxId: platform.directory.identity.getBoxId()
  signId: platform.directory.identity.getSignId()
  connectionInfo: platform.directory._connectionInfo
}

platform.messaging.on('self.transports.requestBootstrapNodeInfo', function(topic, sender, data) {
  platform.messaging.send('transports.nodeInfoBootstrap', 'local', nodeInfo)
})

self.transports.requestNodeInfo

Requests node info from directory services (like DHT)

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

platform.messaging.on('self.transports.nodeInfo', function(topic, sender, nodeInfo) {
  console.log(topic) // 'self.transports.nodeInfo'
  console.log(sender) // 'local'
  console.log(nodeInfo) // nodeInfo object
})

var signId = 'NeedToImplement' //signId (base64 encoded) for node where we want to get full nodeInfo

platform.messaging.send('transports.requestNodeInfo', 'local', signId)

self.directory.get

get key/value pair from DHT

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

platform.messaging.on('self.directory.getReply', function(topic, sender, getReply) {
  console.log(getReply.key)
  console.log(getReply.value)
})

platform.messaging.send('directory.get', 'local', 'KeyToRetrieve')

self.directory.put

add key/value pair to DHT

var MicroMinionPlatform = require('mm-platform')
var Kademlia = require('mm-services-kademlia')
var kadfs = require('kad-fs')
var path = require('path')

var storageDir = './data'

var platform = new MicroMinionPlatform({
  storage: kadfs(path.join(storageDir, 'platform'))
})

var kademlia = new Kademlia({
  platform: platform,
  storage: kadfs(path.join(storageDir, 'dht'))
  seeds: null //Extra seeds
})

platform.messaging.send('directory.put', 'local', {key: 'KeyToRetrieve', value: 'ValueToRetrieve'})
0.8.8

9 years ago

0.8.7

9 years ago

0.8.6

9 years ago

0.8.5

9 years ago

0.8.4

9 years ago

0.8.3

9 years ago

0.8.2

9 years ago

0.8.1

9 years ago

0.8.0

9 years ago

0.7.0

9 years ago

0.6.5

9 years ago

0.6.4

10 years ago

0.6.3

10 years ago

0.6.2

10 years ago

0.6.1

10 years ago

0.6.0

10 years ago

0.5.9

10 years ago

0.5.8

10 years ago

0.5.7

10 years ago

0.5.6

10 years ago

0.5.5

10 years ago

0.5.4

10 years ago

0.5.3

10 years ago

0.5.2

10 years ago

0.5.0

10 years ago