From 97f3bf5f81330e03b641b2cf2f14613b9d96e3aa Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 17 Sep 2015 02:49:43 +0100 Subject: [PATCH] rename, following https://github.com/diasdavid/node-ipfs-swarm/issues/8#issuecomment-140929746 --- README.md | 38 +++++++++++++++++++------------------- img/badge.png | Bin 5258 -> 5226 bytes img/badge.sketch | Bin 65536 -> 40960 bytes img/badge.svg | 8 ++++---- package.json | 12 ++++++------ tests/base-test.js | 6 +++--- 6 files changed, 32 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 9a2176f..ec31bef 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ -abstract-connection +abstract-transport =================== [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) -> A test suite and interface you can use to implement a connection. A connection is understood as something that offers a dial+listen interface +> A test suite and interface you can use to implement a transport. A transport is understood as something that offers a dial+listen interface The primary goal of this module is to enable developers to pick and swap their Record Store module as they see fit for their libp2p installation, without having to go through shims or compatibility issues. This module and test suite were heavily inspired by abstract-blob-store and abstract-stream-muxer. Publishing a test suite as a module lets multiple modules all ensure compatibility since they use the same test suite. -The purpose of this abstraction is not to reinvent any wheels when it comes to dialing and listening to connections, instead, it tries to uniform several transports through a shimmed interface. +The purpose of this abstraction is not to reinvent any wheels when it comes to dialing and listening to transports, instead, it tries to uniform several transports through a shimmed interface. The API is presented with both Node.js and Go primitives, however, there is not actual limitations for it to be extended for any other language, pushing forward the cross compatibility and interop through diferent stacks. @@ -21,9 +21,9 @@ note: for any new given implementation that adds one more option to the multiadd # Badge -Include this badge in your readme if you make a module that is compatible with the abstract-connection API. You can validate this by running the tests. +Include this badge in your readme if you make a module that is compatible with the abstract-transport API. You can validate this by running the tests. -![](https://raw.githubusercontent.com/diasdavid/abstract-connection/master/img/badge.png) +![](https://raw.githubusercontent.com/diasdavid/abstract-transport/master/img/badge.png) # How to use the battery of tests @@ -31,12 +31,12 @@ Include this badge in your readme if you make a module that is compatible with t ``` var tape = require('tape') -var tests = require('abstract-connection/tests') -var YourConnectionHandler = require('../src') +var tests = require('abstract-transport/tests') +var YourTransportHandler = require('../src') var common = { setup: function (t, cb) { - cb(null, YourConnectionHandler) + cb(null, YourTransportHandler) }, teardown: function (t, cb) { cb() @@ -52,27 +52,27 @@ tests(tape, common) # API -A valid (read: that follows this abstraction) connection, must implement the following API. +A valid (read: that follows this abstraction) transport, must implement the following API. ### Dialing to another Peer -- `Node.js` var stream = conn.dial(multiaddr, [options]) +- `Node.js` var stream = transport.dial(multiaddr, [options]) -This method dials a connection to the Peer referenced by the peerInfo object. +This method dials a transport to the Peer referenced by the peerInfo object. multiaddr must be of the type [`multiaddr`](http://npmjs.org/multiaddr). -`stream` must implements the [abstract-transport](https://github.com/diasdavid/abstract-transport) interface. +`stream` must implements the [abstract-connection](https://github.com/diasdavid/abstract-connection) interface. -`[options]` are not mandatory fields for all the implementations that might be passed for certain implementations for them to work (e.g. a Signalling Server for a WebRTC transport/connection implementation) +`[options]` are not mandatory fields for all the implementations that might be passed for certain implementations for them to work (e.g. a Signalling Server for a WebRTC transport implementation) -### Listening for incoming connections from other Peers +### Listening for incoming transports from other Peers -- `Node.js` var listener = conn.createListener(options, function (stream) {}) +- `Node.js` var listener = transport.createListener(options, function (stream) {}) -This method waits and listens for incoming connections by other peers. +This method waits and listens for incoming transports by other peers. -`stream` must be a stream that implements the [abstract-transport](https://github.com/diasdavid/abstract-transport) interface. +`stream` must be a stream that implements the [abstract-connection](https://github.com/diasdavid/abstract-connection) interface. Options are the properties this listener must have access in order to properly listen on a given transport/socket @@ -80,13 +80,13 @@ Options are the properties this listener must have access in order to properly l - `Node.js` listener.listen(options, [callback]) -This method opens the listener to start listening for incoming connections +This method opens the listener to start listening for incoming transports ### Close an active listener - `Node.js` listener.close([callback]) -This method closes the listener so that no more connections can be open +This method closes the listener so that no more connections can be open on this transport instance `callback` is function that gets called when the listener is closed. It is optional diff --git a/img/badge.png b/img/badge.png index a79ca44967796cd1569661767d3bfbe09a1ad512..1c8fe6972b5957adcd6088961701fda1ff5cf368 100644 GIT binary patch delta 5224 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 JfB6_B{2wM#je`IH literal 65536 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 diff --git a/img/badge.svg b/img/badge.svg index a240ced..aa56dac 100644 --- a/img/badge.svg +++ b/img/badge.svg @@ -6,10 +6,10 @@ - - - Connectio - n + + + Transpor + t Compatibl diff --git a/package.json b/package.json index 70ef40e..f8c2d11 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { - "name": "abstract-connection", - "version": "0.1.0", - "description": "A test suite and interface you can use to implement a connection.", + "name": "abstract-transport", + "version": "0.0.0", + "description": "A test suite and interface you can use to implement a transport.", "repository": { "type": "git", - "url": "https://github.com/diasdavid/abstract-connection.git" + "url": "https://github.com/diasdavid/abstract-transport.git" }, "keywords": [ "IPFS" @@ -12,9 +12,9 @@ "author": "David Dias ", "license": "MIT", "bugs": { - "url": "https://github.com/diasdavid/abstract-connection/issues" + "url": "https://github.com/diasdavid/abstract-transport/issues" }, - "homepage": "https://github.com/diasdavid/abstract-connection", + "homepage": "https://github.com/diasdavid/abstract-transport", "devDependencies": {}, "dependencies": { "multiaddr": "^1.0.0", diff --git a/tests/base-test.js b/tests/base-test.js index e136ef0..bd67f93 100644 --- a/tests/base-test.js +++ b/tests/base-test.js @@ -2,13 +2,13 @@ var multiaddr = require('multiaddr') module.exports.all = function (test, common) { test('a test', function (t) { - common.setup(test, function (err, conn) { + common.setup(test, function (err, transport) { t.plan(5) t.ifError(err) var maddr = multiaddr('/ip4/127.0.0.1/tcp/9050') - var listener = conn.createListener(function (stream) { + var listener = transport.createListener(function (stream) { t.pass('received incoming connection') stream.end() listener.close(function () { @@ -19,7 +19,7 @@ module.exports.all = function (test, common) { listener.listen(maddr.nodeAddress().port, function () { t.pass('started listening') - var stream = conn.dial(maddr, { + var stream = transport.dial(maddr, { ready: function () { t.pass('dialed successfuly') stream.end()