summaryrefslogtreecommitdiff
path: root/Kademlia.hs
diff options
context:
space:
mode:
authorjoe <joe@jerkface.net>2017-07-17 04:33:20 -0400
committerjoe <joe@jerkface.net>2017-07-17 04:33:20 -0400
commit01faa099bd7e98137ef2897d5279ea077c75c4a0 (patch)
tree2cb03ecfdf31125d16599ac2fa2efb7335afe16a /Kademlia.hs
parent41c4f64231037f70d7cd6a0c2611b2c6a1d517d9 (diff)
Use Data.Reflection for PSQ-required Ord instance.
Diffstat (limited to 'Kademlia.hs')
-rw-r--r--Kademlia.hs77
1 files changed, 5 insertions, 72 deletions
diff --git a/Kademlia.hs b/Kademlia.hs
index 4a811fa2..0caba720 100644
--- a/Kademlia.hs
+++ b/Kademlia.hs
@@ -15,6 +15,7 @@ import Control.Concurrent.Lifted.Instrument
15import GHC.Conc (labelThread) 15import GHC.Conc (labelThread)
16import Control.Concurrent.Lifted 16import Control.Concurrent.Lifted
17#endif 17#endif
18import Data.Bits
18 19
19import Text.PrettyPrint as PP hiding ((<>), ($$)) 20import Text.PrettyPrint as PP hiding ((<>), ($$))
20import Text.PrettyPrint.HughesPJClass hiding ((<>),($$)) 21import Text.PrettyPrint.HughesPJClass hiding ((<>),($$))
@@ -24,61 +25,6 @@ import Control.Monad
24import Data.Monoid 25import Data.Monoid
25import Data.Time.Clock.POSIX (POSIXTime) 26import Data.Time.Clock.POSIX (POSIXTime)
26 27
27{-
28insertNode1 :: forall raw dht u ip.
29 ( Address ip
30 , Default u
31 , Show u
32 , Ord (NodeId dht)
33 , FiniteBits (NodeId dht)
34 , Show (NodeId dht)
35 , KRPC dht (Query dht (Ping dht)) (Response dht (Ping dht))
36 , DHT.Kademlia dht
37 , Ord (TransactionID dht)
38 , WireFormat raw dht
39 , Serialize (TransactionID dht)
40 , SerializableTo raw (Response dht (Ping dht))
41 , SerializableTo raw (Query dht (Ping dht))
42 , Ord (NodeId dht)
43 , Show (NodeId dht)
44 , Show (QueryMethod dht)
45 ) => DHT raw dht u ip (NodeInfo dht ip u -> Maybe ReflectedIP -> IO ())
46-}
47{-
48insertNode1 = do
49 params = DHT.TableParameters
50 { maxBuckets = R.defaultBucketCount :: Int
51 , fallbackID = myid
52 , adjustID = dhtAdjustID Proxy (DHT.fallbackID params) :: SockAddr -> Event dht ip u -> NodeId dht
53 , logMessage = (\ _ _ -> return ()) {- TODO -} :: Char -> String -> IO ()
54 , pingProbe = error "probe" :: ni -> NodeInfo dht ip u -> IO (Bool, Maybe ReflectedIP)
55 }
56 let state = DHT.TableKeeper
57 { routingInfo = tbl
58 , grokNode = DHT.insertNode params state
59 , grokAddress = \_ _ -> return () -- :: Maybe SockAddr -> ReflectedIP -> IO ()
60 }
61 return $ \info witnessed_ip0 -> DHT.insertNode params state info witnessed_ip0
62
63-}
64
65{-
66insertNode :: forall msg ip u.
67 ( Address ip
68 , Show u
69 , Show (NodeId msg)
70 , Ord (NodeId msg)
71 , FiniteBits (NodeId msg)
72 ) => TableParameters msg ip u -> TableKeeper msg ip u -> NodeInfo msg ip u -> Maybe ReflectedIP -> IO ()
73-}
74 {-
75 let showTable = do
76 t <- atomically $ fmap myBuckets <$> readTVar routingInfo
77 let logMsg = "Routing table: " <> pPrint t
78 logMessage 'D' (render logMsg)
79 reportPingResult tm n b = showTable
80 reportArrival tm info ps = showTable
81 -}
82 28
83-- | A change occured in the kademlia routing table. 29-- | A change occured in the kademlia routing table.
84data RoutingTableChanged ni = RoutingTableChanged 30data RoutingTableChanged ni = RoutingTableChanged
@@ -138,9 +84,9 @@ data TableStateIO nid ni = TableStateIO
138 84
139vanillaIO :: TVar (BucketList ni) -> (ni -> IO Bool) -> TableStateIO nid ni 85vanillaIO :: TVar (BucketList ni) -> (ni -> IO Bool) -> TableStateIO nid ni
140vanillaIO var ping = TableStateIO 86vanillaIO var ping = TableStateIO
141 { tblRead = readTVar var 87 { tblRead = readTVar var
142 , tblWrite = writeTVar var 88 , tblWrite = writeTVar var
143 , tblPing = ping 89 , tblPing = ping
144 , tblChanged = const $ return $ return () 90 , tblChanged = const $ return $ return ()
145 } 91 }
146 92
@@ -150,20 +96,7 @@ data Kademlia nid ni = Kademlia (InsertionReporter ni)
150 (KademliaSpace nid ni) 96 (KademliaSpace nid ni)
151 (TableStateIO nid ni) 97 (TableStateIO nid ni)
152 98
153{- 99insertNode :: Kademlia nid ni -> ni -> IO ()
154kademlia :: FiniteBits nid =>
155 TVar (BucketList nid nid) -> (nid -> IO Bool) -> Kademlia nid nid
156kademlia var ping = Kademlia quietInsertions
157 (KademliaSpace id testIdBit)
158 (vanillaIO var ping)
159
160-}
161
162insertNode ::
163 forall ni nid. Ord ni =>
164 Kademlia nid ni
165 -> ni
166 -> IO ()
167insertNode (Kademlia reporter space io) node = do 100insertNode (Kademlia reporter space io) node = do
168 101
169 tm <- utcTimeToPOSIXSeconds <$> getCurrentTime 102 tm <- utcTimeToPOSIXSeconds <$> getCurrentTime