summaryrefslogtreecommitdiff
path: root/src/Network
diff options
context:
space:
mode:
authorjoe <joe@jerkface.net>2017-01-27 04:34:32 -0500
committerjoe <joe@jerkface.net>2017-01-27 04:34:32 -0500
commit77a317310d4f7929335fafe3cfbf53afd45faa82 (patch)
tree220e885dfc44af98998faee7660b9e9ef7363220 /src/Network
parent6a239e20bbc7a84a74721d23587bbf1b8c20c704 (diff)
Switched PSQueue to psqueues for strict spine.
Diffstat (limited to 'src/Network')
-rw-r--r--src/Network/BitTorrent/DHT/ContactInfo.hs2
-rw-r--r--src/Network/BitTorrent/DHT/Routing.hs17
2 files changed, 8 insertions, 11 deletions
diff --git a/src/Network/BitTorrent/DHT/ContactInfo.hs b/src/Network/BitTorrent/DHT/ContactInfo.hs
index ea3b96f0..26bdeae9 100644
--- a/src/Network/BitTorrent/DHT/ContactInfo.hs
+++ b/src/Network/BitTorrent/DHT/ContactInfo.hs
@@ -12,7 +12,7 @@ import Data.List as L
12import Data.Maybe 12import Data.Maybe
13import Data.HashMap.Strict as HM 13import Data.HashMap.Strict as HM
14import Data.Serialize 14import Data.Serialize
15import Data.PSQueue as PSQ 15import Data.Wrapper.PSQ as PSQ
16import Data.Time.Clock.POSIX 16import Data.Time.Clock.POSIX
17import Data.ByteString (ByteString) 17import Data.ByteString (ByteString)
18import Data.Word 18import Data.Word
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