Last active
October 21, 2022 00:01
-
-
Save ninabreznik/7acb6df94c04096157f2c8777b990738 to your computer and use it in GitHub Desktop.
hypercore-protocol
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const hypercore = require('hypercore') | |
const RAM = require('random-access-memory') | |
const hyperswarm = require('hyperswarm') | |
// const HypercoreProtocol = require('hypercore-protocol') | |
const createTestnet = require('@hyperswarm/testnet') | |
start() | |
async function start () { | |
const { bootstrap } = await createTestnet(3) | |
var feed1_key | |
var feed1_topic | |
var feed2_key | |
var feed2_topic | |
{ // ALICE | |
const feed1 = await make_feed() | |
const feed2 = await make_feed() | |
feed1_key = feed1.key | |
feed1_topic = feed1.discoveryKey | |
feed2_key = feed2.key | |
feed2_topic = feed2.discoveryKey | |
const swarm1 = new hyperswarm({ bootstrap }) | |
swarm1.on('connection', (conn, info) => { | |
console.log('new connection swarm1') | |
conn.on('error', onerror) | |
const proto = hypercore.createProtocolStream(conn, { ondiscoverykey }) | |
/* const proto = new HypercoreProtocol(conn.isInitiator) | |
conn.pipe(proto).pipe(conn) | |
proto.on('discovery-key', ondiscoverykey) */ | |
function ondiscoverykey (discoveryKey) { | |
console.log('ondiscoverykey', discoveryKey, [discoveryKey.equals(feed1.discoveryKey), discoveryKey.equals(feed2.discoveryKey)]) | |
if (discoveryKey.equals(feed1.discoveryKey)) return feed1.replicate(proto) | |
if (discoveryKey.equals(feed2.discoveryKey)) return feed2.replicate(proto) | |
} | |
}) | |
await swarm1.join(feed1.discoveryKey, { server: true, client: false }).flushed() | |
await swarm1.join(feed2.discoveryKey, { server: true, client: false }).flushed() | |
} | |
{ // BOB | |
const feed1 = new hypercore(RAM, feed1_key) | |
const feed2 = new hypercore(RAM, feed2_key) | |
await feed1.ready() | |
await feed2.ready() | |
const swarm2 = new hyperswarm({ bootstrap }) | |
swarm2.on('connection', async (conn, info) => { | |
console.log('new connection swarm2') | |
conn.on('error', onerror) | |
const proto = hypercore.createProtocolStream(conn) | |
/* const proto = new HypercoreProtocol(conn.isInitiator) | |
conn.pipe(proto).pipe(conn) */ | |
for (var i = 0, len = info.topics.length; i < len; i++) { | |
const topic = info.topics[i] | |
console.log('[swarm2] info topic', topic, [topic.equals(feed1_topic), topic.equals(feed2_topic)]) | |
if (topic.equals(feed1_topic)) feed1.replicate(proto) | |
if (topic.equals(feed2_topic)) feed2.replicate(proto) | |
} | |
}) | |
swarm2.join(feed1_topic, { client: true, server: false }).flushed() | |
swarm2.join(feed2_topic, { client: true, server: false }).flushed() | |
await swarm2.flush() | |
const foo = await feed1.get(0) | |
console.log({foo: foo.toString()}) | |
const bar = await feed2.get(0) | |
console.log({bar: bar.toString()}) | |
} | |
} | |
async function make_feed () { | |
const feed = new hypercore(RAM) | |
await feed.ready() | |
await feed.append(Buffer.from('hello world')) | |
await feed.append(Buffer.from('hallo welt')) | |
await feed.append(Buffer.from('pozdravljen svet')) | |
await feed.append(Buffer.from('zdravo svete')) | |
await feed.append(Buffer.from('juhuhu')) | |
await feed.append(Buffer.from('halli hallo')) | |
await feed.append(Buffer.from('hiya')) | |
const foo = await feed.get(0) | |
console.log('make_feed', {foo: foo.toString()}) | |
return feed | |
} | |
function onerror (err) { console.error({err})} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment