summaryrefslogtreecommitdiff
path: root/src/Network/BitTorrent/DHT/Routing.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Network/BitTorrent/DHT/Routing.hs')
-rw-r--r--src/Network/BitTorrent/DHT/Routing.hs17
1 files changed, 7 insertions, 10 deletions
diff --git a/src/Network/BitTorrent/DHT/Routing.hs b/src/Network/BitTorrent/DHT/Routing.hs
index d64e415e..3c2e30aa 100644
--- a/src/Network/BitTorrent/DHT/Routing.hs
+++ b/src/Network/BitTorrent/DHT/Routing.hs
@@ -70,7 +70,7 @@ import Data.Functor.Identity
70import Data.List as L hiding (insert) 70import Data.List as L hiding (insert)
71import Data.Maybe 71import Data.Maybe
72import Data.Monoid 72import Data.Monoid
73import Data.PSQueue as PSQ 73import Data.Wrapper.PSQ as PSQ
74import Data.Serialize as S hiding (Result, Done) 74import Data.Serialize as S hiding (Result, Done)
75import qualified Data.Sequence as Seq 75import qualified Data.Sequence as Seq
76import Data.Time 76import Data.Time
@@ -181,10 +181,6 @@ runRouting ping_node find_nodes timestamper = go
181-- | Timestamp - last time this node is pinged. 181-- | Timestamp - last time this node is pinged.
182type NodeEntry ip = Binding (NodeInfo ip) Timestamp 182type NodeEntry ip = Binding (NodeInfo ip) Timestamp
183 183
184instance (Serialize k, Serialize v) => Serialize (Binding k v) where
185 get = (:->) <$> get <*> get
186 put (k :-> v) = put k >> put v
187
188-- TODO instance Pretty where 184-- TODO instance Pretty where
189 185
190-- | Number of nodes in a bucket. 186-- | Number of nodes in a bucket.
@@ -239,12 +235,13 @@ data Bucket ip = Bucket { bktNodes :: PSQ (NodeInfo ip) Timestamp
239 , bktQ :: BucketQueue ip 235 , bktQ :: BucketQueue ip
240 } deriving (Show,Generic) 236 } deriving (Show,Generic)
241 237
242instance (Eq ip, Serialize ip) => Serialize (Bucket ip) 238instance (Eq ip, Serialize ip) => Serialize (Bucket ip) where
239 get = Bucket . psqFromPairList <$> get <*> pure (runIdentity $ emptyQueue bucketQ)
240 put = put . psqToPairList . bktNodes
241
242psqFromPairList xs = PSQ.fromList $ map (\(a,b) -> a :-> b) xs
243 243
244instance (Serialize k, Serialize v, Ord k, Ord v) 244psqToPairList psq = map (\(a :-> b) -> (a,b)) $ PSQ.toList psq
245 => Serialize (PSQ k v) where
246 get = PSQ.fromList <$> get
247 put = put . PSQ.toList
248 245
249-- | Update interval, in seconds. 246-- | Update interval, in seconds.
250delta :: NominalDiffTime 247delta :: NominalDiffTime