summaryrefslogtreecommitdiff
path: root/src/Erebos/Network.hs
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2025-08-04 19:45:50 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2025-08-04 20:56:33 +0200
commit9d28d822897d59c7e98aac1ca8ba254fc00fd9df (patch)
tree049ae5ce18b96b30975fe5e290d9362a9deef262 /src/Erebos/Network.hs
parent023171b156fc00c29293cf36979e957f824ba7cc (diff)
Separate notifications for new and updated peers
Diffstat (limited to 'src/Erebos/Network.hs')
-rw-r--r--src/Erebos/Network.hs13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/Erebos/Network.hs b/src/Erebos/Network.hs
index f0c44a4..6265bbf 100644
--- a/src/Erebos/Network.hs
+++ b/src/Erebos/Network.hs
@@ -784,7 +784,7 @@ finalizedChannel peer@Peer {..} ch self = do
-- Notify services about new peer
readTVar peerIdentityVar >>= \case
- PeerIdentityFull _ -> notifyServicesOfPeer peer
+ PeerIdentityFull _ -> notifyServicesOfPeer True peer
_ -> return ()
@@ -810,7 +810,7 @@ handleIdentityAnnounce self peer ref = liftIO $ atomically $ do
PeerIdentityFull pid
| idData pid `precedes` wrappedLoad ref
-> validateAndUpdate (idUpdates pid) $ \_ -> do
- notifyServicesOfPeer peer
+ notifyServicesOfPeer False peer
_ -> return ()
@@ -823,16 +823,17 @@ handleIdentityUpdate peer ref = liftIO $ atomically $ do
writeTVar (peerIdentityVar peer) $ PeerIdentityFull pid'
writeTChan (serverChanPeer $ peerServer peer) peer
when (pid /= pid') $ do
- notifyServicesOfPeer peer
+ notifyServicesOfPeer False peer
| otherwise -> return ()
-notifyServicesOfPeer :: Peer -> STM ()
-notifyServicesOfPeer peer@Peer { peerServer_ = Server {..} } = do
+notifyServicesOfPeer :: Bool -> Peer -> STM ()
+notifyServicesOfPeer new peer@Peer { peerServer_ = Server {..} } = do
writeTQueue serverIOActions $ do
paddr <- getPeerAddress peer
forM_ serverServices $ \service@(SomeService _ attrs) ->
- runPeerServiceOn (Just ( service, attrs )) [] paddr peer serviceNewPeer
+ runPeerServiceOn (Just ( service, attrs )) [] paddr peer $
+ if new then serviceNewPeer else serviceUpdatedPeer
receivedFromCustomAddress :: PeerAddressType addr => Server -> addr -> ByteString -> IO ()