mirror of https://github.com/voidlizard/hbs2
wip
This commit is contained in:
parent
78bb0c45c1
commit
fbed52c921
|
@ -4,6 +4,7 @@ module HBS2.Net.Messaging.TCP
|
||||||
, runMessagingTCP
|
, runMessagingTCP
|
||||||
, newMessagingTCP
|
, newMessagingTCP
|
||||||
, tcpOwnPeer
|
, tcpOwnPeer
|
||||||
|
, tcpPeerConn
|
||||||
, tcpCookie
|
, tcpCookie
|
||||||
) where
|
) where
|
||||||
|
|
||||||
|
@ -202,8 +203,6 @@ spawnConnection tp env so sa = liftIO do
|
||||||
let newP = fromSockAddr @'TCP sa
|
let newP = fromSockAddr @'TCP sa
|
||||||
|
|
||||||
theirCookie <- handshake tp env so
|
theirCookie <- handshake tp env so
|
||||||
-- TCP address available
|
|
||||||
-- FIXME: how to use this info
|
|
||||||
|
|
||||||
let connId = connectionId myCookie theirCookie
|
let connId = connectionId myCookie theirCookie
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,6 @@ import System.Random.Shuffle (shuffleM)
|
||||||
|
|
||||||
class PeerLocator e l where
|
class PeerLocator e l where
|
||||||
knownPeers :: forall m . (HasPeer e, MonadIO m) => l -> m [Peer e]
|
knownPeers :: forall m . (HasPeer e, MonadIO m) => l -> m [Peer e]
|
||||||
-- knownListeningPeers :: forall m . (HasPeer e, MonadIO m) => l -> m [Peer e]
|
|
||||||
addPeers :: forall m . (HasPeer e, MonadIO m) => l -> [Peer e] -> m ()
|
addPeers :: forall m . (HasPeer e, MonadIO m) => l -> [Peer e] -> m ()
|
||||||
delPeers :: forall m . (HasPeer e, MonadIO m) => l -> [Peer e] -> m ()
|
delPeers :: forall m . (HasPeer e, MonadIO m) => l -> [Peer e] -> m ()
|
||||||
bestPeers :: forall m . (HasPeer e, MonadIO m) => l -> m [Peer e]
|
bestPeers :: forall m . (HasPeer e, MonadIO m) => l -> m [Peer e]
|
||||||
|
@ -18,7 +17,6 @@ data AnyPeerLocator e = forall a . PeerLocator e a => AnyPeerLocator a
|
||||||
|
|
||||||
instance HasPeer e => PeerLocator e (AnyPeerLocator e) where
|
instance HasPeer e => PeerLocator e (AnyPeerLocator e) where
|
||||||
knownPeers (AnyPeerLocator l) = knownPeers l
|
knownPeers (AnyPeerLocator l) = knownPeers l
|
||||||
-- knownListeningPeers (AnyPeerLocator l) = knownListeningPeers l
|
|
||||||
addPeers (AnyPeerLocator l) = addPeers l
|
addPeers (AnyPeerLocator l) = addPeers l
|
||||||
delPeers (AnyPeerLocator l) = delPeers l
|
delPeers (AnyPeerLocator l) = delPeers l
|
||||||
addExcluded (AnyPeerLocator l) = addExcluded l
|
addExcluded (AnyPeerLocator l) = addExcluded l
|
||||||
|
|
|
@ -33,12 +33,6 @@ instance (Ord (Peer e), Pretty (Peer e)) => PeerLocator e (StaticPeerLocator e)
|
||||||
excl <- liftIO $ readTVarIO e
|
excl <- liftIO $ readTVarIO e
|
||||||
pure $ Set.toList (ps `Set.difference` excl)
|
pure $ Set.toList (ps `Set.difference` excl)
|
||||||
|
|
||||||
-- knownListeningPeers (StaticPeerLocator peers e) = do
|
|
||||||
-- -- pips <- knownPeers @e pl >>= filterM (liftIO . atomically . readTVar . _peerTcpAvailable)
|
|
||||||
-- ps <- liftIO $ readTVarIO peers
|
|
||||||
-- excl <- liftIO $ readTVarIO e
|
|
||||||
-- pure $ Set.toList (ps `Set.difference` excl)
|
|
||||||
|
|
||||||
addPeers (StaticPeerLocator peers te) new = do
|
addPeers (StaticPeerLocator peers te) new = do
|
||||||
excl <- liftIO $ readTVarIO te
|
excl <- liftIO $ readTVarIO te
|
||||||
liftIO $ atomically $ modifyTVar' peers ((`Set.difference` excl) . (<> Set.fromList new))
|
liftIO $ atomically $ modifyTVar' peers ((`Set.difference` excl) . (<> Set.fromList new))
|
||||||
|
|
|
@ -105,7 +105,6 @@ peerExchangeProto msg = do
|
||||||
|
|
||||||
pl <- getPeerLocator @e
|
pl <- getPeerLocator @e
|
||||||
pips <- knownPeers @e pl
|
pips <- knownPeers @e pl
|
||||||
-- pips <- knownListeningPeers @e pl
|
|
||||||
|
|
||||||
case pex of
|
case pex of
|
||||||
PEX1 -> do
|
PEX1 -> do
|
||||||
|
|
|
@ -12,6 +12,7 @@ import HBS2.Events
|
||||||
import HBS2.Hash
|
import HBS2.Hash
|
||||||
import HBS2.Merkle
|
import HBS2.Merkle
|
||||||
import HBS2.Net.IP.Addr
|
import HBS2.Net.IP.Addr
|
||||||
|
import HBS2.Net.Messaging.TCP
|
||||||
import HBS2.Net.PeerLocator
|
import HBS2.Net.PeerLocator
|
||||||
import HBS2.Net.Proto
|
import HBS2.Net.Proto
|
||||||
import HBS2.Net.Proto.Definition
|
import HBS2.Net.Proto.Definition
|
||||||
|
@ -153,8 +154,8 @@ fillPeerMeta :: forall e m .
|
||||||
, EventListener e ( PeerMetaProto e) m
|
, EventListener e ( PeerMetaProto e) m
|
||||||
, e ~ L4Proto
|
, e ~ L4Proto
|
||||||
)
|
)
|
||||||
=> m ()
|
=> Maybe MessagingTCP -> m ()
|
||||||
fillPeerMeta = do
|
fillPeerMeta mtcp = do
|
||||||
debug "I'm fillPeerMeta"
|
debug "I'm fillPeerMeta"
|
||||||
pl <- getPeerLocator @e
|
pl <- getPeerLocator @e
|
||||||
forever do
|
forever do
|
||||||
|
@ -200,13 +201,19 @@ fillPeerMeta = do
|
||||||
-- 3) пробить, что есть tcp
|
-- 3) пробить, что есть tcp
|
||||||
forM_ (lookupDecode "listen-tcp" (unPeerMeta peerMeta)) \listenTCPPort -> lift do
|
forM_ (lookupDecode "listen-tcp" (unPeerMeta peerMeta)) \listenTCPPort -> lift do
|
||||||
peerTCPAddrPort <- replacePort p listenTCPPort
|
peerTCPAddrPort <- replacePort p listenTCPPort
|
||||||
-- 4) выяснить, можно ли к нему открыть соединение на этот порт
|
p <- fromPeerAddr (L4Address TCP peerTCPAddrPort)
|
||||||
-- возможно, с ним уже открыто соединение
|
sendPing p
|
||||||
-- или попробовать открыть или запомнить, что было открыто
|
|
||||||
-- connectPeerTCP ?
|
forM_ mtcp \(tcp :: MessagingTCP) -> do
|
||||||
-- 5) добавить этих пиров в пекс
|
-- 4) выяснить, можно ли к нему открыть соединение на этот порт
|
||||||
-- p :: Peer e <- fromPeerAddr (L4Address TCP (peerTCPAddrPort :: IPAddrPort L4Proto) :: PeerAddr e)
|
-- возможно, с ним уже открыто соединение
|
||||||
sendPing =<< fromPeerAddr (L4Address TCP peerTCPAddrPort)
|
-- или попробовать открыть или запомнить, что было открыто
|
||||||
|
-- connectPeerTCP ?
|
||||||
|
tcpAddressIsAvailable <- isJust <$> do
|
||||||
|
liftIO $ atomically $ readTVar (view tcpPeerConn tcp) <&> HashMap.lookup p
|
||||||
|
when tcpAddressIsAvailable do
|
||||||
|
-- добавить этого пира в pex
|
||||||
|
addPeers pl [p]
|
||||||
|
|
||||||
port <- (MaybeT . pure) (lookupDecode "http-port" (unPeerMeta peerMeta))
|
port <- (MaybeT . pure) (lookupDecode "http-port" (unPeerMeta peerMeta))
|
||||||
|
|
||||||
|
|
|
@ -743,7 +743,7 @@ runPeer opts = Exception.handle myException $ do
|
||||||
|
|
||||||
peerThread "blockDownloadLoop " (blockDownloadLoop denv)
|
peerThread "blockDownloadLoop " (blockDownloadLoop denv)
|
||||||
|
|
||||||
peerThread "fillPeerMeta" (fillPeerMeta)
|
peerThread "fillPeerMeta" (fillPeerMeta tcp)
|
||||||
|
|
||||||
-- FIXME: clumsy-code
|
-- FIXME: clumsy-code
|
||||||
-- Is it better now ?
|
-- Is it better now ?
|
||||||
|
|
|
@ -65,7 +65,6 @@ data PeerInfo e =
|
||||||
, _peerHttpApiAddress :: TVar (Either Int (Maybe String))
|
, _peerHttpApiAddress :: TVar (Either Int (Maybe String))
|
||||||
, _peerHttpDownloaded :: TVar Int
|
, _peerHttpDownloaded :: TVar Int
|
||||||
, _peerMeta :: TVar (Maybe PeerMeta)
|
, _peerMeta :: TVar (Maybe PeerMeta)
|
||||||
, _peerTcpAvailable :: TVar Bool
|
|
||||||
}
|
}
|
||||||
deriving stock (Generic,Typeable)
|
deriving stock (Generic,Typeable)
|
||||||
|
|
||||||
|
@ -90,7 +89,6 @@ newPeerInfo = liftIO do
|
||||||
<*> newTVarIO (Left 0)
|
<*> newTVarIO (Left 0)
|
||||||
<*> newTVarIO 0
|
<*> newTVarIO 0
|
||||||
<*> newTVarIO Nothing
|
<*> newTVarIO Nothing
|
||||||
<*> newTVarIO False
|
|
||||||
|
|
||||||
type instance SessionData e (PeerInfo e) = PeerInfo e
|
type instance SessionData e (PeerInfo e) = PeerInfo e
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue