@@ -333,6 +333,99 @@ test('can register extensions with the same name', async t => {
333
333
t . end ( )
334
334
} )
335
335
336
+ test ( 'can register function based extensions' , async t => {
337
+ const { networker : networker1 } = await create ( )
338
+ const { networker : networker2 } = await create ( )
339
+ const { networker : networker3 } = await create ( )
340
+
341
+ const froms = [ networker2 . keyPair . publicKey , networker3 . keyPair . publicKey ]
342
+ const msgs = [ 'hello' , 'world' ]
343
+ let received = 0
344
+
345
+ var onmessage = null
346
+ const allReceivedProm = new Promise ( resolve => {
347
+ onmessage = ( msg , from ) => {
348
+ t . true ( from . remotePublicKey . equals ( froms [ received ] ) )
349
+ t . same ( msg , msgs [ received ] )
350
+ received ++
351
+ if ( received === froms . length ) return resolve ( )
352
+ }
353
+ } )
354
+
355
+ const extension = ( ext ) => ( {
356
+ encoding : 'utf8' ,
357
+ onmessage
358
+ } )
359
+
360
+ // Note: Must use name outside of the function handler for now
361
+ networker1 . registerExtension ( 'test-extension' , extension )
362
+ const n2Ext = networker2 . registerExtension ( 'test-extension' , extension )
363
+ const n3Ext = networker3 . registerExtension ( 'test-extension' , extension )
364
+
365
+ networker2 . on ( 'peer-add' , peer => {
366
+ n2Ext . send ( 'hello' , peer )
367
+ } )
368
+ networker3 . on ( 'peer-add' , peer => {
369
+ n3Ext . send ( 'world' , peer )
370
+ } )
371
+ const dkey = hypercoreCrypto . randomBytes ( 32 )
372
+ await networker1 . configure ( dkey )
373
+ await networker2 . configure ( dkey , { announce : false , lookup : true , flush : true } )
374
+ await networker3 . configure ( dkey , { announce : false , lookup : true , flush : true } )
375
+
376
+ await new Promise ( resolve => setTimeout ( resolve , 100 ) )
377
+ await allReceivedProm
378
+
379
+ await cleanup ( [ networker1 , networker2 , networker3 ] )
380
+ t . end ( )
381
+ } )
382
+
383
+ test ( 'can use other encodings' , async t => {
384
+ const { networker : networker1 } = await create ( )
385
+ const { networker : networker2 } = await create ( )
386
+ const { networker : networker3 } = await create ( )
387
+
388
+ const froms = [ networker2 . keyPair . publicKey , networker3 . keyPair . publicKey ]
389
+ const msgs = [ { message : 'hello' } , { message : 'world' } ]
390
+ let received = 0
391
+
392
+ var onmessage = null
393
+ const allReceivedProm = new Promise ( resolve => {
394
+ onmessage = ( msg , from ) => {
395
+ t . true ( from . remotePublicKey . equals ( froms [ received ] ) )
396
+ t . same ( msg , msgs [ received ] )
397
+ received ++
398
+ if ( received === froms . length ) return resolve ( )
399
+ }
400
+ } )
401
+
402
+ const extension = {
403
+ name : 'test-extension' ,
404
+ encoding : 'json' ,
405
+ onmessage
406
+ }
407
+ networker1 . registerExtension ( extension )
408
+ const n2Ext = networker2 . registerExtension ( extension )
409
+ const n3Ext = networker3 . registerExtension ( extension )
410
+
411
+ networker2 . on ( 'peer-add' , peer => {
412
+ n2Ext . send ( { message : 'hello' } , peer )
413
+ } )
414
+ networker3 . on ( 'peer-add' , peer => {
415
+ n3Ext . send ( { message : 'world' } , peer )
416
+ } )
417
+ const dkey = hypercoreCrypto . randomBytes ( 32 )
418
+ await networker1 . configure ( dkey )
419
+ await networker2 . configure ( dkey , { announce : false , lookup : true , flush : true } )
420
+ await networker3 . configure ( dkey , { announce : false , lookup : true , flush : true } )
421
+
422
+ await new Promise ( resolve => setTimeout ( resolve , 100 ) )
423
+ await allReceivedProm
424
+
425
+ await cleanup ( [ networker1 , networker2 , networker3 ] )
426
+ t . end ( )
427
+ } )
428
+
336
429
test ( 'bidirectional extension send/receive' , async t => {
337
430
const { networker : networker1 } = await create ( )
338
431
const { networker : networker2 } = await create ( )
0 commit comments