Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update to async iterators #73

Merged
merged 6 commits into from
Jan 24, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions .aegir.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
'use strict'

const Libp2p = require('libp2p')
const PeerInfo = require('peer-info')
const { config } = require('./test/utils/create-libp2p')

let relay

module.exports = {
hooks: {
pre: async () => {
const peerInfo = await PeerInfo.create()
peerInfo.multiaddrs.add('/ip4/127.0.0.1/tcp/24642/ws')

const defaultConfig = await config()

relay = new Libp2p({
...defaultConfig,
peerInfo,
config: {
...defaultConfig.config,
relay: {
enabled: true,
hop: {
enabled: true
}
}
}
})

await relay.start()
},
post: async () => {
await relay.stop()
}
}
}
44 changes: 44 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
language: node_js
branches:
only:
- master
- /^release\/.*$/
cache: npm
stages:
- check
- test
- cov

node_js:
- '12'

os:
- linux
- osx
- windows

script: npx nyc -s npm run test:node -- --bail
after_success: npx nyc report --reporter=text-lcov > coverage.lcov && npx codecov

jobs:
include:
- stage: check
script:
- npx aegir commitlint --travis
- npx aegir dep-check
- npm run lint

- stage: test
name: chrome
addons:
chrome: stable
script: npx aegir test -t browser -t webworker

- stage: test
name: firefox
addons:
firefox: latest
script: npx aegir test -t browser -t webworker -- --browsers FirefoxHeadless

notifications:
email: false
77 changes: 39 additions & 38 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,12 @@
[![made by Protocol Labs](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai)
[![Freenode](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs)

[![Build Status](https://travis-ci.org/ipfs-shipyard/ipfs-pubsub-room.svg?branch=master)](https://travis-ci.org/ipfs-shipyard/ipfs-pubsub-room)
[![Build Status](https://travis-ci.com/ipfs-shipyard/ipfs-pubsub-room.svg?branch=master)](https://travis-ci.com/ipfs-shipyard/ipfs-pubsub-room)

> Creates a room based on an IPFS pub-sub channel. Emits membership events, listens for messages, broadcast and direct messeges to peers.
> Creates a room based on a LibP2P pub-sub channel. Emits membership events, listens for messages, broadcast and direct messeges to peers.

([Demo video](https://t.co/HNYQGE4D4P))

## js-ipfs

This package has been tested with js-ipfs version __0.32.0__.

## Install

```bash
Expand All @@ -21,59 +17,64 @@ $ npm install ipfs-pubsub-room

## Use

Creating a pubsub room from a LibP2P node

```js
const Room = require('ipfs-pubsub-room')
const Libp2p = require('libp2p')

const libp2p = new Libp2p({ ... })
await libp2p.start()

// libp2p node is ready, so we can start using ipfs-pubsub-room
const room = Room(libp2p, 'room-name')
```

Creating a pubsub room from an IPFS node

```js
const Room = require('ipfs-pubsub-room')
const IPFS = require('ipfs')
const ipfs = new IPFS({
EXPERIMENTAL: {
pubsub: true
},
config: {
Addresses: {
Swarm: [
'/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'
]
}
}
})

// IPFS node is ready, so we can start using ipfs-pubsub-room
ipfs.on('ready', () => {
const room = Room(ipfs, 'room-name')
const ipfs = await IPFS.create({ ... })
const room = Room(ipfs.libp2p, 'room-name')
```

Once we have a room we can listen for messages

room.on('peer joined', (peer) => {
console.log('Peer joined the room', peer)
})
```js
room.on('peer joined', (peer) => {
console.log('Peer joined the room', peer)
})

room.on('peer left', (peer) => {
console.log('Peer left...', peer)
})
room.on('peer left', (peer) => {
console.log('Peer left...', peer)
})

// now started to listen to room
room.on('subscribed', () => {
console.log('Now connected!')
})
// now started to listen to room
room.on('subscribed', () => {
console.log('Now connected!')
})
```

## API

### Room (ipfs:IPFS, roomName:string, options:object)
### Room (libp2p:LibP2P, roomName:string, options:object)

* `ipfs`: IPFS object. Must have pubsub activated
* `libp2p`: LibP2P node. Must have pubsub activated
* `roomName`: string, global identifier for the room
* `options`: object:
* `pollInterval`: interval for polling the pubsub peers, in ms. Defaults to 1000.

```js
const room = Room(ipfs, 'some-room-name')
const room = Room(libp2p, 'some-room-name')
```

## room.broadcast(message)

Broacasts message (string or buffer).

## room.sendTo(peer, message)
## room.sendTo(cid, message)

Sends message (string or buffer) to peer.

Expand All @@ -85,7 +86,7 @@ Leaves room, stopping everything.

Returns an array of peer identifiers (strings).

## room.hasPeer(peer)
## room.hasPeer(cid)

Returns a boolean indicating if the given peer is present in the room.

Expand All @@ -96,11 +97,11 @@ Listens for messages. A `message` is an object containing the following properti
* `from` (string): peer id
* `data` (Buffer): message content

## room.on('peer joined', (peer) => {})
## room.on('peer joined', (cid) => {})

Once a peer has joined the room.

## room.on('peer left', (peer) => {})
## room.on('peer left', (cid) => {})

Once a peer has left the room.

Expand Down
15 changes: 0 additions & 15 deletions circle.yml

This file was deleted.

22 changes: 12 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"lint": "aegir lint",
"test": "aegir test",
"test:node": "aegir test -t node",
"test:browser": "aegir test - browser"
"test:browser": "aegir test -t browser"
},
"repository": {
"type": "git",
Expand All @@ -28,18 +28,20 @@
"homepage": "https://github.com/ipfs-shipyard/ipfs-pubsub-room#readme",
"dependencies": {
"hyperdiff": "^2.0.5",
"lodash.clonedeep": "^4.5.0",
"pull-pushable": "^2.2.0",
"pull-stream": "^3.6.9"
"it-pipe": "^1.1.0",
"lodash.clonedeep": "^4.5.0"
},
"devDependencies": {
"async": "^2.6.1",
"aegir": "^20.5.1",
"chai": "^4.2.0",
"delay": "^4.3.0",
"dirty-chai": "^2.0.1",
"aegir": "^18.0.3",
"ipfs": "~0.34.4"
},
"browser": {
"./test/utils/create-repo-node.js": "./test/utils/create-repo-browser.js"
"libp2p": "0.27.0-rc.0",
"libp2p-gossipsub": "0.2.1",
"libp2p-mplex": "^0.9.3",
"libp2p-secio": "^0.12.2",
"libp2p-websockets": "^0.13.2",
"peer-info": "^0.17.1",
"rimraf": "^3.0.0"
}
}
Loading