From 88a7bb50033baab3c2d0eed7e4be868e8966300a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Fri, 17 Nov 2023 20:28:44 +0100 Subject: Split to library and executable parts --- src/Sync.hs | 46 ---------------------------------------------- 1 file changed, 46 deletions(-) delete mode 100644 src/Sync.hs (limited to 'src/Sync.hs') diff --git a/src/Sync.hs b/src/Sync.hs deleted file mode 100644 index dd801b5..0000000 --- a/src/Sync.hs +++ /dev/null @@ -1,46 +0,0 @@ -module Sync ( - SyncService(..), -) where - -import Control.Monad -import Control.Monad.Reader - -import Data.List - -import Identity -import Service -import State -import Storage -import Storage.Merge - -data SyncService = SyncPacket (Stored SharedState) - -instance Service SyncService where - serviceID _ = mkServiceID "a4f538d0-4e50-4082-8e10-7e3ec2af175d" - - serviceHandler packet = do - let SyncPacket added = fromStored packet - pid <- asks svcPeerIdentity - self <- svcSelf - when (finalOwner pid `sameIdentity` finalOwner self) $ do - updateLocalHead_ $ \ls -> do - let current = sort $ lsShared $ fromStored ls - updated = filterAncestors (added : current) - if current /= updated - then mstore (fromStored ls) { lsShared = updated } - else return ls - - serviceNewPeer = notifyPeer . lsShared . fromStored =<< svcGetLocal - serviceStorageWatchers _ = (:[]) $ SomeStorageWatcher (lsShared . fromStored) notifyPeer - -instance Storable SyncService where - store' (SyncPacket smsg) = store' smsg - load' = SyncPacket <$> load' - -notifyPeer :: [Stored SharedState] -> ServiceHandler SyncService () -notifyPeer shared = do - pid <- asks svcPeerIdentity - self <- svcSelf - when (finalOwner pid `sameIdentity` finalOwner self) $ do - forM_ shared $ \sh -> - replyStoredRef =<< (mstore . SyncPacket) sh -- cgit v1.2.3