From 20802018a6a2bf15d33385d4e293727518a7ed63 Mon Sep 17 00:00:00 2001
From: Brian Tiger Chow <brian.holderchow@gmail.com>
Date: Wed, 17 Sep 2014 18:47:57 -0700
Subject: [PATCH] feat(bit swap) stub out a concrete strategist

---
 bitswap/strategy/strategy.go | 58 ++++++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)
 create mode 100644 bitswap/strategy/strategy.go

diff --git a/bitswap/strategy/strategy.go b/bitswap/strategy/strategy.go
new file mode 100644
index 00000000..a304669c
--- /dev/null
+++ b/bitswap/strategy/strategy.go
@@ -0,0 +1,58 @@
+package strategy
+
+import (
+	"errors"
+
+	ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
+	bsmsg "github.com/jbenet/go-ipfs/bitswap/message"
+	"github.com/jbenet/go-ipfs/peer"
+	u "github.com/jbenet/go-ipfs/util"
+)
+
+// TODO declare thread-safe datastore
+func New(d ds.Datastore) Strategist {
+	return &strategist{
+		datastore: d,
+		peers:     ledgerMap{},
+	}
+}
+
+type strategist struct {
+	datastore ds.Datastore // FIXME(brian): enforce thread-safe datastore
+
+	peers ledgerMap
+}
+
+// Peers returns a list of this instance is connected to
+func (s *strategist) Peers() []*peer.Peer {
+	response := make([]*peer.Peer, 0) // TODO
+	return response
+}
+
+func (s *strategist) IsWantedByPeer(u.Key, *peer.Peer) bool {
+	return true // TODO
+}
+
+func (s *strategist) ShouldSendToPeer(u.Key, *peer.Peer) bool {
+	return true // TODO
+}
+
+func (s *strategist) Seed(int64) {
+	// TODO
+}
+
+func (s *strategist) MessageReceived(*peer.Peer, bsmsg.BitSwapMessage) error {
+	// TODO add peer to partners if doesn't already exist.
+	// TODO initialize ledger for peer if doesn't already exist
+	// TODO get wantlist from message and update contents in local wantlist for peer
+	// TODO acknowledge receipt of blocks and do accounting in ledger
+	return errors.New("TODO")
+}
+
+func (s *strategist) MessageSent(*peer.Peer, bsmsg.BitSwapMessage) error {
+	// TODO add peer to partners if doesn't already exist.
+	// TODO initialize ledger for peer if doesn't already exist
+	// TODO add block to my wantlist
+	// TODO acknowledge receipt of blocks and do accounting in ledger
+	return errors.New("TODO")
+}
-- 
GitLab