-
Notifications
You must be signed in to change notification settings - Fork 194
Open
Description
The end event on the protocol stream returned by core.replicate() does not seem to propogate as expected.
Use case:
I want to gracefully end a replication stream without destroying it.
Expected behaviour:
const s = core.replicate(true)
s.on('end', () => console.log('end'))
s.end()I would expect the above code to output end. It doesn't. There is a scenario where it does work: if the core that is replicating is a read-only peer, and you call s.end() after first calling core.update(). There does not seem to be a way to end the replication stream for the writer core.
Minimal reproduction:
import Hypercore from 'hypercore'
import RAM from 'random-access-memory'
import test from 'tape'
test('can end replication stream from writer', async t => {
t.plan(2)
;(async () => {
const core1 = new Hypercore(RAM)
await core1.ready()
const core2 = new Hypercore(RAM, core1.key)
const s1 = core1.replicate(true)
const s2 = core2.replicate(false)
s1.on('end', () => t.pass('s1 end'))
s2.on('end', () => t.pass('s2 end'))
s1.pipe(s2).pipe(s1)
await core1.update()
s1.end()
})()
})
test('can end replication stream from reader', t => {
t.plan(2)
;(async () => {
const core1 = new Hypercore(RAM)
await core1.ready()
const core2 = new Hypercore(RAM, core1.key)
const s1 = core1.replicate(true)
const s2 = core2.replicate(false)
s1.on('end', () => t.pass('s1 end'))
s2.on('end', () => t.pass('s2 end'))
s1.pipe(s2).pipe(s1)
await core2.update()
s2.end()
})()
})Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels