diff options
author | joe <joe@jerkface.net> | 2017-07-17 04:33:20 -0400 |
---|---|---|
committer | joe <joe@jerkface.net> | 2017-07-17 04:33:20 -0400 |
commit | 01faa099bd7e98137ef2897d5279ea077c75c4a0 (patch) | |
tree | 2cb03ecfdf31125d16599ac2fa2efb7335afe16a /Kademlia.hs | |
parent | 41c4f64231037f70d7cd6a0c2611b2c6a1d517d9 (diff) |
Use Data.Reflection for PSQ-required Ord instance.
Diffstat (limited to 'Kademlia.hs')
-rw-r--r-- | Kademlia.hs | 77 |
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 | |||
15 | import GHC.Conc (labelThread) | 15 | import GHC.Conc (labelThread) |
16 | import Control.Concurrent.Lifted | 16 | import Control.Concurrent.Lifted |
17 | #endif | 17 | #endif |
18 | import Data.Bits | ||
18 | 19 | ||
19 | import Text.PrettyPrint as PP hiding ((<>), ($$)) | 20 | import Text.PrettyPrint as PP hiding ((<>), ($$)) |
20 | import Text.PrettyPrint.HughesPJClass hiding ((<>),($$)) | 21 | import Text.PrettyPrint.HughesPJClass hiding ((<>),($$)) |
@@ -24,61 +25,6 @@ import Control.Monad | |||
24 | import Data.Monoid | 25 | import Data.Monoid |
25 | import Data.Time.Clock.POSIX (POSIXTime) | 26 | import Data.Time.Clock.POSIX (POSIXTime) |
26 | 27 | ||
27 | {- | ||
28 | insertNode1 :: 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 | {- | ||
48 | insertNode1 = 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 | {- | ||
66 | insertNode :: 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. |
84 | data RoutingTableChanged ni = RoutingTableChanged | 30 | data RoutingTableChanged ni = RoutingTableChanged |
@@ -138,9 +84,9 @@ data TableStateIO nid ni = TableStateIO | |||
138 | 84 | ||
139 | vanillaIO :: TVar (BucketList ni) -> (ni -> IO Bool) -> TableStateIO nid ni | 85 | vanillaIO :: TVar (BucketList ni) -> (ni -> IO Bool) -> TableStateIO nid ni |
140 | vanillaIO var ping = TableStateIO | 86 | vanillaIO 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 | {- | 99 | insertNode :: Kademlia nid ni -> ni -> IO () |
154 | kademlia :: FiniteBits nid => | ||
155 | TVar (BucketList nid nid) -> (nid -> IO Bool) -> Kademlia nid nid | ||
156 | kademlia var ping = Kademlia quietInsertions | ||
157 | (KademliaSpace id testIdBit) | ||
158 | (vanillaIO var ping) | ||
159 | |||
160 | -} | ||
161 | |||
162 | insertNode :: | ||
163 | forall ni nid. Ord ni => | ||
164 | Kademlia nid ni | ||
165 | -> ni | ||
166 | -> IO () | ||
167 | insertNode (Kademlia reporter space io) node = do | 100 | insertNode (Kademlia reporter space io) node = do |
168 | 101 | ||
169 | tm <- utcTimeToPOSIXSeconds <$> getCurrentTime | 102 | tm <- utcTimeToPOSIXSeconds <$> getCurrentTime |