summaryrefslogtreecommitdiff
path: root/src/Erebos
diff options
context:
space:
mode:
Diffstat (limited to 'src/Erebos')
-rw-r--r--src/Erebos/DirectMessage.hs4
-rw-r--r--src/Erebos/Network.hs13
-rw-r--r--src/Erebos/Service.hs3
-rw-r--r--src/Erebos/Sync.hs1
4 files changed, 14 insertions, 7 deletions
diff --git a/src/Erebos/DirectMessage.hs b/src/Erebos/DirectMessage.hs
index d680997..7807204 100644
--- a/src/Erebos/DirectMessage.hs
+++ b/src/Erebos/DirectMessage.hs
@@ -108,9 +108,11 @@ instance Service DirectMessage where
else join $ asks $ dmOwnerMismatch . svcAttributes
serviceNewPeer = do
- updateDirectMessagePeer . finalOwner =<< asks svcPeerIdentity
syncDirectMessageToPeer . lookupSharedValue . lsShared . fromStored =<< svcGetLocal
+ serviceUpdatedPeer = do
+ updateDirectMessagePeer . finalOwner =<< asks svcPeerIdentity
+
serviceStorageWatchers _ =
[ SomeStorageWatcher (lookupSharedValue . lsShared . fromStored) syncDirectMessageToPeer
, GlobalStorageWatcher (lookupSharedValue . lsShared . fromStored) findMissingPeers
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 ()
diff --git a/src/Erebos/Service.hs b/src/Erebos/Service.hs
index afcf512..303f9db 100644
--- a/src/Erebos/Service.hs
+++ b/src/Erebos/Service.hs
@@ -51,6 +51,9 @@ class (
serviceNewPeer :: ServiceHandler s ()
serviceNewPeer = return ()
+ serviceUpdatedPeer :: ServiceHandler s ()
+ serviceUpdatedPeer = return ()
+
type ServiceAttributes s = attr | attr -> s
type ServiceAttributes s = Proxy s
defaultServiceAttributes :: proxy s -> ServiceAttributes s
diff --git a/src/Erebos/Sync.hs b/src/Erebos/Sync.hs
index d837a14..5f5fdec 100644
--- a/src/Erebos/Sync.hs
+++ b/src/Erebos/Sync.hs
@@ -31,6 +31,7 @@ instance Service SyncService where
else return ls
serviceNewPeer = notifyPeer . lsShared . fromStored =<< svcGetLocal
+ serviceUpdatedPeer = serviceNewPeer
serviceStorageWatchers _ = (:[]) $ SomeStorageWatcher (lsShared . fromStored) notifyPeer
instance Storable SyncService where