// New initializes a BitSwap instance that communicates over the // provided BitSwapNetwork. This function registers the returned instance as // the network delegate. // Runs until context is cancelled func New(ctx context.Context, p peer.Peer, network bsnet.BitSwapNetwork, routing bsnet.Routing, d ds.ThreadSafeDatastore, nice bool) exchange.Interface { notif := notifications.New() go func() { <-ctx.Done() notif.Shutdown() }() bs := &bitswap{ blockstore: blockstore.NewBlockstore(d), notifications: notif, strategy: strategy.New(nice), routing: routing, sender: network, wantlist: u.NewKeySet(), } network.SetDelegate(bs) return bs }
// session creates a test bitswap session. // // NB: It's easy make mistakes by providing the same peer ID to two different // sessions. To safeguard, use the SessionGenerator to generate sessions. It's // just a much better idea. func session(net tn.Network, rs mock.RoutingServer, id peer.ID) instance { p := peer.WithID(id) adapter := net.Adapter(p) htc := rs.Client(p) blockstore := bstore.NewBlockstore(ds_sync.MutexWrap(ds.NewMapDatastore())) const alwaysSendToPeer = true bs := &bitswap{ blockstore: blockstore, notifications: notifications.New(), strategy: strategy.New(alwaysSendToPeer), routing: htc, sender: adapter, wantlist: util.NewKeySet(), } adapter.SetDelegate(bs) return instance{ peer: p, exchange: bs, blockstore: blockstore, } }